集算器实现报表中零散的不规则计算

    报表中存在的不规则计算往往给报表开发带来很大的困难,使用报表工具往往很难甚至无法直接实现。这里的不规则计算是指报表中存在特殊条件的统计项(计算),如:销售订单金额统计中计算前5名销售金额的合计和占比;学生成绩统计中总成绩排名前10的学生中语数外都超过90分的人数;用户充值统计中充值金额超过充值总额一半的用户数量等。

    通过集算器可以很方便完成这类报表的开发,我们通过两个例子来了解一下具体的做法。

1实例一

1.1 、报表描述

根据员工与订单表统计各销售人员的销售情况,并在报表中计算列出订单总额、前3名销售订单合计以及所在占比、前一半销售额所在人数。要求记录按照销售额降序排列,报表样式如下:

esProc_report_scatteded_1.jpg

1.2         集算器代码

esProc_report_scatteded_2.jpg

A1:建立数据库连接

A2:执行sql获得销售数据,按销售额降序排列,以数据集一输出给报表

A3:建立空序表,用于存储汇总值,以数据集二输出给报表

A4:计算订单总额

A5:取前三名销售记录并计算订单金额合计

A6:前三名金额合计与总额占比

A7:临时变量

A8:计算前一半销售额所在人数

A9:将汇总数据插入A3

A10:将A2的销售数据和A3汇总结果集返回报表,这里集算器返回两个结果集供报表调用

1.3         报表调用

集算器作为计算中间件封装了标准的JDBC接口供应用程序调用,这里使用润乾报表做结果展现。

esProc_report_scatteded_3.jpg

 

报表工具通过简单的取值即可完成报表的开发。

1.4         报表工具直接实现

esProc_report_scatteded_4.jpg

 

   这里我们选用了功能相对强大的润乾报表实现,实现过程中仍然要借助辅助隐藏单元格完成,当记录较多的时候将极大影响性能。另外,这里使用了格集以及格集表达式,还有层次坐标的写法对于报表开发人员较难以理解和运用,但使用集算器的分步编码方式则更为清晰并易于维护,性能也更好。

   这个例子中只使用了C2C列)一个隐藏格,虽然表达式略有难写,但对性能和理解的影响尚在可接受范围。但是,如果我们简单改变一下报表需求,情况就会大不一样,来看下一个实例。

2 、实例二

2.1报表描述

根据员工与订单表统计各销售人员的销售情况,并在报表中计算列出订单总额、前3名销售订单合计以及所在占比、前一半销售额所在人数。要求记录按员工ID排序,不再按订单金额有序,报表样式如下:

esProc_report_scatteded_5.jpg

报表需求更改了,那么对于集算器和润乾报表的实现上是否会产生很大的影响吗?来看实现。

2.2集算器代码

esProc_report_scatteded_6.jpg

集算器代码与实例一相比几乎没有变化,只是增加了A5按照订单金额排序,A6A9均按排序后记录计算即可。这里可以看到使用集算器编码的灵活性。那么润乾报表实现呢?

2.3报表工具直接实现

esProc_report_scatteded_7.jpg

    这里看到润乾报表通过第二行取得按员工ID排序的销售记录,通过第三行(A3)隐藏行将结果按照销售额排序,从而获取前三名的记录。第三行重复取了一遍数据,报表要计算两遍,这对报表性能的影响是巨大的。

    不仅如此,当报表维护人员打开报表模板进行修改时隐藏的C列和第三行会对其产生极大的困扰,很难想明白为什么要重复取两遍数据的问题。

 

    通过上面的例子我们看到集算器作为独立的计算程序具有很大的灵活性和可复用性,而且集算器非常擅长有序运算(如例子中的取前3名),同时集算器可以一次性返回多个结果集供报表使用,避免了很多情况数据重复计算的问题,为报表开发提供极大帮助。


你可能感兴趣的:(计算,报表,单元格,零散计算)