Birt 交叉报表,对比润乾

在项目开发前的设计阶段,当我们讨论报表需求时,往往会纠结是选择开源软件还是商业报表工具。实际上,这个问题并不复杂,简单粗暴的来说:

1、报表现在不多,今后也不会很多,同时也不难,用开源;

2、当前报表少,也不难,但后续会不断增加报表需求,那么建议直接上商业报表,以防后患;

3、现在报表已经比较多了,那么不管简单还是复杂,建议选择便宜的商业报表;

为啥?

1、开源报表不花钱,报表需求已经确定,就那么几张,并且都还挺简单,开源报表完全能够满足,开发多用不了多长时间,后期维护也不会多费劲,干嘛要花不必要的钱?!

2、开源报表对于复杂格式,尤其是中国式复杂报表,往往力不从心。所以,不管确定需求中的报表是多是少,一定要选择国内的商业软件,这些商业软件解决此类复杂报表的技术都已很成熟,随便选个自己能接受价格(当然是越便宜越好,haha)的产品就行了。

3、商业软件服务好,有电话、在线、邮件等等各种入口可以咨询;而开源就只能到论坛发帖子,什么时候能有人回,完全靠运气,因此被客户骂的可能性是很大的,千万不要给自己挖坑!

说到这儿,好像和今天的主题有点跑偏了——其实并没有,今天就是想通过看似很简单的交叉报表(行列都有分组维度),对比一下用开源和商业报表工具的开发过程,最终有助于解决的就是上面所说前期选型问题。

我们现在的开源是比较常用的 Birt 报表,而商业的则用了大家喜闻乐见的润乾报表。

废话不多说,直接干就是了。

设计报表用的数据源均为润乾报表设计器下带的 hsql 数据库 demo,数据表为“订单表”,希望得到的报表结果如下

1png

首先看 Birt 的开发过程。

1、准备数据集

       SELECT 订单. 货主地区, 订单. 订单金额, 运货商. 公司名称 FROM 订单, 运货商 WHERE  订单. 运货商 = 运货商. 运货商 ID

2、Data Explorer 内创建 Data Cubes

       定义 name 值,并选择使用的数据集“Primary dataset”

2png

3、定义分组项和汇总项

       上图中第二项,分别拖拽“货主地区”和“公司名称”到右侧“Groups”项,再拖拽“订单金额”到“Summary Fields”

3png

       双击“订单金额(SUM)”选择统计方式

4png

4、报表编辑区插入“Cross Tab”

5png

5、定义表达式

       拖拽“Data Cubes”内的分组字段和统计字段到右侧报表对应区域

6png

6、预览效果

7png

    通过以上步骤,基本完成了交叉报表的制作。

下面是润乾报表的做法:

1、准备数据集

       SELECT 订单. 货主地区, 订单. 订单金额, 运货商. 公司名称 FROM 订单, 运货商 WHERE  订单. 运货商 = 运货商. 运货商 ID

2、定义报表表达式

       拖拽字段,定义如下

8png

       其中,

       A2:=ds1.group(货主地区; 货主地区:1)

       B1:=ds1.group(公司名称; 公司名称:1),单元格扩展方向改为横向(看箭头方向)

       B2:=ds1.sum(订单金额)

3、预览结果

9png

简单两大步完成。而且,从制作过程可以看出,后期维护很方便。

总结来说,选择的两种工具都可以支持交叉报表的设计,只不过 Birt 制作过程比润乾报表要复杂一些,而制作麻烦往往对应后期维护也就得花更多的时间。由此,也可以呼应文章开头所讲的:如何根据报表需求简单粗暴地确定选开源报表还是商业报表。