互联网服务商业智能style

为什么说中国式报表特殊

为什么说中国式报表特殊


1、国外报表


不知道大家注意到没有,国外的很多报表工具,象水晶报表( Crystal Reprot )、 Style Report 、Jasper Report、IRport、Fast Report、QuickReport(Dephi 内嵌报表控件)等等,这些产品有一个共同点:××Report 。 Report 在字典里的解释大致是报告的意思。从产品的名称看,国外的报表工具似乎更象在解决报告的问题。


国外的报表样式非常规整,没有格线,表头非常简单,没有斜线表头、没有分层分组。一张报表提供的信息有限,如果要看所有信息,就只能几张表对照着看了。另外,国外的报表似乎没有填的需求(也许是业务规范或者应用水平高的缘故?)建议大家找几个报表工具提供的样例来对比看看。


基于这种报表需求,几乎所有的国外报表工具(除F1外)都采用如下方式:
(1)数学模型都是基于近三十年前的 SQL/OLAP 理论设计的,虽不断地有所改良,但根本处理方案并没有本质的变化。
(2)报表工具的主编辑界面呈条带状,以模拟 SQL 中的 Select 和 Group 运算;在行方向(横向)上的能力很强,
        可以添加小计、合计等各种运算。
(3)拖拽式制表,不懂业务的人做起来也非常方便。
(4)采用独立服务器,有独立的权限控制机制,无法享受应用服务器的集群等能力。  


   
2、特点


其实一句话就能概括中国式报表的特点: 格式复杂、信息量大 。中国报表很少有不带格线的:因为中国的表头比较乱,三五层的大格套小格很常见(还有著名的斜线),没有格线容易看走眼。中国式报表的信息量大,各种各样的数据,明细的、汇总的,往往都集中在一张纸上。

  

有人说中国式报表的复杂是因为应用水平低、业务不规范造成的。这种说法有一定道理,但不全对。举个例子:基金行业是新兴的行业,是最有条件借鉴国外的经验的,但是这两年报表也是越做越复杂。银行业的信息化水平也比较高,应用也很成熟,他们的表一点也不简单。


可能报表习惯与文化有关,在受中国文化的影响的国家和地区,如日本、韩国、台湾等,他们的报表都很复杂。看看咱们的方块字,汉字由很多不同的部分(偏旁部首)组成的,而英文单词则是26个英文字母进行简单组合。


回到正题上来:格式复杂――意味着格式是报表工具要解决的一个问题;信息量大――意味着复杂的统计运算。一个适合中国式报表的工具应该能够同时解决这两个问题,才能算是一个好的工具。


   
3、报表格式

  

下面是一个很常见的表-资产负债表



图片1.jpg



在手工制表的时候,我们都是拿尺子来画表格。(也许中国式报表复杂是因为中国人先发明了尺子?)


现在的报表工具提供两种画表的方式:拖拽式和Excel式。


拖拽式的工具是拿很多小的文本框拼成一个大的矩形。这就存在边框之间的重合、对齐问题。如果碰上大格套小格,或者用户心血来潮要加减几个框,对齐的工作量是很大的。而且,屏幕上看着对齐的表打印到纸上又不齐了。因为打印机的分辨率比屏幕要高。(想像一下用拖拽式的工具画资产负债表的情况……。)


拖拽式模型其实是一个一般性的图元编辑器模型,没有体现出表格的规律性,什么都能画,可什么画起来都不大方便。(powerpoint也能画东西,为什么没人拿它画表?)


还好,我们还有Excel(这里要夸一夸微软了)。


EXCEL 采用网格线把格子围出来的画法,配合以合并格和边框,好比给大家配上尺子和笔,通过单元格的合并和拆分,再复杂的表Excel也能画出来。EXCEL的画法充分体现了表格的规律性,特别方便,连用户都会用。(用Excel画资产负债表看看?)


中国式报表采用Excel式的制表方式是非常非常合适的。


如果单纯是画表的问题,那么拖拽式和Excel式的差别无非是效率高低的问题,但是一旦跟数据挂上钩,问题就复杂得多了。



4、报表的格式与数据

   

报表格式只是报表工具要解决的一部分问题。我们用报表工具的目的,是要能从数据库中读出数据,从而自动产生报表,数据才是报表要解决的核心问题,但是不能单纯地把二者分开(这也是选择报表工具时需要格外重视的)。


报表格式用Excel可以解决得很好,但是Excel没有数据汇总方案,除非编程序往格子里填数据,基本上没法从数据库中读出数据自动产生报表。而拖拽式的格式虽然解决得一般,但数据统计能力方面要比Excel强得很多,两害相权取其轻,堆框虽费劲,慢慢堆就行了,但统计汇总不行的话那就没办法了。


所以,很多报表工具都采用拖拽式画表,再辅以大量写代码的编程(就是数据处理,后面会详细说明),来处理中国式报表。


另外,因为Excel的易用,使得用户能够自己做表,几乎所有用户的报表都有Excel文件。用户希望能将Excel的文件读入报表工具,这样就可以省去画表的工作了;同时,生成的报表,要能导出成Excel文件。但是因为拖拽式和EXCEL的画法完全不同,一定要生成EXCEL文件的话,大都会丧失格式,个别工具花了点功夫的可以做得很象(数巨报表导出EXCEL为了保证样式不失真,将大量的报表对象转成了合并格,某些报表对象转成图片,导出后的数据无法进行二次处理),还得再进行二次对齐、加工。至于读入EXCEL文件,还是算了吧。



5主要特点

   
5.1 多数据源

   

数据统计方面的问题要比报表样式的问题多得多,也严重得多,要分几个方面来研讨。


中国报表统计方面第一个重要特征是多数据源。


所谓多数据源是指同一张报表的数据会来自多个不同的数据表或视图,甚至来自多个不同的异构数据库!


1 )人员信息表



                               
                               

正常情况下会在数据库中设计两张数据表来保存这个表格中的数据。


2) 成本销售表



                                       

一般为了业务系统处理方便,购进和销出信息在数据库中也会是两个数据表,这张报表中不仅有两组来源不同的数据,而且之间还要运算(余额)。


带七、八个数据源,关联n张表的中国式报表非常多。


对于第一张表,上下部分格式完全不同,如果用拖拽式工具,只能采用子报表的方法,也就是把下半部分造成一个子表贴进去,这就使得原本就极难对齐的格线变得更难对齐,如果再增加三五个子表,考虑到每个子表都会根据数据库中数据扩展,整张报表还不知道会变成多大;其次主子表之间除了简单的参数传递外,互相之间无法沟通,想在子表中进行运算,还得重新再算。所以,传统的子报表能不用尽量不用。


第二张表,样式不复杂,两个数据表叉乘,写个复杂点的 SQL 就行。如果一个报表中有七八个、上十个数据源呢?数据库做 n 张表的叉乘,有点高等数学基础的同志应该都能算出来要花的时间。而且复杂的 SQL 查错、维护都很麻烦,跟写代码好像也没什么差别。


当然你可以写代码,包括写存储过程准备中间表,但是如果这么做,还要报表工具干什么?



5.2 分片

   

中国报表的第二个重要特征是分片,与多源相关,但又不完全一样。多源一般都会是分片的,但分片却不一定是多源的。


还是上面这两个例子(见5.1 多数据源),两个报表都很明显地分成了两片,每片都有自己独立的规则,很难统一成一种规则处理。而我们手中的报表工具,如果不考虑采用子报表的话,都要求报表有统一的规则,整个报表只有一片可以重复的区域(细节区和相邻的分组区),因为是单源的,想当然地以为只要一片重复区就够了,理论上就不可能做到分片规则了。


但中国报表中分片现象太常见了,同一批数据也可能按不同的主题统计汇总,比如人事表中并列着按民族划分再按学历划分。事实的情况还远不止分作两片,常常是竖着五六片,横着也是五六片,整个报表乘起来就有二十五六片。而且片与片之间又不是完全独立,横向的分片在纵向规则却又是一致的,反之也是如此。既便想做成子表,也不大容易,每个分片的表头都要重复编排,对齐就不说了。


如果运气好,虽然分片了,但整个表的样式看起来还是一致的(比如上面的第二个表),那还可以使出最后的杀手锏——写代码!


运气不会时时都好,如果碰到那种上下(或左右)几个分片中分组层数都不一样的表,就算代码能把数给算好,可格子却拼不出那种上下不同的样子,这会儿就会特别想念EXCEL了,至少样式是可以很随意的,写代码也就可以搞定了。


具体到每个分片也不是省油的灯,不象老外弄得那么简单,一下把所有的数都列出来,或者把所有的分组一个不落一个不重的列出来,这种搞法我们叫做“完全划分”。对应的就还有“不完全划分”,也就是分组中并不是把所有出现的情况都列出来(这种很常见),而且还可能重复列出(这个相对少见些)。比如我们按民族划分人员时,不大可能把五十六个民族全来一遍,一般也就是列几个大的民族再加个其它。比较典型的不完全划分现象就是固定行列,无论数据库中有多少记录多少分组,只关心这几种情况,表格永远只有这几行(列)。


老外的东西天生就是和数据库绑定的,固定行的不是搞不出来,可又要写代码或者复杂的SQL去准备数据,象著名的资产负债表,用这些报表工具去做简直就是摧残生命。


而且就算是会变的,这些工具也还有个行列不对称的问题,由于和数据库贴得太紧,大家只见过记录数会变的数据表,都没怎么见过字段数也会变的数据表,所以它们也就专心处理行方向的变化,拒绝去处理列数会变的表。后来总算有了一些打补丁的交叉表模板,能对付用着,但总是用起来不那么得心应手,除非特别规整的交叉报表,否则这些大牌武器就又虾米了。


5.3 跨行组运算

     

中国报表统计方面的第三个复杂点是格间运算,特别是跨行组的运算。


要统计就要有运算,所有的报表开发工具都提供了计算汇总的功能。运算只有两种,一种是行内各列之间的运算,另一种是针对某组(或全体)所有数据进行的汇总(可能带条件),两种运算可以组合。


但是,在中国的报表中只有要时间序列的,多半就要涉及到比上期、比去年同期之类的运算,这种运算跨行甚至跨组了。而这种能力,咱们手上这些报表开发工具就又没有了。其原因在于:这类工具都和数据库的概念匹配得很好,而数据库的行是没有次序的,不知道谁是谁的上一行,比上期就没法定义了,比去年同期这种跨组运算更是想不明白了。为了解决这些问题,有些工具添加了一些引用上行或累积值的特殊函数,但跨组运算依然没法处理,只有再写代码了。


这种比较有规律的需求还不算太难办,编程序准备数据或是写个复杂点的SQL语句都能处理。但中国表中常常还会有些独立的格子,其运算方法和谁都不相干,或是从表格中东南西北挑几个格子加减乘除一番,或者干脆又要到数据库中再做SELECT运算,与其它格子之间无规律可循。这可不是在后台写点程序准备好数据就完了的,需要生成完表格后,再编程序计算出这些数填进去,这种搞法一般就得采用报表的脚本或者宿主开发语言来写代码了。


这三个较大的数据统计问题已经把大伙折磨得差不多吧,其它相关的还有一些次要问题,比如参数和宏的引入、交叉表的表头向右对齐问题等等,就不细说了。


5.4 填报

      

所谓填报,顾名思义,就是填了再报。


中国人的报表不是统计汇总完了,就完了的,用户希望报表还要能填能改,改完的结果还可以再存起来(咱从小不就常常填表吗?)。中国人天生就认为表都是可以填的,这世上哪有不能填的表,那还叫表格吗?


老外是没想过这问题的,造出来的工具统统没有这个本事,人家觉得报表是报表,就是不可改的,填的表是另一种东西,根本不能叫报表。


EXCEL 可以填,而且填着还方便得很(不得不再次佩服一下微软),按照EXCEL抄的国货统统都有填的本事。不过,话说回来,这些工具还是有上面说的问题,没有数据模型,填完的数不知怎么写进数据库,于是常常只能放进文件中(就象EXCEL文件),需要再编程序处理。


填报功能说起来也挺复杂的:(1)要允许表格和数据库字段的随意对应,可能整表一条记录,也可能一行一条记录,甚至可能一格一条记录(交叉表填写),这几种情况还可能是组合出来的,同一张表一下子写进好几个数据表;(2)填的过程中还应当有自动计算能力(参考EXCEL),提交时应当有合法性的检查功能,看看填的数是否合理;(3)中国要填的表经常是一套一套的,十几张之多,一时半会儿填不完,需要下载下来回家慢慢填或者跟其他同事商量着填,这又需要多页填报或离线填报的功能。


除此之外,中国报表还有不少折磨人的小地方,特别是在打印输出方面,比如一张纸上打印几个小票据,横向分栏,横向分页时左表头的重复,末页补足空行,票据套打等等,这些比较头痛但还不算什么根本的问题,这里就不仔细评说了。


5.5 集成性

      

还有一个和中国报表特点没什么关系但是程序员常常碰到的头痛问题,就是产品的集成性。


在国内做应用开发,报表只是应用的一个部分而非全部,报表总是要被集成到应用系统中去,如果某个报表工具能力超强,但却不可被集成,那也是没意义。


