全文约2014字;
阅读时间:约6分钟;
听完时间:约12分钟;
昨天,我们讨论了直接使用产品名称作为索引字段进行库存扣减的问题,并举例说明了这种方法可能导致的错误结果。因此,我们需要进一步计算不同产品的累计需求量,以确保准确的库存扣减。今天我们将继续分享如何具体实现这一计算过程。
传统的累计需求传统的累计需求计算是通过锁定第一个单元格来实现的。具体来说,累计公式如下:
=SUMIFS($D$2:D2,$C$2:C2,C2)
公式解释:
D列为订单的产品数量。
C列为订单的产品明细,每一行代表一个产品的条件,例如产品A。
这个公式的含义是:
SUMIFS函数用于根据多个条件对指定范围求和。
$D$2:D2 是求和的范围,其中$D$2是绝对引用,确保始终从D2开始累加;D2是相对引用,会随着公式的向下填充而变化。
$C$2:C2 是条件范围,同样$C$2是绝对引用,C2是相对引用。
C2 是条件值,即当前行的产品名称。
这样,当公式向下填充时,它会计算从第一行到当前行为止,相同产品的累计数量。例如,对于产品A,公式会累加所有在C列中出现的产品A的数量。这种方法可以有效地计算每个产品的累计需求量
虽然这种累计需求的计算方法能够求出累计需求,但它也存在一些缺点。首先,需要在录入第一个公式后手动向下填充公式,这增加了操作的复杂性。其次,由于SUMIFS函数的特点,当数据量超过10000行时,运算效率会变得非常低,有时甚至需要超过120秒才能完成计算。这样的运算时间对于许多用户来说是无法接受的,也不符合自动化表格工具的要求。因此,我们需要将这个公式转换为可以自动扩展的动态数组版本。
动态数组版本如果需要进行累计求和,我们需要观察《订单明细表》中的数据规律。由于产品列已经经过排序,可以确定以下逻辑:通过与上一行进行对比,如果当前行的产品名称与上一行不同,则表示这是一个新的产品;如果相同,则表示是同一产品。
根据这个逻辑,可以设计出动态数组公式:
=SCAN(0,C2#,LAMBDA(X,Y,LET(A,OFFSET(Y,,1),IF(Y=OFFSET(Y,-1,),X+A,A))))
这个Excel和WPS函数使用了SCAN函数结合LAMBDA和LET函数来进行数组处理。下面是函数的详细解释:
函数结构:=SCAN(初始值, 数组, LAMBDA函数)
初始值:0
这是SCAN函数开始迭代时的起始值。
数组:C2#
这表示从C2开始的单元格区域,该区域包含了一系列的产品标识,例如 {“A”; “A”; “A”; “A”; “B”; “B”; “B”}。
LAMBDA函数:LAMBDA(X, Y, LET(A,OFFSET(Y,1),IF(Y=OFFSET(Y,-1,),X+A,A)))
LAMBDA(X, Y, ...):这是一个匿名函数,其中X是累积值(初始值为0),Y是数组中的当前元素。
LET(A,OFFSET(Y,,1),...):LET函数用于定义一个中间变量A,这个变量是通过OFFSET函数计算得到的。
OFFSET(Y,,1):OFFSET函数返回一个引用,该引用是相对于Y位置的偏移。这里Y是当前元素的位置,OFFSET(Y,,1)表示与Y同一行的下一列的单元格。在这个例子中,它假设数组旁边有一个数值列,用于累加。
IF(Y=OFFSET(Y,-1,),X+A,A):这是一个条件判断,用于决定是否累加值。
Y=OFFSET(Y,-1,):判断当前元素Y是否与前一个元素相同。如果是,则进行累加。
X+A:如果当前元素与前一个元素相同,则将累积值X与偏移量A相加。
A:如果当前元素与前一个元素不同,则不累加,直接使用A的值。
整个函数的作用是:遍历数组C2#中的每个元素,如果当前元素与前一个元素相同,则将旁边数值列的值累加到累积值中;如果不同,则重置累积值为旁边数值列的值。最终,SCAN函数会返回一个数组,其中包含了每次迭代后的累积值。
扣减库存在使用SCAN函数对订单数量需求进行求和之后,接下来就可以根据产品对应的库存来进行库存扣减。通过扣减后的库存数量来判断订单是否能够满足,或者是否存在缺货情况。在合适的位置录入以下动态数组公式: =XLOOKUP(C2#,'2.库存'!D2#,'2.库存'!E2#)-E2#
公式解释:
C2#:查找的产品列表。
'2.库存'!D2#:库存表中的产品明细列表。
'2.库存'!E2#:与产品明细相对应的当前库存量列表。
E2#:订单的累计需求数量列表。
通过上述公式的计算结果可以得知:
如果结果大于0,则表示有库存结余;
如果结果等于0,则表示刚好满足订单需求;
如果结果小于0,则表示存在缺货情况。
未完待续……,明日将用根据此结果用IF来判断具体的可发货订单和缺货订单。
今日总结今天我们探讨了如何通过动态数组公式来改进传统的累计需求计算方法。传统的方法虽然能够实现累计求和,但在处理大量数据时存在操作复杂性和效率低下的问题。为了解决这些问题,我们引入了SCAN函数结合LAMBDA和LET函数的动态数组方案,这种新方法不仅简化了操作流程,而且显著提升了运算效率,特别适合于大型数据集的处理。
通过SCAN函数,我们可以自动地对产品需求进行累积计算,并且随着公式的应用范围自动扩展,无需手动填充。这为后续的库存扣减提供了准确的数据支持。在完成需求量的累积后,我们进一步利用XLOOKUP函数实现了库存的实时扣减,并通过结果判断订单是否可以被满足或者是否存在缺货情况。
明日我们将继续基于今天的成果,使用IF函数来具体区分可发货订单与缺货订单,从而帮助业务人员更高效地管理库存和订单履行过程。这种方法将大大提高工作效率,减少错误,确保供应链运作更加顺畅。