疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

报表工具制表能力的探讨


 

       所谓报表工具,最核心最本质的功能,就是它的制表能力,即是否能够不写代码而制作出自己需要的各种报表。但用户在考察报表工具时往往很注重打印输出、绘制方案、管理调度等外围因素,而忽视了报表工具最本质的制表能力。当然不可否认这些外围的功能对一个报表工具来说也是很重要的衡量标准,但是报表工具的主要用途是制作报表。目前市场上的主流产品能够处理处理复杂报表的只有FineReport和润乾报表。

       通过对这两个产品的研究,我们认为,报表工具对复杂报表的处理能力应该体现在如下几个方面:
       
       首先是多源分片。
       传统的报表工具只支持单源报表,即使是数据来自于多个物理数据表或者物理数据库,也需要在报表设计前将多源通过写SQL,存储过程等转化成单源处理。
       多源往往带来分片,正是由于分片,使得报表设计必须直接基于多源进行,而不能先将多源转成单源进行。有相当一部分分片报表无论如何也不可能换成单源处理,部分能转成单源的报表处理也非常繁琐。
       其次,是不规则划分机制。
       传统的分组是完全规则划分的,即划分标准一致且有规则(一般都按某个字段或表达式),所有字段都必须出现且只出现一次,分组值次序与原数据记录次序一致。
但是与完全划分相对应的,在报表汇总中却常常需要不规则划分,即划分标准看不出规律(常常只能穷举),所有事实不一定全部出现在分组结果中、个别事实还可能重复出现,次序也与原数据记录无关。
       然后,还有动态格间运算的能力。
       所有的报表工具都会提供一些计算列的功能,在原始数据基础上再计算出一些别的列值或统计值,这是报表展现中是不可缺少的功能。
       一般的报表工具一般只提供同行内的格间运算和针对某组(或全体)的集合运算,对于常见的比如累计,取第一名等跨行组运算则相当困难。
      除了有规律的跨行组运算外,报表中还可能会有一些随意的独立格运算,其值可能是报表中的任意几个其它格运算出来,甚至还可能会引用到报表外的数据(比如和数据库中的数据再次运算等)。所以运算后报表数据项命名机制就很重要,传统工具只能用列名命名设计阶段的数据单元,随意的独立格运算会就使传统工具无法处理,而报表外的数据引用更是只能借助脚本或外围应用程序,导致代码极为混乱。
      另外,所有以上的讨论中还贯穿了一点,即行列对称。纵方向上拥有的自动复制扩展的能力需要完全实现在横方向上。报表可以横向分组、横向分片,对于横向变列的报表可以定义跨列组运算等。
     上面我们提到目前市场上的主流产品能够处理处理复杂报表的只有FineReport和润乾 。其它的产品都没有这种无编码处理复杂报表的能力。包括润乾的另一个产品:快逸报表, 因为 快逸不包含润乾最核心的非线性报表,不能够设计复杂报表的情况下,其带来的工作量与开源工具不相上下,反而会提升项目成本。
      所以个人认为这个产品商业考虑大于产品实际价值。因为同一个公司无论如何不会提供两个功能相同,价格却相差十倍以上的产品,无非是以低价产品吸引用户的注意力,然后再极力推荐另外一个高价的产品而已。