累积指定列后再用其它列排序
例题描述和简单分析
数据库中有 SAMPLE 表,包含三个字段:日期(DATE),值(VALUE),编号(SID),如下:
DATE |
VALUE |
SID |
2000-01-01 |
1 |
2 |
2000-01-02 |
2 |
3 |
2000-01-03 |
3 |
4 |
2000-01-04 |
4 |
1 |
需要在日期(DATE)有序的情况下,对 VALUE 列累积求和,新的列叫 CUMULATIVEVALUE,再用 SID 列排序,结果如下:
DATE |
VALUE |
SID |
CUMULATIVEVALUE |
2000-01-04 |
4 |
1 |
10 |
2000-01-01 |
1 |
2 |
1 |
2000-01-02 |
2 |
3 |
3 |
2000-01-03 |
3 |
4 |
6 |
解法及简要说明
在集算器中编写脚本 p1.dfx,如下所示:
A |
|
1 |
=connect("demo") |
2 |
=A1.query@x("SELECT * FROM SAMPLE ORDER BY DATE") |
3 |
=A2.derive(VALUE+CUMULATIVEVALUE[-1]:CUMULATIVEVALUE).sort(SID) |
简要说明:
A1 连接数据源名称为 demo 的数据库
A2 执行 SQL,返回查询结果所组成的序表,结束时自动关闭数据库连接
A3 A2序表添加计算列 CUMULATIVEVALUE,值为当前 VALUE+ 上一个 CUMULATIVEVALUE,结果再对 SID 排序
A3还可以写成:
=A2.derive(iterate(~~+VALUE):CUMULATIVEVALUE).sort(SID)
BIRT集成这段代码的方法可参考:《BIRT如何调用 SPL 脚本》。
https://www.eclipse.org/forums/index.php/t/171708/
英文版