14.10 横向扩展出多组 N 列
有某浴室某日顾客进出时间登记表,部分数据如下图所示:
统计从 18:00 到 22:00 间每小时时间段内的顾客情况,此时间段内某顾客还在则填 1,否则不填,如下图所示:
在 F2 中写入代码:
A | |
---|---|
1 | =E(‘A2:D15’) |
2 | =create(${([“Male”,“Female”]*4).concat@c()}) |
3 | =interval@s(time(“00:00”,“HH:mm”),time(“18:00”,“HH:mm”))/86400 |
4 | =A1.run(A2.insert(0),4.run(t1=A3+(~-1)*3600/86400,t2=A3+~*3600/86400,k=if(A1.Sex==“M”,~*2-1,~*2),if(A1.Enter<t2 && A1.Leave>t1,A2(A1.#).field(k,1)))) |
5 | return A2 |
A2 创建由 4 组 Male,Female 列组成的序表
A3 把开始时间 18:00 转化为 Excel 的存储值
A4 循环 A1 的每一行,在 A2 中追加一条新行,循环 4 个时间段,算出本时段开始时间 t1 和结束时间 t2,根据顾客性别算出要填写的列序号 k,如果顾客本时段还在浴室内,则在 A2 的当前行第 k 列填写 1
A4 格公式,A1.Leave 是什么意思?
A1.Leave 和 A1.Enter 是获取字段对应的值,A1.# 是获取循环时对应的索引号或者叫序号。
以上写法可以换成 get(1,Leave),get(1,Enter) 和 get(1,#)。
SPL 的时间比较感觉有点小复杂。
👍 😂