大约每周一次,我从多个单位中获取数据计数。计数与日期和单位#一起记录,并重置为零。为了确定干预期间的计数/天,我需要确定该特定单位上次读数的日期:
日期 | 单位# | 数据 | 其他数据 | 上次阅读日期 |
---|---|---|---|---|
9/21/23 | 1 | 0 | ||
9/21/23 | 2 | 0 | ||
9/21/23 | 3 | 0 | ||
9/22/23 | 1 | 其他数据 | ||
9/27/23 | 3 | 其他数据 | ||
9/28/23 | 1 | 114 | 9/21/23 | |
9/28/23 | 3 | 157 | 9/21/23 | |
10/1/23 | 全部 | 其他数据 | ||
10/4/23 | 1 | 其他数据 | ||
10/4/23 | 3 | 其他数据 | ||
10/5/23 | 2 | 110 | 9/21/23 | |
10/5/23 | 3 | 112 | 9/28/23 | |
10/6/23 | 全部 | 其他数据 | ||
10/12/23 | 1 | 130 | 9/28/23 | |
10/12/23 | 2 | 62 | 10/5/23 | |
10/12/23 | 3 | 139 | 10/5/23 |
顺便说一句。日期总是在增加,并且数据中散布着可以忽略的读数(因此,大概与问题无关,但显示上下文)。
我可以使用 INDEX、FILTER 和 COUNTIFS 查找“之前的日期”: INDEX(FILTER(B$2:B2,D$2:D2<>"", C$2:C2=C2),COUNTIFS(C$2:C2,"="&C2,D$2:D2,"<>"&"" )-1,1) 但我需要将此公式复制到每一行,并且更喜欢使用 ARRAYFORMULA,但 INDEX 和 COUNTIFS 都不适用于 ARRAYFORMULA。
对于你的例子,我设法用这个公式获得了预期的结果:
=map(A2:A17,B2:B17,D2:D17,lambda(date,unit,otherData, iferror(let(filtered_data,filter(indirect("$A$2:$A$"&row(date)),indirect("$C$2:$C$"&row(date))<>"",indirect("$B$2:$B$"&row(date))=unit,indirect("$A$2:$A$"&row(date))<>date),if(otherData="",index(filtered_data,counta(filtered_data)),"")),"")))
显然,您可以扩展地图公式中的输入以满足您的需要。
我想指出,这个公式仅适用于递增的日期。
如果出现问题或您需要更多详细信息,请告诉我:)
安托万