Power Query中基于多列合并存在唯一值差异的Sale表与Target表的问题排查
解决Power Query全外连接后日期-物料列重复的问题
嘿,我完全懂你遇到的麻烦——直接用全外连接时,Power Query会把两个表的同名列拆成Date/Date.1、mat/mat.1,没法自动合并成统一的日期-物料组合。这里有两种靠谱的解决方法,帮你精准得到想要的结果:
方法一:先生成所有日期-物料组合(推荐)
这种方法逻辑更清晰,能确保覆盖所有可能的组合,步骤如下:
提取所有唯一日期和物料
- 新建空白查询,命名为
AllDates,输入M代码获取两表的所有唯一日期:
然后点击List.Distinct(List.Combine({Target[Date], Sale[Date]}))转换→到表,把列表转成表格。 - 同理新建
AllMats查询,获取所有唯一物料:
同样转成表格。List.Distinct(List.Combine({Target[mat], Sale[mat]}))
- 新建空白查询,命名为
生成日期-物料笛卡尔积
- 打开
AllDates表,点击添加列→自定义列,输入AllMats(选择刚才创建的物料表),然后点击列名旁的展开按钮,展开所有物料行,得到所有可能的日期-物料组合。
- 打开
关联Target表并填充缺失值
- 点击
合并查询→合并查询作为新查询,选择当前的交叉表作为左表,Target作为右表,匹配列选择Date和mat,连接类型选左外部。 - 展开合并后的列,只勾选
Tar列;然后选中Tar列,点击转换→替换值,将空值替换为0。
- 点击
关联Sale表并填充缺失值
- 继续点击
合并查询,左表用当前表,右表选Sale,同样匹配Date和mat,左外部连接。 - 展开
S列,把空值替换为0。
- 继续点击
整理列顺序
- 调整列的顺序为
Date→mat→Tar→S,就得到你想要的最终结果啦!
- 调整列的顺序为
方法二:修复已做的全外连接结果
如果你已经做了全外连接,出现了重复的日期和物料列,可以这样处理:
合并重复的日期和物料列
- 添加自定义列
统一Date,公式写:if [Date] = null then [Date.1] else [Date] - 同理添加
统一mat列,公式:if [mat] = null then [mat.1] else [mat] - 删除原来的
Date、Date.1、mat、mat.1列。
- 添加自定义列
填充缺失值
- 把
Tar列的空值替换为0,S列的空值也替换为0。
- 把
去除重复行
- 选中
统一Date和统一mat列,点击开始→删除行→删除重复项,确保每个日期-物料组合只出现一次。
- 选中
重命名列
- 把
统一Date改回Date,统一mat改回mat,调整列顺序即可。
- 把
内容的提问来源于stack exchange,提问作者Faeem Bahar
相关产品推荐
相关产品推荐

