报表和报表工具的概念
说到报表,很多人第一时间会想到财务报表,但此报表非彼报表,这里说的报表范围更广。
各行业应用中呈现的各类图表都是报表,财务报表只是其中的一小部分。
报表工具,顾名思义,就是用来做报表的工具了。
那么有同学会问了,用EXCEL画表格不是挺方便吗?还要专门的报表工具?没错,EXCEL画表格是一绝,看起来对付这些报表都没有问题。
但是,这里说的报表是指应用软件中的报表,要从数据库中读数,并进行过滤、汇总等计算后,自动生成报表,这就不是Excel搞得了的了。
这些报表大都是动态的,比如这张销售表
会针对月份和分公司统计,一月有,二月也有,北京有,上海也有,如果用EXCEL做,那就得每月每个分公司都做一遍,,工作量很大而且容易出错。即使是复制名单再去改很麻烦,不光数值会变,人员也会变。
EXCEL不适合做这种和数据库互动的报表,要面向程序员的专业报表工具才干得了。
C/S报表
上世纪90年代的C/S时代就有许多报表工具,比如大名鼎鼎的Crystal Report水晶报表。
有些开发工具也有可以做报表的控件,比如PowerBuilder的DataWindow,Delphi的DataGrid
还有一些国外BI工具,比如BusinessObject, Cognos,也能做报表,都可以视为报表工具。
B/S报表
2000年后,应用开发逐步进入B/S时代,业务处理要放在服务端,报表也要以HTML形式呈现在浏览器中。但这些C/S工具都是在前端计算处理,也难以生成合适的HTML,这就不符合B/S应用的架构需求了。
程序员也就没法用了,只能自行编码了。
好在,HTML有表格标记table,像这种简单横平竖直的表格
序号 | 姓名 | 班级 | 性别 | 成绩 |
1 | 张三 | 一班 | 男 | 90 |
2 | 李四 | 一班 | 男 | 85 |
3 | 小丽 | 一班 | 女 | 70 |
4 | 小敏 | 一班 | 女 | 60 |
对应的HTML也很规整,自己编程做难度也不大。
<html> <head> <meta charset="UTF-8"> <style> table{border: 1px solid black;width: 300px;margin: 0 auto;border-spacing:0 ;border-collapse: collapse;} td{border: 1px solid black;padding: 5px;width: 100px;} </style> </head> <body> <table cellspacing="10" cellpadding-"10"> <tbody> <tr><td>序号</td><td>姓名</td><td>班级</td><td>性别</td><td>成绩</td></tr> <tr><td>1</td><td>张三</td><td>一班</td><td>男</td><td>90</td></tr> <tr><td>2</td><td>李四</td><td>一班</td><td>男</td><td>85</td></tr> <tr><td>3</td><td>小丽</td><td>一班</td><td>女</td><td>70</td></tr> <tr><td>4</td><td>小敏</td><td>一班</td><td>女</td><td>60</td></tr> </tbody> </table> </body> </html>
但稍有些层次格式的就很麻烦了,比如这种有合并格的。对应的HTML语法就挺复杂了。
受理员 | 受理数 | 完成数 | 完成率 | |
受理处 | 王艳 | 25 | 20 | 80.80% |
王伟 | 30 | 25 | 83.33% | |
刘芳 | 28 | 25 | 89.30% | |
总计 | 83 | 70 | 84.33% | |
话务组 | 张扬 | 35 | 30 | 85.71% |
毛慧 | 40 | 35 | 87.50% | |
韩磊 | 38 | 35 | 92.10% | |
总计 | 113 | 100 | 88.50% |
<html> <head> </head>
受理员 | 受理数 | 完成数 | 完成率 | |
受理处 | 王艳 | 25 | 20 | 80.80% |
王伟 | 30 | 25 | 83.33% | |
刘芳 | 28 | 25 | 89.30% | |
总计 | 83 | 70 | 84.33% | |
话务组 | 张扬 | 35 | 30 | 85.71% |
毛慧 | 40 | 35 | 87.50% | |
韩磊 | 38 | 35 | 92.10% | |
总计 | 113 | 100 | 88.50% |
再做个交叉加个斜线。这代码就得写四五页了,继续编程硬写就非常费时费力了。
还有远比这复杂得多的报表,硬编码的工作量可想而知。
有需求就会有产品,于是,业界开始出现纯HTML的报表工具,比如JasperReport,BIRT等
这些工具大都是java开发的,很容易集成进Java应用中,在后台计算生成HTML,架构问题就解决了。
这些工具继承了早期C/S报表工具的数学模型,我们就把它们称作传统工具。
传统工具的弊端
那么,有了这些B/S报表工具,报表开发难题是不是就解决了?
其实听名字就知道,还差得远。否则也就不会叫“传统”了。
传统报表工具大都来自国外,在英语中叫做Reporting Tool,而Report这个词的本意是报告,并没有表格的意思。
“表”能力差
国外的这些报表,或者应该说是报告,确实经常都没有表格线,可以说只有“报”,也就是数据统计,而没有“表”,也就是表格样式。
但我国的报表不是这样的。我国的报表,即有“报”又有“表”,即要数据统计,又要表格样式,统计数据要在规整的表格中呈现,“报”和“表”缺一不可。
国外的Reporting tool虽然能做数据统计,也就是有一些“报”的能力,但“表”的能力却很差,做中国的报表非常不顺手。
这些工具大都是控件式的,就是把数据连同其框框摆来摆去,美其名曰拖拖拽拽就可以画出任何报表,然而真用来画表格,却会把人累死。
比如这个表,调整半天也只能是这个样子
各种对不齐,各种格线重复堆叠。报表还总要修改,万一要增删一列,那就前功尽弃,又得重新排版了。
这种工具完全没体现出表格的规律性,表的能力极差。
中国的报表大都是这样的,格子多,还分层合并。
格子是用直线围出来的,而不是控件堆出来的,要像EXCEL这样绘制才方便,传统工具做起来极为费劲。
因为被“表”的问题折磨太深,有人干脆直接用Excel控件了
这样能解决表的问题,但计算能力太弱,所有数据都要自己填,彻底丧失了“报”的能力,硬编码工作量更大。结果,很多人又继续选择传统工具,忍受“表”的折磨。报和表,始终不能兼得。
“报”能力也不行
然而,这些传统工具“报”的能力其实也不强,仅仅是相对于几乎不存在的“表”的能力显得更突出而已。
这些工具的数学模型大都只支持单数据集,遇到多表多库的数据就不好处理
都得提前写SQL做join,把多个数据源合成一个才能做报表。
而有时想写SQL来JOIN也不行,只能做用复杂的嵌套子表来做。
中国的报表大部分都很复杂,多数据源是家常便饭,有时甚至多达十几个数据源,如果都用sql叉乘,或者都做子报表嵌套,复杂度和性能都是大问题
“报”+“表”更不行
还有“报”和“表”结合的能力
这些工具只能做出单片纵向变化的表格。
而中国报表,横向、纵向同时双向多层扩展又是普遍需求。
还会分片,不同片区展现不同的统计主题也很常见
传统报表只能实现单片纵向扩展,当然不够用。
其实,传统工具中通常也会提供交叉表功能,可以做双向扩展,格子也是直接对齐的。
但格式和计算功能都很死板,不能随意设置,只能做很规整的交叉表,相当于Excel那个透视表,合并单元格就不要想了,一个交叉表斜线就会把这些工具难为死。
而且也还是单片的。
歪个楼说句题外话,这种交叉表模型其实就是BI软件和自助报表的模型
号称能让业务人员拖拖拽拽做报表,从而解放程序员。但结果也只是能做些规整的分组交叉分析报表,对于前面说的中国复杂报表全然无能为力,离所谓零编码做报表差得十万八千里。
计算能力也不强
这些传统工具计算能力也不强,做个同行计算,同组聚合没太大问题。
但这种排名,以及同比环比等运算,都会涉及跨行跨组,传统报表就又不行了。
不能在报表中计算,只能是回到数据源阶段准备。
而同环比、排名这些格间计算,也都是中国报表常见的需求。
采集填报也没有
除了“报”和“表”的需求外,中国报表还要“填”
数据采集填报也是常见需求。而传统报表工具普遍不支持“填”
至于填报时的配套辅助功能,比如下拉列表,下拉日历等便利性输入方式,对录入数据校验等,那就更不要想了
种种弊端,种种缺陷,说明这些国外的传统报表模型并不能胜任中国报表的制作需求。
新一代报表工具
新时代,新需求,新一代的报表工具应运而生。
这就要提到一款国内产品了:润乾报表。
在研究了数千张中国式复杂报表后,润乾提出了全新的报表模型。它满足前面提到的复杂报表的所有需求,“报”的方面有强大灵活的数据统计能力,“”表“的方面采用类EXCEL的设计模式,实现了报与表的完美组合,彻底解决了中国复杂报表的难题。
相较于传统工具只能做单数据集,单向扩展,单片,单线结构的报表
润乾这个数学模型,则可以做多数据集,双向扩展,多层分片再扩展的报表
相当于把报表的线型结构扩展成了树型结构,润乾为这个模型起了个名字叫非线性报表模型,并且还出了书。
因为功能和效率远远超越传统工具,这款报表工具很快成为了行业标准,占据了国内报表的大部分市场。
略有点遗憾的是,润乾未能成功为这个全新的非线性报表模型申请到专利保护,专利局说这类数学模型是人类的共同知识,不属于技术发明,按专利法不能授予专利。
结果,很快国内也出现了仿制产品,共同造就了中国报表工具市场的繁荣,现在国内已经很少见到国外产品了
报表工具可能是唯一一个国产软件能力远远超过国外软件的企业级通用软件领域。
那么,有了非线性报表模型,是不是报表工具的问题就都解决了?
基本上是的,剩下的都没什么难度了。
比如移动报表,看起来是智能手机时代的新需求,和浏览器上的很不一样
但其实并没有什么难度,因为手机都支持H5,还是普通的HTML报表,只要考虑分辨率和自适应就可以了。
图形也一样,看着不好做,但工具实现起来也没有什么难度,只是有一定的繁度而已
而且现在还有各种开源的第三方图形包,只要集成一个就可以了,连繁度都没有了。
那么这些国产报表工具在功能上是不是就没什么差别了?
当然不是。
并不是所有厂商都实现了非线性报表模型,有些厂家定位是偏BI业务的
虽然也能做些报表,但并不是主打阵地,这时候会继续采用传统模型或在其基础上增加少量非线性报表的功能点,比如多数据源和局部的格间计算。毕竟这样做,技术上要容易些。
专注报表定位的则会模仿非线性报表模型,虽然模型没有专利壁垒,但工程实现也不是很简单,除润乾外,也只有极少数厂商能够较全面地实现,有些厂商只能实现一个局部,这样各家报表工具在功能上就表现出巨大差异了,各个产品具体能实现到什么程度,可以用前面举例的报表来检验。
除此之外,各产品的操作风格也有些不同。
比如有的工具偏爱可视化编辑,新手入门会容易些,但熟手会嫌啰嗦,后续开发效率偏低。
=ds1.count(price*amount>=10000 and interval(ORDER_DATE,RE_DATE)<=30 and month(ORDER_DATE)>=10 and month(ORDER_DATE)<=12)
有的工具则倾向手写表达式,新手刚上手会有些难以适应,但熟练后开发效率更高。还有的在意美观,而另一些更注重性能。不同的厂商,造就了现在报表工具不同的风格。
这就是中国报表工具的大概发展历程,从无到有,从劣到优,到现在报表工具已经成为软件系统中不可或缺的一环,希望我们国产的工具越做越好,也希望有报表需求的同学,都可以找到自己称手的工具。