在昨天的文章中,我们进入第二级净需求的运算环节。核心任务是:筛选出第一级中欠料且有替代料的子件,引用其“可替代料1”的可用库存,重新执行“库存减需求”的逻辑判断。通过这一过程,我们将计算替代料能够覆盖的缺口,并得出考虑替代后的最终净需求状态,此时如果还有显示欠料,就需要继续执行“可替代料2”的判断逻辑。
今天将重点介绍如何进行可替代料2的判断逻辑过程。
可替代料2
在此工作表“第2级净需求”中继续增加一列并命名为“替代料2”,并在下方录入动态数组公式:
=VLOOKUP(B2#&"-"&E2#,PIVOTBY(BOM输出!F2#,BOM输出!E2#,BOM输出!C2#,T),4,0)
公式说明:
与第1次判断的核心区别就是聚合函数的引用列数变成了数字4,代表第4列,也就是替代料2的位置,如果显示有物料代码,则表示还有替代料。
筛选数据
接下来就执行筛选数据,筛选出有替代料二的数据,录入动态数组公式进行数据筛选:
=FILTER(第2级净需求!A2:M30000,第2级净需求!M2:M30000"")
公式解释:
与筛选第1级净需求类似,筛选条件是有替代料2的,也就是不为空的数据。
替换子件
在完成第二级(替代料1)的净需求计算后,若企业存在多级替代策略,我们可继续向下延伸,进入 第三级需求运算——即针对“可替代料2”的分析。该层级的核心目标是:当主料短缺、且第一替代料(替代料1)也不足或不可用时,系统是否可进一步启用“替代料2”进行补充?为此,我们需要将“替代料2”的信息提取出来,作为第三级的运算子件。
1. 提取“替代子件2”编码
新建一列,命名为 “替代子件2”,用于获取第二级中登记的“替代料2”物料编码:
=FILTER(第2级净需求!M2:M30000,第2级净需求!$M$2:$M$30000"")
公式说明:
从“第2级净需求”表的 M 列(即“替代料2”字段)中提取所有非空记录;
使用绝对引用 $M$2:$M$30000 确保筛选条件区域在复制公式时保持不变;
结果为所有需由“替代料2”承接补缺任务的物料清单。
2. 转换“替代子件2”的需求量
新建一列,命名为 “替代子件2需求”,表示该层级需补足的缺口数量:=-FILTER(第2级净需求!L2:L30000,第2级净需求!$M$2:$M$30000"")
公式说明:
L2:L30000 为第二级计算出的“净需求”列,其中负数代表“替代料1”仍存在的短缺量;
使用负号 - 将其转换为正数,表示“替代料2需要补充的数量”;
仅对存在“替代料2”的记录进行提取,避免无效扩展。
示例说明:若某场景下“替代料1”仍缺 80 个,则系统将生成“替代料2 需求 = 80”,用于后续库存判断。
累计需求
在将“替代料2”作为第三级运算子件引入后,下一步是对其需求进行整合处理。由于同一替代料可能出现在多个不同的生产任务或前级替代场景中,若不进行汇总,将导致库存被重复或分散扣减。
因此,我们需要计算 “替代子件2”的累计需求,即将相同物料编码的需求量逐行累加,为后续库存扣减提供准确的总消耗值。录入动态数组公式:
=SCAN(0,F2#,LAMBDA(X,Y,LET(A,OFFSET(Y,,2),IF(Y=OFFSET(Y,-1,),X+A,A))))
公式说明:
F2#:当前“替代子件2”编码列(已排序)
OFFSET(Y,,2):向右偏移2列,获取对应的需求量(假设需求在F列右侧第2列)
IF(Y = OFFSET(Y, -1,), X + A, A):判断当前行物料是否与上一行相同
相同 → 在前一个累计值基础上继续累加
不同 → 重新开始,仅取当前行需求
未完待续……
大圣配资提示:文章来自网络,不代表本站观点。