跨行组计算类报表在报表开发中非常常见,如常见的同期比、环比计算、移动平均值计算等。这类报表由于经常要引用其他行列的数据进行相对/绝对位置运算,使得报表工具在实现时并不轻松。功能相对强大的润乾报表需要借助层次坐标和位移坐标,辅以条件表达式和“$”运算符完成,书写和理解都有相当的难度。

    其实通过集算器这类报表则非常容易实现,我们来看一个例子。

    报表需求:根据订单表和指定年份(参数)按月统计订单金额,以及与上一订单月金额比,与去年同月金额比,样式如下:                             

用集算器实现跨行组计算报表_润乾报表


这里应该注意的是比去年同期是指与去年同月份的比值,无对应月份则为空;要求只显示本年数据。

集算器代码

用集算器实现跨行组计算报表_润乾报表_02

A1:建立数据库连接;

A2:执行sql,根据指定年份从订单和订单明细表读取本年和去年订单数据;

A3:按订购日期升序排序;

A4:按照订购日期的年份和月份分组,并汇总订单金额;

A5:增加计算字段“比上期,即本月金额/上一订单月金额;

A6:按照订购日期的月份升序排序;

A7:增加计算字段比去年同期,即本年本月金额/去年本月金额;

A8:选出指定年份的数据;

A9:为报表返回结果集;

报表调用

集算器作为单独的计算中间件为报表提供数据源,展现的工作仍然由报表工具完成。以润乾报表为例,制作报表及展现。

数据集设置

用集算器实现跨行组计算报表_润乾报表_03

    采用类存储过程的调用方式,图中同比环比即为集算器脚本(dfx)名称。

用集算器实现跨行组计算报表_多源_04

    其中arg1为报表参数,即指定年份。


报表模板及表达式

用集算器实现跨行组计算报表_跨行组_05

 

如果仅用报表工具实现呢?这里给出两种润乾报表常用的实现方法:

1、多数据源+隐藏列

    由于只显示指定年份统计数据,故需要建立两个数据集分别读取本年和去年的数据后,在报表表达式中进行关联运算。

用集算器实现跨行组计算报表_润乾报表_06

并设置D列隐藏,以便在报表展现时不显示去年数据。

    我们看到这种方法除了要使用多数据集外,还要设置隐藏列,无论从报表开发还是报表性能上都不高。

 

2、单数据源+隐藏行列

通过按订购年月分组,使用润乾报表提供的位移坐标,辅助以隐藏行列的方式实现。

用集算器实现跨行组计算报表_跨行组_07

    这种方式虽然避免了多源,但是仍然要靠隐藏行列实现,而且E3中计算同期比的计算表达式过于难书写和理解(要理解主格附属格的概念、位移坐标的使用以及如何在格集表达式中引用当前格的主格),这种实现方式也不理想。

 

通过上面的比较可以看到集算器在实现该类逻辑上的便利,分步计算,语法简单,而且由于计算时不带有任何展现属性(报表计算时带有边框、颜色、字体大小等展现属性),计算结果直接输出给报表,从而也避免了报表工具直接实现时额外的性能开销。