您的位置:首页 > 其它

主流报表引擎普遍缺陷问题分析

2007-12-19 16:37 507 查看
近期由于公司项目需要,准备采购第三方的报表设计工具,借此机会,我对部分主流的报表工具进行了了解与试用,在试用过程中,对目前的报表工具的特点及优缺点进行了分析。
从功能上看,报表设计器分为条带分区式及Excel网格模式。由于中国式复杂报表的应用需求,对行列交叉表要有较强的支持,这次报表选型主要重点在国内软件商开发的采用Excel模式的报表引擎。
l 润乾公司的报表引擎基于J2EE架构,使用类Excel设计模式,功能强大,其设计工具JavaForm实现,感觉不是太好使用。
l 北京久其公司新退出的ezReport同样采用J2EE架构,功能也很不错,设计器采用Dephi实现,使用方便,特别是对展现分组、分列控制局域的可视化描述,非常直观。
l 方成公司的E表应该说是最有特色的。其采用纯B/S模式的报表设计器,无需嵌入任何ActiveX控件,就可以实现在IE浏览器中实现报表设计,操作稍有不便,但操作效率没有想象的那么低。
l 其他的如Grid++Report,采用COM组件模式,但对多数据源的支持能力较差,没有仔细研究。
应该说国内报表引擎厂商针对国内的实际情况,进行了深入的设计与开发,功能上各有特点,能满足大部分的需求。但在具体的应用上,还存在一些普遍问题,拿出来与大家进行交流:
1.对动态层次汇总的支持
目前在ERP或其他管理系统中,有不少层次关系的数据,比如:组织机构分解(OBS)、工作任务分解(WBS),这些数据的特点是实现层次分解,层次的数量不定,一般在对底层单元有较多的业务定义。比如:OBS最底层的组织(部门)上挂接有人员,WBS最底层(作业)上有作业的开始时间、结束时间、工作量等。在实际工作中,需要对这些业务信息按分类层次进行汇总统计,这就要求实现对层次汇总的支持。
典型的例子如表所示:

[align=center]序号[/align]
[align=left]编码[/align]
[align=left]名称[/align]
[align=left]层次[/align]
[align=left]单价[/align]
[align=left]数量[/align]
[align=left]备注[/align]
[align=right]1[/align]
[align=left]1[/align]
[align=left]总价项目[/align]
[align=right]1[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=right]2[/align]
[align=left]1.1[/align]
[align=left]进场准备[/align]
[align=right]2[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=right]3[/align]
[align=left]1.1.1[/align]
[align=left]水准备[/align]
[align=right]3[/align]
[align=right]10[/align]
[align=right]120[/align]
[align=left]明细项[/align]
[align=right]4[/align]
[align=left]1.1.2[/align]
[align=left]电准备[/align]
[align=right]3[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=right]5[/align]
[align=left]1.1.2.1[/align]
[align=left]后方电准备[/align]
[align=right]4[/align]
[align=right]30[/align]
[align=right]100[/align]
[align=left]明细项[/align]
[align=right]6[/align]
[align=left]1.1.2.2[/align]
[align=left]前方电准备[/align]
[align=right]4[/align]
[align=right]20[/align]
[align=right]200[/align]
[align=left]明细项[/align]
[align=right]7[/align]
[align=left]1.1.3[/align]
[align=left]交通准备[/align]
[align=right]3[/align]
[align=right]10[/align]
[align=right]100[/align]
[align=left]明细项[/align]
[align=right]8[/align]
[align=left]1.2[/align]
[align=left]厂房设计[/align]
[align=right]2[/align]
[align=right]14[/align]
[align=right]300[/align]
[align=left]明细项[/align]
[align=right]9[/align]
[align=left]1.3[/align]
[align=left]厂房布置[/align]
[align=right]2[/align]
[align=right]19[/align]
[align=right]400[/align]
[align=left]明细项[/align]
[align=right]10[/align]
[align=left]2[/align]
[align=left]主体项目[/align]
[align=right]1[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=right]11[/align]
[align=left]1.2[/align]
[align=left]混凝土浇筑[/align]
[align=right]2[/align]
[align=right]60[/align]
[align=right]100[/align]
[align=left]明细项[/align]
[align=left] [/align]
[align=center]注意:只有明细项目才有单价、数量,明细项目所在的层次随机[/align]
要实现的报表效果如下:

