解决 Birt 等报表工具制作报表的几个难题
解决Birt等报表工具制作报表的几个难题
原文地址:http://c.raqsoft.com.cn/article/1552378480299?r=CGQ
在上一篇《Birt 如何实现不规则月份统计》中,我们讲解了如何帮助 Birt 制作这种报表的详细过程,在本文中我们再继续讨论几个类似的制作难题,并把说明集中在如何编写集算器 SPL 脚本上,不再赘述如何在 Birt 中引入 SPL 的步骤了。
1. 组内跨行计算
组内跨行计算是指在计算一行中某个计算列的值时,需要引用到组内其它行的数据来进行计算。比如下面这个例子:
库表 sample 有三个字段,其中 id 是分组字段。需要设计一张分组表,使用 id 分组,明细字段是 v1,v2 以及计算列 crossline, 其中 crossline 的算法是本条记录 v1、v2 之和加上本组上一条记录的 v1、v2 之和。示例源数据如下:
id | v1 | v2 |
1 | 1 | 2 |
1 | 2 | 3 |
2 | 1 | 1 |
2 | 2 | 2 |
3 | 3 | 3 |
最后要展现的报表结果如下图所示:
编写集算器 SPL 代码如下:
A | |
1 | =connect("demo") |
2 | =A1.query("select *, 0 as crossline from sample") |
3 | >A2.group(id).run(~.run(v1+v2+v1[-1]+v2[-1]:crossline)) |
4 | >A1.close() |
5 | return A2 |
A1 连接数据库
A2 查询数据库,同时多产生一列常数备用。
A3 按 id 分组,并在每组数据中修改计算列 crossline,最后合并,其中 v1[-1]、v2[-1] 是集算器特有的定位上一行记录中字段的写法。
A4 关闭数据库
A5 将 A2 中的计算结果数据集返回给报表工具
原文地址: