Power Query合并MB51与YS23表产生大量冗余行,如何解决?
解决Power Query合并MB51与YS23表后行数暴增的问题
问题核心是两张表存在重复的Sales Document值,导致多对多合并产生笛卡尔积——比如MB51中同一销售文档有3行,YS23中对应文档有5行,合并后会生成3×5=15行重复匹配结果,最终行数失控。以下是具体解决步骤:
1. 先清理MB51表,去除冗余重复行
根据你的需求(匹配组装产品BOM),MB51的重复行大多是同一销售订单的物料移动记录,只需保留每个Sales Document对应的核心信息:
- 打开MB51的Power Query编辑器,选中
Sales Document列,点击开始>删除重复项(如果每个销售文档对应唯一组装产品)。 - 若同一销售文档下有多个组装产品,先筛选出组装产品的物料编码,再对
Sales Document+组装产品编码组合执行删除重复项操作。
2. 整理YS23表的BOM数据,消除重复条目
YS23的重复行通常是同一BOM条目的重复导出,需先整理:
- 打开YS23的Power Query编辑器,选中
Sales Document、Material、Material Description三列,点击开始>删除重复项,保留每个销售文档下唯一的BOM组件条目。 - 若需要将同一销售文档的所有BOM组件合并为一行(方便后续查看),可使用转换>分组依据:
- 分组依据选择
Sales Document,新列名设为BOM组件列表,操作选择所有行; - 添加自定义列,用公式
Text.Combine(List.Transform([BOM组件列表], each [Material] & " - " & [Material Description]), ", ")将组件合并为逗号分隔的文本。
- 分组依据选择
3. 重新执行合并操作
- 使用清理后的MB51和YS23表,基于
Sales Document列执行左外部合并(保留MB51所有行,匹配YS23对应行)。 - 展开合并列时:若YS23是去重后的单一条目,直接展开
Material和Material Description;若已分组合并,则展开BOM组件列表列。
4. 特殊场景处理(需保留MB51原始所有行)
如果必须保留MB51的每一行物料移动记录,可先给MB51添加唯一索引列:
- 点击添加列>索引列,生成唯一标识;
- 合并YS23去重后的表,此时每个MB51行只会匹配到YS23中对应的唯一BOM条目,不会产生笛卡尔积。
额外校验点
合并前检查Sales Document列的格式一致性:用转换>修整去除前后空格,统一设置为文本类型,避免因格式差异导致的错误匹配或匹配失败。
内容的提问来源于stack exchange,提问作者MonqPonx
相关产品推荐
相关产品推荐

