我有这个数据表,其中包含每天的退货数量(Ret Volume)和每天已处理的退货数量(Volume Cleared)。
我想要的是右侧显示的日期,显示已处理退货的天数。
例如,8 月 1 日,我们收到了 472 份退货,其中 462 份已处理,剩下 10 份仍在等待。
第二天,我们收到了 380 份退货,并处理了其中 370 份。前 10 个处理的订单来自前一天,因此第一天的所有退货都会在第二天处理。
我对公式的第一次尝试如下(转置仅在那里,以便我可以检查每天的返回值而不会出现 #SPILL 错误): =TRANSPOSE(LAMBDA(ReturnedVolume,ClearedVolume,BYROW(ClearedVolume,LAMBDA(ClearedToday,SUM(ReturnedVolume)-SUM(ClearedVolume)>ClearedToday)))($F$3:$F3,$H$3:$H3))
这总是返回 FALSE 我认为因为 8 月 2 日它正在计算 852-832= 20>370 = FALSE 。
我开始觉得我现在只见树木不见森林了。
任何特定日期结束时的积压是累积退回量 (RV) 和累积清算量 (CV) 之间的差值。一天结束时的积压是第二天开始时的积压。下面的讨论考虑了当天开始时的积压情况。
请注意,积压永远不会为负,因为一天之内不可能清除除当天(当天开始)积压及其 RV 之外的任何内容。
采用 FIFO(先进先出)制度,任何非零的当日开始积压工作将始终包含前一天的一些项目,并且可能包含前几天的项目。
如果今天开始时积压工作不为零且不大于昨天的 RV,则积压工作中最旧的项目不能早于昨天。如果是这样,那么 FIFO 意味着今天开始时所有昨天的 RV 都必须在积压队列中落后于它,从而导致积压必须大于昨天的 RV 的矛盾。由于这个最旧的项目不可能来自今天(因为它在今天开始时位于积压队列中),因此它必须来自昨天。
可以使用类似的论据来比较今天开始积压的大小与从今天开始向后计数(但不包括)的累积 RV。
如果今天开始时积压的大小为(例如)b并且今天为第d天,则积压中最旧的项目源自于第 d - k天,如果第 d - 1天和d - k之间的总 RV大于或等于b,而d -1 和d - k -1 之间的值小于b。
下面的表达式提供了所需的解决方案
该公式应应用于工作表的第三行并向下复制,假设:
d
在工作表的第 1行包含标题和日期的定义中LET
,RV 和 CV 位于第 2 行以后A
,RV 位于B
和 CV 中C
请注意,如果像 OP 中那样包裹在 a 内,则公式、和
LAMBDA
中有 3 个范围。与其他两个相比,第一个有一个额外的单元格/行。A$2:A3
B$2:B2
C$2:C2
在下图中,显示积压订单仅供说明之用,但工作表中显示的值未在公式中使用。
溢出公式(请参阅我对之前答案的评论)是
该公式是针对第二天输入的。(对于第一天,假设系统在第一天开始时是空的,没有积压。)
请注意,在 中,
LAMBDA
有效MAP
返回LAMBDA
由 给出的日期中的任何一天 dINDEX(PD, d - n)
。IF
与 嵌套的确定INDEX
第 d 天开始时的积压是否为零,如果是,则将 n 设置为零。可以颠倒 和 的顺序,INDEX
在IF
非积压日仅返回零(而不是日期) - 这同样适用于先前答案中公式的非溢出版本。