You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power Query中基于多列合并存在唯一值差异的Sale表与Target表的问题排查

解决Power Query全外连接后日期-物料列重复的问题

嘿,我完全懂你遇到的麻烦——直接用全外连接时,Power Query会把两个表的同名列拆成Date/Date.1、mat/mat.1,没法自动合并成统一的日期-物料组合。这里有两种靠谱的解决方法,帮你精准得到想要的结果:

方法一:先生成所有日期-物料组合(推荐)

这种方法逻辑更清晰,能确保覆盖所有可能的组合,步骤如下:

  1. 提取所有唯一日期和物料

    • 新建空白查询,命名为AllDates,输入M代码获取两表的所有唯一日期:
      List.Distinct(List.Combine({Target[Date], Sale[Date]}))
      
      然后点击转换→到表,把列表转成表格。
    • 同理新建AllMats查询,获取所有唯一物料:
      List.Distinct(List.Combine({Target[mat], Sale[mat]}))
      
      同样转成表格。
  2. 生成日期-物料笛卡尔积

    • 打开AllDates表,点击添加列→自定义列,输入AllMats(选择刚才创建的物料表),然后点击列名旁的展开按钮,展开所有物料行,得到所有可能的日期-物料组合。
  3. 关联Target表并填充缺失值

    • 点击合并查询→合并查询作为新查询,选择当前的交叉表作为左表,Target作为右表,匹配列选择Date和mat,连接类型选左外部。
    • 展开合并后的列,只勾选Tar列;然后选中Tar列,点击转换→替换值,将空值替换为0。
  4. 关联Sale表并填充缺失值

    • 继续点击合并查询,左表用当前表,右表选Sale,同样匹配Date和mat,左外部连接。
    • 展开S列,把空值替换为0。
  5. 整理列顺序

    • 调整列的顺序为Date→mat→Tar→S,就得到你想要的最终结果啦!

方法二:修复已做的全外连接结果

如果你已经做了全外连接,出现了重复的日期和物料列,可以这样处理:

  1. 合并重复的日期和物料列

    • 添加自定义列统一Date,公式写:
      if [Date] = null then [Date.1] else [Date]
      
    • 同理添加统一mat列,公式:
      if [mat] = null then [mat.1] else [mat]
      
    • 删除原来的Date、Date.1、mat、mat.1列。
  2. 填充缺失值

    • 把Tar列的空值替换为0,S列的空值也替换为0。
  3. 去除重复行

    • 选中统一Date和统一mat列,点击开始→删除行→删除重复项,确保每个日期-物料组合只出现一次。
  4. 重命名列

    • 把统一Date改回Date,统一mat改回mat,调整列顺序即可。

内容的提问来源于stack exchange,提问作者Faeem Bahar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 18:27:40