1.合并单元格

  这个表格在报表里面算是比较典型的

    1.里面的表格的列标题现在是写死的,其实这些可以通过配置进行

    2.至于如果表头要进行合并(这种需求比较少,也比较容易实现)

    3.至于统计:最好在后台按照一定的格式统计直接加入即可

    注意:其实这个表格关注的仅仅病历的缺陷数量已经种类的数量,其余的都是一些维度

         度量:缺陷数量,缺陷种类---真正的有意义的数字

       维度:科室,病区,年度,医生,病人---完全就是类似进行挖掘的维度(上卷或者下钻)(做为列是采取具体的度量值,作为行是使其维度层次)

//运行病历质量病历明细报表
function builderTables(){ var html = '<div align="center" style=" height:22px; color:#1D417D; font-size:14px;font-weight:bold">运行病历质量病历明细报表</div>';
html += '<div id="title" style="font-size:12px; font-weight:bold;width:400px;position: absolute;">统计日期:' + "2012-01" + ' 至 ' +"2012-12" + '</div>';
html += "<div align='center'><br/><br/><table class='LxStyle'id='LxTable' border='1' cellspacing='0' ><thead><tr>" +
"<th style=\"text-align:center ; \">科室名称</th>" +
"<th style=\"text-align:center ; \">病区</th>" +
"<th style=\"text-align:center ; \">病案号</th>" +
"<th style=\"text-align:center ; \">医生</th>" +
"<th style=\"text-align:center ; \">入院日期</th>" +
"<th style=\"text-align:center ; \">缺陷种类</th>" +
"<th style=\"text-align:center ; \">缺陷总数</th>" +
"</tr></thead><tbody>"; var datas = [
{DEPTNAME:'骨科',SUBDEPTNAME:'骨科一病区',INPNO:'13021',DOCTORNAME:'周一渠',INDATE:'2012-12-12',CHECKTYPECOUNT:'5',CHECKPOINTCOUNT:'17'},
{DEPTNAME:'骨科',SUBDEPTNAME:'骨科二病区',INPNO:'30015',DOCTORNAME:'李思雨',INDATE:'2012-02-22',CHECKTYPECOUNT:'15',CHECKPOINTCOUNT:'20'},
{DEPTNAME:'骨科',SUBDEPTNAME:'骨科二病区',INPNO:'10421',DOCTORNAME:'张议天',INDATE:'2012-09-13',CHECKTYPECOUNT:'2',CHECKPOINTCOUNT:'13'},
{DEPTNAME:'骨科',SUBDEPTNAME:'骨科三病区',INPNO:'92021',DOCTORNAME:'麦子子',INDATE:'2012-08-14',CHECKTYPECOUNT:'34',CHECKPOINTCOUNT:'44'},
{DEPTNAME:'眼科',SUBDEPTNAME:'眼科一病区',INPNO:'15421',DOCTORNAME:'顾一宇',INDATE:'2012-08-15',CHECKTYPECOUNT:'5',CHECKPOINTCOUNT:'55'},
{DEPTNAME:'血液科',SUBDEPTNAME:'血液科一病区',INPNO:'10051',DOCTORNAME:'吴子玉',INDATE:'2012-09-22',CHECKTYPECOUNT:'15',CHECKPOINTCOUNT:'55'},
{DEPTNAME:'血液科',SUBDEPTNAME:'血液科二病区',INPNO:'10079',DOCTORNAME:'李永堂',INDATE:'2012-07-19',CHECKTYPECOUNT:'4',CHECKPOINTCOUNT:'22'}
]; var deptString = "";
var cntDept = 0;
var cntSubdept = 0; var subdeptString = ""; for (var i = 0; i < datas.length; i++) {
var n = datas[i]; html += "<tr>";
if (deptString != n.DEPTNAME) {
deptString = n.DEPTNAME;
subdeptString = n.SUBDEPTNAME; html = html.replace(/subdeptspan/g, cntSubdept);
html = html.replace(/deptspan/g, cntDept); html += "<td rowspan='deptspan' style=\"text-align:center ; \">" + n.DEPTNAME + "</td>" +
"<td rowspan='subdeptspan' style=\"text-align:center ; \">" +
n.SUBDEPTNAME +
"</td>"; cntDept = 0;
cntSubdept = 0;
} else if (subdeptString != n.SUBDEPTNAME) { subdeptString = n.SUBDEPTNAME;
html = html.replace(/subdeptspan/g, cntSubdept); html += "<td rowspan='subdeptspan' style=\"text-align:center ;\">" + n.SUBDEPTNAME + "</td>";
cntSubdept = 0;
} cntSubdept++;
cntDept++; html += "<td style=\"text-align:center ; \">" + n.INPNO + "</td>" +
"<td style=\"text-align:center ; \">" +
n.DOCTORNAME +
"</td>" +
"<td style=\"text-align:center ; \">" +
n.INDATE +
"</td>" +
"<td style=\"text-align:center ; \">" +
n.CHECKTYPECOUNT +
"</td>" +
"<td style=\"text-align:center ; \">" +
n.CHECKPOINTCOUNT +
"</td>"
"</tr>";
}
html = html.replace(/subdeptspan/g, cntSubdept);
html = html.replace(/deptspan/g, cntDept); html += "</tbody></table></div>"; document.getElementById("tab").innerHTML=html; }

  

