根据每日收到的金额和每日处理的金额计算何时清除数量

根据每日收到的金额和每日处理的金额计算何时清除数量

我有一张包含每天退货次数的数据表(返回音量)以及每天处理的退货数量(音量已清除)
我想要的是右侧显示的日期,显示退货已处理的日期。

在此处输入图片描述

例如,8 月 1 日,我们收到 472 份退货,其中 462 份已处理,剩下 10 份仍在等待处理。
第二天,我们收到 380 份退货,处理了其中 370 份。处理的前 10 份是前一天的,因此 1 号的所有退货都在 2 号之前处理完毕。

我第一次尝试的公式如下(转置只是为了我可以检查每天的返回值而没有#SPILL 错误): =TRANSPOSE(LAMBDA(ReturnedVolume,ClearedVolume,BYROW(ClearedVolume,LAMBDA(ClearedToday,SUM(ReturnedVolume)-SUM(ClearedVolume)>ClearedToday)))($F$3:$F3,$H$3:$H3))
这总是返回 FALSE I思考因为对于 8 月 2 日,计算结果为 852-832= 20>370 = FALSE。

我现在开始认为我只能见树木不见森林了。

答案1

任何一天结束时的积压量是累计退货量 (RV) 与累计清算量 (CV) 之间的差值。一天结束时的积压量是第二天开始时的积压量。下面的讨论考虑了一天开始时的积压量。

请注意,积压永远不会为负数,因为一天内不可能清除超过当天(一天开始)积压和其 RV 的任何内容。

采用先进先出 (FIFO) 制度后,任何非零的每日开始积压订单总是会包含前一天的一些项目,也可能包含前几天的项目。

如果今天开始时积压量不为零且不大于昨天的 RV,那么积压量中最老的项目就不可能早于昨天。如果是,那么 FIFO 意味着今天开始时,积压队列中昨天的所有 RV 都必须排在它后面,这导致了积压量必须大于昨天的 RV 的矛盾。由于这个最老的项目不可能来自今天(因为它在今天开始时就在积压队列中),因此它一定是来自昨天。

可以使用类似的论点来比较今天开始的积压规模与从今天开始(但不包括)向后计数的累积 RV。

如果今天开始时积压的规模是(比如说)b今天是第几天d,则积压最早的项目起源于d-如果几天之间的总 RVd-1d-大于或等于b而两者之间d-1 和d--1 小于b

以下表达式提供了所需的解决方案

=LET(
backlog, SUM(B$2:B2) - SUM(C$2:C2),
d, ROW() - 1,
INDEX(
    A$2:A3,
    d - IF(backlog > 0,
           1 + SUM(N(backlog > 
           SCAN(0, INDEX(B$2:B2,SEQUENCE(1,d-1,d-1,-1)),LAMBDA(a,v,a+v)))),
           0)
      )
)

该公式应应用于工作表的第三行并向下复制,假设:

  • d在工作表的第 1行包含标题和日期的定义中LET,RV 和 CV 位于第 2 行及以后
  • 日期在列中A,RV 在B,CV 在C

请注意,如果LAMBDA像 OP 中那样在 内换行,则公式A$2:A3B$2:B2和中有 3 个范围C$2:C2。其中第一个与其他两个相比有一个额外的单元格/行。

下图中显示的积压订单仅用于说明目的,但工作表中显示的值未在公式中使用。

解决方案截图

答案2

溢出公式(参见我对上一个答案的评论)是

=LET(
    PD, A2:A10,
    RV, B2:B10,
    CV, C2:C10,
    BL, SCAN(0, VSTACK(0, DROP(RV, -1)), LAMBDA(a, v, a + v)) -
        SCAN(0, VSTACK(0, DROP(CV, -1)), LAMBDA(a, v, a + v)),
    seq, SEQUENCE(COUNT(PD) - 1, 1, 2, 1),
    MAP(seq,
        LAMBDA(d,
            INDEX(PD, d -
                IF(INDEX(BL, d) = 0, 0,
                    1 + SUM(N(INDEX(BL, d) >
                            SCAN(0,
                                INDEX(RV,SEQUENCE(1,d - 1, d - 1, -1)),
                                LAMBDA(a, v, a + v)
                            )))
                )
            )
        )
    )
)

此公式是根据第二天。(对于第一天,假设系统在第一天开始时为空,没有积压。)

LAMBDA请注意,在的中,对于任何一天 d,MAP都会LAMBDA有效地返回 给出的日期INDEX(PD, d - n)IF嵌套的INDEX确定第 d 天开始时的积压是否为零,如果是,则将 n 设置为零。可以反转 和 的顺序,INDEXIF非积压日仅返回零(而不是日期)——这同样适用于前面答案中公式的非溢出版本。

相关内容