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 | |
| … |
