#
还有一个和中国报表特点没什么关系但是程序员常常碰到的头痛问题,就是产品的集成性。
在国内做应用开发,报表只是应用的一个部分而非全部,报表总是要被集成到应用系统中去,如果某个报表工具能力超强,但却不可被集成,那也是没意义。
考虑到当前国内应用开发的现状,我们只研讨基于J2EE机制下的B/S应用的报表集成。
现在流行的报表工具几乎都是独立服务器形式。独立服务器的好处没想出来,倒是觉得有很多缺点,主要有:
(1)
报表服务器与应用程序不在同一个进程空间内,数据沟通都需要通过网络协议进行,即使是同一台机器,也要把数据传来传去,浪费时间降低性能;
(2)
独立的报表服务器有自己的一套用户权限管理机制,设计得还挺复杂。程序必须往这个规则上靠,可这套规则从来也不够用:应用系统的用户管理没那么规整,能乖乖地按厂家设计的样子来(您见过这样的系统,把应用系统中的柜员、科长、局长这种业务角色建立在ORACLE的用户上?)。这种费劲又严重影响集成度的东西其实不做也罢,常常因此浪费很多时间还和应用接上不。
(3)
独立服务器没法充分应用服务器的本事,比如数据库连接就不能和应用系统的其它部分共享,集群能力,也得听命于报表服务器。Weblogic的平衡负载能力会比报表服务器要差?
(4)
布署方案:所有的程序数据打个WAR包很方便就上去了,可它偏要与众不同,要独自搞一块,还是没脾气。
想来想去,估计美国人可能不大需要被集成的报表工具,所以老外的产品也不是为了被集成而设计,这也就情有可愿了。可惜的是,国人抄老外时也没怎么想想,大多把体系结构也照抄了过来,特别是海归派的新兴企业;有系统集成经验的国产报表厂商就还稍好一点,没去费那劲。
所谓填报,顾名思义,就是填了再报。
中国人的报表不是统计汇总完了,就完了的,用户希望报表还要能填能改,改完的结果还可以再存起来(咱从小不就常常填表吗?)。中国人天生就认为表都是可以填的,这世上哪有不能填的表,那还叫表格吗?
老外是没想过这问题的,造出来的工具统统没有这个本事,人家觉得报表是报表,就是不可改的,填的表是另一种东西,根本不能叫报表。
EXCEL
可以填,而且填着还方便得很(不得不再次佩服一下微软),按照EXCEL抄的国货统统都有填的本事。不过,话说回来,这些工具还是有上面说的问题,没有数据模型,填完的数不知怎么写进数据库,于是常常只能放进文件中(就象EXCEL文件),需要再编程序处理。
填报功能说起来也挺复杂的:(1)要允许表格和数据库字段的随意对应,可能整表一条记录,也可能一行一条记录,甚至可能一格一条记录(交叉表填写),这几种情况还可能是组合出来的,同一张表一下子写进好几个数据表;(2)填的过程中还应当有自动计算能力(参考EXCEL),提交时应当有合法性的检查功能,看看填的数是否合理;(3)中国要填的表经常是一套一套的,十几张之多,一时半会儿填不完,需要下载下来回家慢慢填或者跟其他同事商量着填,这又需要多页填报或离线填报的功能。
每条功能搞起来都不容易啊!参考本版:填报-Web报表工具必不可少的功能。
除此之外,中国报表还有不少折磨人的小地方,特别是在打印输出方面,比如一张纸上打印几个小票据,横向分栏,横向分页时左表头的重复,末页补足空行,票据套打等等,这些比较头痛但还不算什么根本的问题,这里就不仔细评说了。
中国报表统计方面的第三个复杂点是格间运算,特别是跨行组的运算。
要统计就要有运算,所有的报表开发工具都提供了计算汇总的功能。运算只有两种,一种是行内各列之间的运算,另一种是针对某组(或全体)所有数据进行的汇总(可能带条件),两种运算可以组合。
但是,在中国的报表中只有要时间序列的,多半就要涉及到比上期、比去年同期之类的运算,这种运算跨行甚至跨组了。而这种能力,咱们手上这些报表开发工具就又没有了。其原因在于:这类工具都和数据库的概念匹配得很好,而数据库的行是没有次序的,不知道谁是谁的上一行,比上期就没法定义了,比去年同期这种跨组运算更是想不明白了。为了解决这些问题,有些工具添加了一些引用上行或累积值的特殊函数,但跨组运算依然没法处理,只有再写代码了。
这种比较有规律的需求还不算太难办,编程序准备数据或是写个复杂点的SQL语句都能处理。但中国表中常常还会有些独立的格子,其运算方法和谁都不相干,或是从表格中东南西北挑几个格子加减乘除一番,或者干脆又要到数据库中再做SELECT运算,与其它格子之间无规律可循。这可不是在后台写点程序准备好数据就完了的,需要生成完表格后,再编程序计算出这些数填进去,这种搞法一般就得采用报表的脚本或者宿主开发语言来写代码了。
这三个较大的数据统计问题已经把大伙折磨得差不多吧,其它相关的还有一些次要问题,比如参数和宏的引入、交叉表的表头向右对齐问题等等,就不细说了。
中国报表的第二个重要特征是分片,与多源相关,但又不完全一样。多源一般都会是分片的,但分片却不一定是多源的。
还是上面这两个例子(见5.1 多数据源),两个报表都很明显地分成了两片,每片都有自己独立的规则,很难统一成一种规则处理。而我们手中的报表工具,如果不考虑采用子报表的话,都要求报表有统一的规则,整个报表只有一片可以重复的区域(细节区和相邻的分组区),因为是单源的,想当然地以为只要一片重复区就够了,理论上就不可能做到分片规则了。
但中国报表中分片现象太常见了,同一批数据也可能按不同的主题统计汇总,比如人事表中并列着按民族划分再按学历划分。事实的情况还远不止分作两片,常常是竖着五六片,横着也是五六片,整个报表乘起来就有二十五六片。而且片与片之间又不是完全独立,横向的分片在纵向规则却又是一致的,反之也是如此。既便想做成子表,也不大容易,每个分片的表头都要重复编排,对齐就不说了。
如果运气好,虽然分片了,但整个表的样式看起来还是一致的(比如上面的第二个表),那还可以使出最后的杀手锏——写代码!
运气不会时时都好,如果碰到那种上下(或左右)几个分片中分组层数都不一样的表,就算代码能把数给算好,可格子却拼不出那种上下不同的样子,这会儿就会特别想念EXCEL了,至少样式是可以很随意的,写代码也就可以搞定了。
具体到每个分片也不是省油的灯,不象老外弄得那么简单,一下把所有的数都列出来,或者把所有的分组一个不落一个不重的列出来,这种搞法我们叫做“完全划分”。对应的就还有“不完全划分”,也就是分组中并不是把所有出现的情况都列出来(这种很常见),而且还可能重复列出(这个相对少见些)。比如我们按民族划分人员时,不大可能把五十六个民族全来一遍,一般也就是列几个大的民族再加个其它。比较典型的不完全划分现象就是固定行列,无论数据库中有多少记录多少分组,只关心这几种情况,表格永远只有这几行(列)。
老外的东西天生就是和数据库绑定的,固定行的不是搞不出来,可又要写代码或者复杂的SQL去准备数据,象著名的资产负债表,用这些报表工具去做简直就是摧残生命。
而且就算是会变的,这些工具也还有个行列不对称的问题,由于和数据库贴得太紧,大家只见过记录数会变的数据表,都没怎么见过字段数也会变的数据表,所以它们也就专心处理行方向的变化,拒绝去处理列数会变的表。后来总算有了一些打补丁的交叉表模板,能对付用着,但总是用起来不那么得心应手,除非特别规整的交叉报表,否则这些大牌武器就又虾米了。
摘要: 数据统计方面的问题要比报表样式的问题多得多,也严重得多,要分几个方面来研讨。
中国报表统计方面第一个重要特征是多数据源。
所谓多数据源是指同一张报表的数据会来自多个不同的数据表或视图,甚至来自多个不同的异构数据库!
1
)人员信息表
...
阅读全文
报表格式只是报表工具要解决的一部分问题。我们用报表工具的目的,是要能从数据库中读出数据,从而自动产生报表,数据才是报表要解决的核心问题,但是不能单纯地把二者分开(这也是选择报表工具时需要格外重视的)。
报表格式用Excel可以解决得很好,但是Excel没有数据汇总方案,除非编程序往格子里填数据,基本上没法从数据库中读出数据自动产生报表。而拖拽式的格式虽然解决得一般,但数据统计能力方面要比Excel强得很多,两害相权取其轻,堆框虽费劲,慢慢堆就行了,但统计汇总不行的话那就没办法了。
所以,很多报表工具都采用拖拽式画表,再辅以大量写代码的编程(就是数据处理,后面会详细说明),来处理中国式报表。参见前文:为什么说中国式报表特殊-1、国外报表。
另外,因为Excel的易用,使得用户能够自己做表,几乎所有用户的报表都有Excel文件。用户希望能将Excel的文件读入报表工具,这样就可以省去画表的工作了;同时,生成的报表,要能导出成Excel文件。但是因为拖拽式和EXCEL的画法完全不同,一定要生成EXCEL文件的话,大都会丧失格式,个别工具花了点功夫的可以做得很象(数巨报表导出EXCEL为了保证样式不失真,将大量的报表对象转成了合并格,某些报表对象转成图片,导出后的数据无法进行二次处理),还得再进行二次对齐、加工。至于读入EXCEL文件,还是算了吧。
为什么说中国式报表特殊-
3
、报表格式
下面是一个很常见的表-资产负债表。
资产负债表
。
在手工制表的时候,我们都是拿尺子来画表格。(也许中国式报表复杂是因为中国人先发明了尺子?)
现在的报表工具提供两种画表的方式:拖拽式和Excel式。
拖拽式的工具是拿很多小的文本框拼成一个大的矩形。这就存在边框之间的重合、对齐问题。如果碰上大格套小格,或者用户心血来潮要加减几个框,对齐的工作量是很大的。而且,屏幕上看着对齐的表打印到纸上又不齐了。因为打印机的分辨率比屏幕要高。(想像一下用拖拽式的工具画资产负债表的情况……。)
拖拽式模型其实是一个一般性的图元编辑器模型,没有体现出表格的规律性,什么都能画,可什么画起来都不大方便。(powerpoint也能画东西,为什么没人拿它画表?)
还好,我们还有Excel(这里要夸一夸微软了)。
EXCEL
采用网格线把格子围出来的画法,配合以合并格和边框,好比给大家配上尺子和笔,通过单元格的合并和拆分,再复杂的表Excel也能画出来。EXCEL的画法充分体现了表格的规律性,特别方便,连用户都会用。(用Excel画资产负债表看看?)
中国式报表采用Excel式的制表方式是非常非常合适的。
如果单纯是画表的问题,那么拖拽式和Excel式的差别无非是效率高低的问题,但是一旦跟数据挂上钩,问题就复杂得多了。
其实一句话就能概括中国式报表的特点:
格式复杂、信息量大
。中国报表很少有不带格线的:因为中国的表头比较乱,三五层的大格套小格很常见(还有著名的斜线),没有格线容易看走眼。中国式报表的信息量大,各种各样的数据,明细的、汇总的,往往都集中在一张纸上。
有人说中国式报表的复杂是因为应用水平低、业务不规范造成的。这种说法有一定道理,但不全对。举个例子:基金行业是新兴的行业,是最有条件借鉴国外的经验的,但是这两年报表也是越做越复杂。银行业的信息化水平也比较高,应用也很成熟,他们的表一点也不简单。
可能报表习惯与文化有关,在受中国文化的影响的国家和地区,如日本、韩国、台湾等,他们的报表都很复杂。看看咱们的方块字,汉字由很多不同的部分(偏旁部首)组成的,而英文单词则是26个英文字母进行简单组合。
回到正题上来:格式复杂――意味着格式是报表工具要解决的一个问题;信息量大――意味着复杂的统计运算。一个适合中国式报表的工具应该能够同时解决这两个问题,才能算是一个好的工具。
现在很多web报表工具都声称支持在线填报,如快逸报表、FineReport、StyleReport、数巨等,但有些web报表工具其实只是能生成可以填写的HTML而已,距离真正需要的填写上报功能相去甚远。
如果你有填报的需求,在选择web报表工具的时候,可以着重考察以下几个方面 :
1. Web报表工具能够处理数据入库。开发者不用为每个报表编写入库程序,数据能自动写入事先设计好的、能反映业务规则的数据结构中,而不是报表工具指定的固定数据结构。需要填写的web报表可能是行式的或交叉式的,数据入库的规则在报表定义时应当只定义一行(或一格),其它行(格)能够自动按规则重复;
2. 填报方案能够支持多级汇总填报,即填报表格首先是从基层数据库汇总而来,然后再回填入上级数据库中,而不是总是对着一个空表填写;
3. 最好能支持离线填写,即不联网时也可以填写,在联网后再上报数据;
4. 提供合法性检查功能,判断事先定义好的检查条件是否满足,如不满足则拒绝接收数据且给出提示;在页面端提供类EXCEL的自动计算功能,某个数据修改后,关联的数据立即变动,计算关系可以在报表中事先定义;合法性检查和自动计算关系都与入库定义类似需要能够自动按规则重复而不必为每个字段单独设计;
5. 提供多种多种编辑风格,如编辑框、下拉框、CheckBox等;下拉框的内容可以是固定列表,也可以来自数据库,另外,还应当支持两个下拉框之间的关联过滤(如部门和子部分之间自动过滤);
1
、大部分项目其实很难精确报表开发的工作量:固定报表的数量有限,可以客观评估;随意性比较大的报表,往往是跟客户在沟通中确定的,有相当一部分成本是花在沟通上了。
2
、使用
web
报表工具减少了开发量,但是相应的技术风险,包括:集成、技术支持、服务、培训等等,都应该考虑,而不仅仅是钱上面的简单加减。
3
、全面了解合作厂商的背景:成立时间、人数、技术原创程度、实施案例等,对你做出选择非常重要,尤其注意:有软件著作权不等于技术原创。
4
、使用
web
报表的不便:与用户的交互性不好,客户化定制不方便。很多工具宣传的“自定义
web
报表”能实现的功能非常有限。
5
、报表行业并不成熟,各产品间并不兼容,产品定价也没有统一的标准,不同产品的价格差别比较大。