5.11 应用:复杂跨行计算
分组统计数据后,对每组分列统计不同的结果,同时跨行计算。
根据用户支付数据明细表,统计各个用户 2014 年每月应付金额的汇总表。用户支付数据明细表部分数据如下:
ID | customID | name | amount_payable | due_date | amount_paid | pay_date |
---|---|---|---|---|---|---|
112101 | C013 | CA | 12800 | 2014-02-21 | 12800 | 2014-12-19 |
112102 | C013 | CA | 3500 | 2014-06-15 | 3500 | 2014-12-15 |
112103 | C013 | CA | 2600 | 2015-03-21 | 6900 | 2015-10-17 |
要求根据指定年份(如 2014),输出每月应付金额,若无当月数据,则当月应付金额为上月该值:
name | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
CA | 12800 | 12800 | 12800 | 12800 | 16300 | 16300 | 16300 | 16300 | 16300 | 16300 | 16300 | |
… |
脚本:
A | B | |
---|---|---|
1 | =T(“Payment.txt”).select(year(due_date)==2014) | |
2 | =create(name,${12.().concat@c()}) | =A1.group(customID) |
3 | for B2 | =12.(null) |
4 | >A3.run(B3(month(due_date))= amount_payable) | |
5 | >B3.run(~+=~[-1]) | |
6 | =A2.record(B2.name|B3) |
A1 从文件中导入 2014 年数据
A2 生成包含 12 个月的空表。
B2 按客户 ID 分组。
B3 生成 12 个月的空数据
B4 设置相应月份的应付金额。
B5 将空值置为前一个月的数值,新增应付款项时累加。
B6 将记录插入结果表中。
运行结果:
name | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
CA | 12800 | 12800 | 12800 | 12800 | 16300 | 16300 | 16300 | 16300 | 16300 | 16300 | 16300 | |
… |