在此先感谢您的帮助。场景:我有一些客户以约定的 x 倍数购买“积分”,我需要报告这些包何时耗尽。
我正在从我的数据库中挖掘数据,我的数据结构如下:
第 1 页:
客户ID | 信用包 | 购买日期 | 累计信用余额 |
---|---|---|---|
ABC | 10 | 2023-01-01 | 10 |
ABC | 10 | 2023-02-01 | 20 |
ABC | 20 | 2023-03-01 | 40 |
防御 | 10 | 2023-01-01 | 10 |
防御 | 5 | 2023-02-01 | 15 |
第 2 页
客户ID | 累计使用积分 | 日期 |
---|---|---|
ABC | 1 | 2023-01-01 |
ABC | 2 | 2023-01-02 |
ABC | 8 | 2023-01-03 |
ABC | 三十 | 2023-01-15 |
我想要实现的是找到累计信用支出超过累计信用余额的日期,以便我显示信用包的到期日期 - 表格如下所示:
期望结果:
客户ID | 信用包 | 购买日期 | 累计信用余额 | 到期日期 |
---|---|---|---|---|
ABC | 10 | 2023-01-01 | 10 | 2023-01-15 |
ABC | 10 | 2023-02-01 | 20 | 2023-01-15 |
ABC | 20 | 2023-03-01 | 40 | |
防御 | 10 | 2023-01-01 | 10 | |
防御 | 5 | 2023-02-01 | 15 |
当仅处理一个客户的数据集时,我可以通过连接客户 ID 和累计信用余额值,然后使用 xlookup 公式来获得我想要的结果:
第 1 页:
客户ID | 信用包 | 购买日期 | 累计信用余额 | 钥匙 |
---|---|---|---|---|
ABC | 10 | 2023-01-01 | 10 | ABC10 |
ABC | 10 | 2023-02-01 | 20 | ABC20 |
ABC | 20 | 2023-03-01 | 40 | ABC40 |
防御 | 10 | 2023-01-01 | 10 | 防御10 |
防御 | 5 | 2023-02-01 | 15 | DEF15 |
第 2 页
钥匙 | 客户ID | 累计使用积分 | 日期 |
---|---|---|---|
ABC1 | ABC | 1 | 2023-01-01 |
ABC2 | ABC | 2 | 2023-01-02 |
ABC8 | ABC | 8 | 2023-01-03 |
ABC30 | ABC | 三十 | 2023-01-15 |
=XLOOKUP(sheet1Key,sheet2key,Date,,1,2)
我的问题是当我有额外的客户时 - 无疑是因为我的“1”匹配模式很吃力。
有人可以帮忙吗?
(编辑——修复预览中令人烦恼的表格格式!)
答案1
复制版本
检索到期日期(或其他列)
=IFERROR(
XLOOKUP(
SUM(FILTER(B:B,(A:A=A2)*(C:C<=C2))),
FILTER(I:I,F:F=A2), FILTER(H:H,F:F=A2),"",1),
"")
计算 Cumul_Used 的值(辅助列)
=SUM(FILTER(G:G,(F:F=F2)*(H:H<=H2)))
LAMBDA(单一公式)版本
检索到期日期(或其他列)
=LET( _arr, FILTER(A:C, (ROW(A:C)<>1)*(A:A<>"")),
_id, INDEX(_arr,,1), _date, INDEX(_arr,,3),
MAP(_id, _date, LAMBDA(id,dt, IFERROR(
XLOOKUP(
SUM(FILTER(B:B,(A:A=id)*(C:C<=dt))),
FILTER(I:I,F:F=id), FILTER(H:H,F:F=id),"",1),""))))
计算 Cumul_Used 的值(辅助列)
=LET( _arr, FILTER(F:H,(ROW(F:F)<>1)*(F:F<>"")),
_id, INDEX(_arr,,1), _dt, INDEX(_arr,,3),
MAP(_id, _dt, LAMBDA(id,dt,
SUM(FILTER(G:G,(F:F=id)*(H:H<=dt))))))