仔细琢磨上面三幅图

  就会发现,第三方图中,分类-季就是是一个层级维度,展示下钻

  第二图就是看起来就会更加的明显,但是实际大家可能看到的还是第三个图的方式比较多

  第一个图就是是本质图,他是平台的报表格式,通过维度,度量可以形成第2,3个图,都是关注的主要数据。

代码封装:

  满足大多数需求:

  

常见报表的JS代码的更多相关文章

  1. 使用jsCompress压缩混淆js代码的一些常见的问题和技巧

    不同的团队使用的js混淆器或压缩工具不一样,jsCompress是一款绿色的免费的js压缩工具,时代定制的UI团队推荐大家使用,不仅性能优越,而且操作非常人性化. 使用jsCompress.exe时, ...

  2. 常见的页面效果,相关的js代码

    1.焦点图 $(document).ready(function(){ var i=0; var autoChange= setInterval(function(){ if(i<$(" ...

  3. 10个常见的Node.js面试题

    如果你希望找一份有关Node.js的工作,但又不知道从哪里入手评测自己对Node.js的掌握程度. 本文就为你罗列了10个常见的Node.js面试题,分别考察了Node.js编程相关的几个主要方面. ...

  4. Web报表工具JS开发之日期校验

    在报表开发过程中,我们常常需要对查询界面进行日期校验.例如有两个参数:开始日期和结束日期,我们要校验的是:开始日期与结束日期不能为空,结束日期必须在开始日期之后以及结束日期必须在开始日期后的某个时间段 ...

  5. 移动手机端H5无缝间歇平滑向上滚动js代码

    在没结合css3的transform实现平滑过渡前,我都是用的jquery的animate方法,此方法在PC端基本看不出来有稍微卡顿的现象,但是在性能不高的手机上使用该方法,就会有明显的卡顿现象,不够 ...

  6. 常见算法是js实现汇总(转载)

    常见算法是js实现汇总 /*去重*/ <script> function delRepeat(arr){ var newArray=new Array(); var len=arr.len ...

  7. 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!【转载+整理】

    原文地址 本文内容 ECMAScript 发生了什么变化? 新标准 版本号6 兑现承诺 迭代器和for-of循环 生成器 Generators 模板字符串 不定参数和默认参数 解构 Destructu ...

  8. 编写高质量JS代码的68个有效方法(四)

    [20141129]编写高质量JS代码的68个有效方法(四) *:first-child { margin-top: 0 !important; } body>*:last-child { ma ...

  9. JS代码格式化修改表格的数值的格式

    今天在cognos中第一次需要用到JS,主要是报表页面展示的时候是可能得到如下的数据 ,我需要对其中类型中有金额字样的,后面的数值,精确2位小数:有百分比字样的,数值显示成百分比.如下. 我先尝试了自 ...

随机推荐

  1. Java IO流-字符流

    2017-11-05 18:34:39 Java中的IO流按数据类型分类分为两种,一是字节流,二是字符流.字符流的出现是为了简化文本数据的读入和写出操作. 如果操作的文件是文本文件,那么使用字符流会大 ...

  2. windows下的IO模型之异步选择(WSAAsyncSelect)模型

    异步选择(WSAAsyncSelect)模型是一个有用的异步I/O 模型.其核心函数是WSAAsyncSelect,该函数是非阻塞的 (关于异步io的理解详情可以看:http://www.cnblog ...

  3. windowplayer播放列表属性

    ArrayList a = new ArrayList(); a.Add("c:\\kugou\\林宇中 - 干物女.mp3"); a.Add("c:\\kugou\\海 ...

  4. C++ lower_bound 和upper_bound

    二分查找的函数有 3 个: 1.lower_bound(起始地址,结束地址,要查找的数值) 返回的是数值 第一个 出现的位置. 2.upper_bound(起始地址,结束地址,要查找的数值) 返回的是 ...

  5. ruby on rails Mac 安装

    网上的资料有很多,但好多坑,有的已经过期了,有的不符合现整理了一下 貌似有的还跟os系统版本有关系,请勿照搬,根据实际情况安装 我的系统版本是10.12.3 ps:选择一个较好的网络,很多问题有得时候 ...

  6. java实现的18位身份证格式验证算法

    公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码.1.地址码表示编码对象常住户口所在县(市. ...

  7. bzoj2120

    题解: 可修改莫队 我们加入一个时间T 然后在排序的时候考虑一下时间 在计算的时候也要考虑 代码: #include<bits/stdc++.h> using namespace std; ...

  8. 导入arr包

    提起项目的aar包 导入目标项目中 添加依赖 

  9. STL标准库-容器-rb_tree

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 红黑树,关联式容器底层实现(map set),在使用中基本运用不到,但是还是想了解一下他的运作方式 Red_Black tree ...

  10. New Concept English Two 13 31

    $课文29 出租汽车 294. Captain Ben Fawcett has bought an unusual taxi and has begun a new service. 本.弗西特机长买 ...