[align=left]序号[/align]
[align=left]编码[/align]
[align=left]名称[/align]
[align=left]单价[/align]
[align=left]数量[/align]
[align=left]复价[/align]
[align=right]1[/align]
[align=left]1[/align]
[align=left]总价项目[/align]
[align=left] [/align]
[align=left] [/align]
[align=right]21000[/align]
[align=right]2[/align]
[align=left]1.1[/align]
[align=left]进场准备[/align]
[align=left] [/align]
[align=left] [/align]
[align=right]9200[/align]
[align=right]3[/align]
[align=left]1.1.1[/align]
[align=left]水准备[/align]
[align=right]10[/align]
[align=right]120[/align]
[align=right]1200[/align]
[align=right]4[/align]
[align=left]1.1.2[/align]
[align=left]电准备[/align]
[align=left] [/align]
[align=left] [/align]
[align=right]7000[/align]
[align=right]5[/align]
[align=left]1.1.2.1[/align]
[align=left]后方电准备[/align]
[align=right]30[/align]
[align=right]100[/align]
[align=right]3000[/align]
[align=right]6[/align]
[align=left]1.1.2.2[/align]
[align=left]前方电准备[/align]
[align=right]20[/align]
[align=right]200[/align]
[align=right]4000[/align]
[align=right]7[/align]
[align=left]1.1.3[/align]
[align=left]交通准备[/align]
[align=right]10[/align]
[align=right]100[/align]
[align=right]1000[/align]
[align=right]8[/align]
[align=left]1.2[/align]
[align=left]厂房设计[/align]
[align=right]14[/align]
[align=right]300[/align]
[align=right]4200[/align]
[align=right]9[/align]
[align=left]1.3[/align]
[align=left]厂房布置[/align]
[align=right]19[/align]
[align=right]400[/align]
[align=right]7600[/align]
[align=right]10[/align]
[align=left]2[/align]
[align=left]主体项目[/align]
[align=left] [/align]
[align=left] [/align]
[align=right]6000[/align]
[align=right]11[/align]
[align=left]1.2[/align]
[align=left]混凝土浇筑[/align]
[align=right]60[/align]
[align=right]100[/align]
[align=right]6000[/align]
[align=center]合计[/align]
[align=left] [/align]
[align=left] [/align]
[align=right]27000[/align]
另有文章介绍这类数据的统计方法。
2.对动态层次分组的支持
这个与上面的类似,当有层次关系的分类时,需要分类进行统计,并按层次进行分组汇总,目前的报表一般不能实现。需求如下图所示:

[align=left]序号[/align]
[align=left]名称[/align]
[align=left]1[/align]
[align=left]钢材[/align]
[align=left]1.1[/align]
[align=left]一类钢材[/align]
[align=left]1.2[/align]
[align=left]二类钢材[/align]
[align=left]1.2.1[/align]
[align=left]螺纹钢[/align]
[align=left]1.2.2[/align]
[align=left]圆钢[/align]
报表格式如下:

[align=center]月份[/align]
[align=center]钢材[/align]
[align=center]一类钢材[/align]
[align=center]二类钢材[/align]
[align=center]合计[/align]
[align=center]螺纹钢[/align]
[align=center]圆钢[/align]
[align=center]小计[/align]
[align=center]数量[/align]
[align=center]金额[/align]
[align=center]数量[/align]
[align=center]金额[/align]
[align=center]数量[/align]
[align=center]金额[/align]
[align=center]数量[/align]
[align=center]金额[/align]
[align=center]数量[/align]
[align=center]金额[/align]
[align=left]5月[/align]
[align=right]10[/align]
[align=right]100[/align]
[align=right]50[/align]
[align=right]90[/align]
[align=right]190[/align]
[align=right]100[/align]
[align=right]240[/align]
[align=right]190[/align]
[align=right]250[/align]
[align=right]290[/align]
[align=left]6月[/align]
[align=right]10[/align]
[align=right]100[/align]
[align=right]50[/align]
[align=right]90[/align]
[align=right]190[/align]
[align=right]100[/align]
[align=right]240[/align]
[align=right]190[/align]
[align=right]250[/align]
[align=right]290[/align]
[align=left]7月[/align]
[align=right]10[/align]
[align=right]100[/align]
[align=right]50[/align]
[align=right]90[/align]
[align=right]190[/align]
[align=right]100[/align]
[align=right]240[/align]
[align=right]190[/align]
[align=right]250[/align]
[align=right]290[/align]
3.Web展现时行列锁定
支持B/S的报表一般使用两种方式实现Web展现,ActiveX模式或直接的HTML展现模式。采用HTML展现时,一般没有实现对表格行列锁定的支持,或有的部分支持表头固定功能。这个功能实现比较简单(实现方式另有文章进行介绍),但对于用户的好处是显而易见的,对大数据量的交叉表,或年度、月度分列表,当跨度长时(如:12个月分列),就不能在一个页面全部展现,而如果不使用类似Excel的行、列固定功能,后面的数据就无法直观查询与展现,也就是很多用户宁愿把数据导出到Excel中,进行行列处理后再查看的原因。
以上问题,只是这几天在报表引擎选型过程中粗略分析后发现的报表引擎的共性问题,不当之处,还请多批评指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: