本站首页    管理页面    写新日志    退出

The Neurotic Fishbowl

[Java报表软件—新闻资讯]报表工具的制表能力
FineReport——报表技术领跑者 发表于 2009/1/9 16:31:27

所谓报表工具,最核心最本质的功能,就是它的制表能力,即是否能够不写代码而制作出自己需要的各种报表工具。但用户在考察报表工具时往往很注重打印输出、绘制方案、管理调度等外围因素,而忽视了报表工具最本质的制表能力。当然不可否认这些外围的功能对一个报表工具来说也是很重要的衡量标准,但是报表工具的主要用途是制作报表,而且事实上,市场上的主流产品在处理复杂报表时确实存在明显缺陷,并不能很好地制作出我们需要的报表,半数以上报表仍需编写代码准备数据,导致工具失去意义。因此,考察制表能力对于选择报表工具是至关重要的。     那么FineReport制表能力体现在哪几个方面呢? 首先是多源分片。多源是指一个报表的数据来源来自多个物理数据表,甚至是多个物理数据库。这里的“多个”指的两个以上的物理数据库。 传统的报表工具只支持单源报表,即使是数据来自于多个物理数据表或者物理数据库,也需要在报表设计前将多源转化成单源处理。两三个源尚可写SQL语句完成,但多到五六个源以上时,一方面对应的SQL语句过于复杂难以维护,另一方面其运行效率降低,这时常常要编写存储过程或其它代码来准备数据了。这还只是单数据库的情况,如果多源来自多库,则更为复杂,无法直接写出复杂SQL或存储过程,需要架构专门的数据库桥后才可以完成。 某些传统工具也声称可支持多源,实际上指的是多数据库支持,只是把数据库桥功能集成进入报表工具中,但真正到报表设计时仍然是单源的。和我们所说的多源有很大差别。 多源往往带来分片,正是由于分片,使得报表设计必须直接基于多源进行,而不能先将多源转成单源进行。有相当一部分分片报表无论如何也不可能换成单源处理,部分能转成单源的报表处理也非常繁琐。 分片是指报表的纵向或横向或双向同时被分成了多个区域,每个区域重复规则不同,而又可能相互运算。 传统工具能够处理的上下格式一致和列方向固定的分片报表(即可由多源转成单源的报表),但会迫使用户编写复杂的SQL(UNION+JOIN)和代码准备数据,导致工作量大且维护困难;而且对于横向分片数较多报表,由于必须采用JOIN方式准备数据,导致运算性能极低,复杂度为O(Nk),k为分片数。 其次,是不规则划分机制。 FineReport支持独立的分组报表格式,即传统的通过一个绑定数据的过程来完成分组报表的设计,这种分组是完全规则划分的,即划分标准一致且有规则(一般都按某个字段或表达式),所有字段都必须出现且只出现一次,分组值次序与原数据记录次序一致。 但是与完全划分相对应的,在报表汇总中却常常需要不规则划分,即划分标准看不出规律(常常只能穷举),所有事实不一定全部出现在分组结果中、个别事实还可能重复出现,次序也与原数据记录无关。固定分组是不规则划分的常见表现。 例如下面这张报表。年龄段的分组就是个不规则划分,划分规律不明确,只能穷举出来;分组不完全,20岁以下的被忽略了;35岁以上的则被整合到一个组内,性别分组是个常规的完全规则分组。 这个报表用传统工具实现很困难,虽然报表格式并不复杂,但由于出现了不规则划分,无法直接用报表工具的分组功能完成,只能编程把数据准备成一个单层的二维表数据源,即加大了工作量,又很难体现数据之间的层次关系。 然后,FineReport还有动态格间运算的能力。 所有的报表工具都会提供一些计算列的功能,在原始数据基础上再计算出一些别的列值或统计值,这是报表展现中是不可缺少的功能。 传统工具一般只提供同行内的格间运算和针对某组(或全体)的集合运算,对于常见的跨行组运算则相当困难。个别传统工具提供了简单的跨行能力,如可以引用上一行数据,而跨组则无能为力;对于集合运算只提供个别固定的函数,如取第一名、算累计值等,无法组合出的通用集合运算则无计可施,如取第二名、算累计的乘积等。某些带条件的运算更是无法可想,如计算语文成绩在90分以上的同学的数学成绩总和。 除了有规律的跨行组运算外,报表中还可能会有一些随意的独立格运算,其值可能是报表中的任意几个其它格运算出来,甚至还可能会引用到报表外的数据(比如和数据库中的数据再次运算等)。由于传统工具没有很好的运算后报表数据项命名机制(传统工具只能用列名命名设计阶段的数据单元),很难精确描述数据引用关系,只能写出规律性很强的表达式,但随意的独立格运算会就使传统工具无法处理,而报表外的数据引用更是只能借助脚本或外围应用程序,导致代码极为混乱。 下面这张报表是个典型的跨行组运算报表,其中有比上期(跨行)和比去年同期(跨组)运算,这种报表在传统工具中常常又必须编程准备数据。这个报表的样式并不复杂,但这些格间运算会让传统工具非常为难。只能再次依靠程序代码,把数据事先计算好直接往报表里填。 另外,所有以上的讨论中还贯穿了一点,即行列对称。纵方向上拥有的自动复制扩展的能力需要完全实现在横方向上。报表可以横向分组、横向分片,对于横向变列的报表可以定义跨列组运算等。 我们知道,报表的上述复杂性常 常是混合在一起的,同一张报表中很可能包含了所有的问题,这要求我们给出完整的解决方案,而不能单独分别处理。当这几种困难交织到一起时,整个问题的复杂度要远比解决几个单个问题的总和要大得多。因此像FineReport这样具有非常好的针对性的专门的报表工具,是解决这些问题的最好方式 500)this.width=500'> http://www.finereport.com

阅读全文(2664) | 回复(0) | 编辑 | 精华

 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

 
 



The Neurotic Fishbowl

.: 公告

本博客提供详细的java报表软件的制作过程,发布java报表软件的版本更新信息,并适时对国内主流报表软件进行功能比较。


Bloginess

«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31

.: 我的分类(专题)

首页(357)
Java报表软件—制作笔记(54)
Java报表软件—功能比较(43)
Java报表软件—使用心得(21)
Java报表软件—行业动态(54)
Java报表软件—新闻资讯(48)
Java报表软件—技术知识(49)
Java报表软件—问题解析(2)


In the Bowl

.: 最新日志

如何对报表的参数控件赋值
java报表工具FineReport常见
报表怎么做 FineReport连接池原
报表怎么做FineReport数据连接之
报表模板之报表设计
报表模板之报表设计


.: 最新回复

回复:报表参数
好好学习,
好好学习,天天向上。买双 air jor
回复:理解FineReport缓存系列2
回复:理解FineReport缓存系列2


The Fishkeeper
blog名称:Java报表软件
日志总数:357
评论数量:69
留言数量:0
访问次数:1208981
建立时间:2006年4月16日



Text Me

.: 留言板

签写新留言

需要你的帮助


Other Fish in the Sea

.: 链接

报表开发工具  html5图表java报表开发工具




站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144760265 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号