考虑到当前国内应用开发的现状,我们只研讨基于J2EE机制下的B/S应用的报表集成。


现在流行的报表工具几乎都是独立服务器形式。独立服务器的好处没想出来,倒是觉得有很多缺点,主要有:
(1)报表服务器与应用程序不在同一个进程空间内,数据沟通都需要通过网络协议进行,即使是同一台机器,也要把数据传来传去,浪费时间降低性能
(2)独立的报表服务器有自己的一套用户权限管理机制,设计得还挺复杂。程序必须往这个规则上靠,可这套规则从来也不够用:应用系统的用户管理没那么规整,能乖乖地按厂家设计的样子来(您见过这样的系统,把应用系统中的柜员、科长、局长这种业务角色建立在ORACLE的用户上?)。这种费劲又严重影响集成度的东西其实不做也罢,常常因此浪费很多时间还和应用接上不
(3)独立服务器没法充分应用服务器的本事,比如数据库连接就不能和应用系统的其它部分共享,集群能力,也得听命于报表服务器。Weblogic的平衡负载能力会比报表服务器要差?
(4)布署方案:所有的程序数据打个WAR包很方便就上去了,可它偏要与众不同,要独自搞一块,还是没脾气。


想来想去,估计美国人可能不大需要被集成的报表工具,所以老外的产品也不是为了被集成而设计,这也就情有可愿了。可惜的是,国人抄老外时也没怎么想想,大多把体系结构也照抄了过来,特别是海归派的新兴企业;有系统集成经验的国产报表厂商就还稍好一点,没去费那劲。



后记


牢骚差不多发完了,中国报表的麻烦大抵如此,很多流行的工具名头虽响,其实是极不适合中国报表的,号称能适应的大都是胡说八道,赶赶时髦而已,这也是为什么我们有了国际水平的先进武器依然过得很衰的原因。


那么以后有没可能让中国报表简单起来?


报表工具厂商中有一个较普遍的说法是:中国现在的应用水平太差,用户都不懂信息化,所以造成了报表复杂。一句话,就是咱的需求错了,咱不够高档,高档的美国用户就不用这么复杂的表格。


听起来有点道理,其实是胡扯!明明是自己做不出来,偏偏要说用户的需求不合理,象是《笑林》的那个笑话,和尚念错了经却指责人家死错了人,真是岂有此理!


说实话,由于没有信息化经验而设计出不合理报表的现象是存在的,但大部分情况下即使信息化程度已很高,报表还是很复杂,而且信息化程度越高,EXCEL使得越熟,报表就越复杂。比如银行,在中国算是信息化进行最早的行业了,银行的报表,嘿嘿……;再如日本,信息业够发达了吧,那报表还是复杂得没商量。至于说美国人的表为啥不太复杂,没在美国生活过,还真一下子搞不清。中国的报表复杂是有道理的,各项信息在表上一目了然,就是省事。所以笔者认为,大概是东方文化传统的因素让中国报表复杂下去,如果真是这种原因,中国的报表还将一如既往的复杂下去,怕是没什么简化的指望了。


所以,不要寄希望于报表会变简单,那会被你的竞争者置于死地的,还是努力想法怎么解决这些问题吧。

参与7

4同行回答

小熊熊小熊熊商业智能工程师北京文思海辉金信软件有限公司
总结得太好了,虽然使用cognos做报表的时间并不长,但是你列出的问题都遇到了。。。显示全部

总结得太好了,虽然使用cognos做报表的时间并不长,但是你列出的问题都遇到了。。。

收起
互联网服务 · 2016-08-18
浏览780
deshan085deshan085软件开发工程师啊啊啊
总结得真好;P显示全部
总结得真好;P收起
软件开发 · 2014-07-09
浏览789
8791827187918271软件开发工程师海康威视
有些报表恨不得一个格子一个SQL得写进去,完全没规律显示全部
有些报表恨不得一个格子一个SQL得写进去,完全没规律收起
互联网服务 · 2013-11-26
浏览1063
瘦骨瘦骨其它ABC
国人的理念是复杂=高水平,简单=水平低,这不是技术问题。显示全部
国人的理念是复杂=高水平,简单=水平低,这不是技术问题。收起
互联网服务 · 2013-11-25
浏览784

提问者

菜鸟炖土豆
软件开发工程师北京传诚科技

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2013-11-20
  • 关注会员:2 人
  • 问题浏览:3985
  • 最近回答:2016-08-18
  • X社区推广