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