在在昨天的文章中,我们通过合并多级净需求数据并进行精准筛选,成功生成了“最终欠料清单”。随后,通过二维透视分析,将一维明细转化为按子件和日期分布的矩阵视图,显著提升了数据的可读性与分析效率。
今天,我们将进一步优化这份欠料清单,重点聚焦于替代料的灵活性展示。当前的最终结果反映的是经过逐级替代后仍无法满足需求的“末级替代料”(例如 A03-3)。然而在实际采购与生产准备过程中,采购人员往往需要更多选择空间:

某些末级替代料可能存在采购周期长、价格高或供应不稳定等问题,而前几级的替代料(如 A03-1、A03-2)或主料(A03)可能更具可行性。因此,仅展示“最终替代料”是不够的。为了提升采购的应变能力与决策灵活性,我们需要回溯整条替代链,将同一物料族中所有可替代的选项一并列出。
例如:若最终欠料为“替代料 A03-3”,我们应同时标注:
主料:A03
替代料1:A03-1
替代料2:A03-2
替代料3:A03-3(当前缺料项)

通过这种方式,采购可根据交期、成本、供应商情况等因素,自主选择最优替代方案,而不被锁定在单一物料上。
接下来,我们将通过关联BOM结构与替代路径信息,提取每个欠料项的完整可替代料明细,并将其整合到最终报告中,真正实现“数据驱动、灵活决策”的闭环管理。
对应关系
为了实现采购灵活性的优化目标,我们需要让系统不仅显示“最终缺料的替代料”,还能回溯并展示该物料所属的完整替代链。例如:当最终缺料为“替代料 A03-3”时,采购应能快速获知 A03(主料)、A03-1、A03-2 等前序替代选项也均可使用。为此,我们首先需要建立一个辅助映射表,将每个“父件 + 子件顺序”所对应的所有可替代物料汇总成一组,便于后续引用,录入公式:
=GROUPBY(BOM输出!A2#&BOM输出!B2#,BOM输出!C2#,ARRAYTOTEXT,,0)

公式解释:
BOM输出!A2#&BOM输出!B2#:将“父件”与“子件顺序”合并为复合键,确保每个替代组唯一(如 A001-1 表示产品A001的第一个子件)
BOM输出!C2#:子件编码列,包含主料及各级替代料
GROUPBY:按复合键分组,聚合同一组内的所有子件
ARRAYTOTEXT:将每组中的多个子件编码合并为一个逗号分隔的文本字符串
应用价值
✅ 构建替代组索引:将分散在BOM中的多级替代关系整合为“一个位置对应多个可用物料”的清晰结构;
✅ 支持灵活查询:后续可在“二维欠料”表中通过 XLOOKUP 快速查到任意缺料项的所有可替代选项;
✅ 赋能采购决策:采购人员可基于交期、成本、库存等因素,在完整替代清单中自主选择最优方案;
✅ 提升系统智能性:从“只给结果”升级为“提供选择”,增强MRP系统的实用性与适应性。
查找引用
在构建了“可替代料汇总表”之后,接下来我们需要将这一关键信息反向关联到原始的欠料明细表中,以便为每一个缺料记录提供完整的替代选项列表。回到“一维欠料明细”工作表,我们可以通过“父件 + 子件顺序”这一复合键,精准匹配之前生成的替代料组,实现信息联动。录入动态数组公式:
=VLOOKUP(INDEX(A2#,,2)&INDEX(A2#,,5),GROUPBY(BOM输出!A2#&BOM输出!B2#,BOM输出!C2#,ARRAYTOTEXT,,0),2,0)

公式解释:
INDEX(A2#,,2) 提取当前欠料表中的“产品编码”(对应 BOM 中的“父件”)
INDEX(A2#,,5) 提取“子件顺序”字段(即 BOM 中的“子件顺序”编号)
INDEX(A2#,,2) & INDEX(A2#,,5) 构造查找键,如 PROD001-1,与替代组表的分组键保持一致
GROUPBY(…) 动态生成分组映射表:
2 返回 GROUPBY 结果中的第2列,即“可替代料列表”
0 精确匹配,确保查找准确无误
应用价值
✅ 打通数据链路:将BOM层级的替代关系与MRP运算结果无缝连接;
✅ 提升采购灵活性:即使最终缺料为末级替代料(如 A03-3),采购仍可查看并选择主料或其他前级替代料;
✅ 支持多方案比选:结合供应商交期、价格、库存等信息,自主决策最优采购对象;
✅ 增强系统实用性:从“刚性输出”升级为“柔性建议”,更贴近实际业务场景。

