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

如何在Power Query M中合并同结构表并将列相等值替换为null

Power Query 列对比置空实现方案

前置准备

确保已完成新旧表按ID字段内连接,展开新表列时添加了统一后缀(示例中用的是1,可自定义为_new等易识别的后缀)

完整M代码实现

将以下代码添加到合并展开步骤之后,按需修改参数区的配置即可直接使用:

// ------------- 可修改参数区 -------------
// 主键列名
PrimaryKey = "ID",
// 新表列的统一后缀
NewColumnSuffix = "1",
// 数值对比精度阈值,避免浮点误差导致误判,不需要可设为0
Epsilon = 0.0001,
// 替换为你上一步合并展开后的步骤名称
PrevStep = #"合并展开后的表",
// ------------- 逻辑处理区 -------------
// 提取所有待对比的旧字段(排除主键、排除带新后缀的字段)
AllColumns = Table.ColumnNames(PrevStep),
OldFieldList = List.Select(AllColumns, each _ <> PrimaryKey and not Text.EndsWith(_, NewColumnSuffix)),
// 逐行逐字段对比处理
ProcessedTable = Table.FromRecords(
    Table.TransformRows(PrevStep, (row) => 
        List.Accumulate(
            OldFieldList,
            [ ID = row[PrimaryKey] ],
            (record, field) =>
                let
                    OldVal = row[field],
                    NewVal = row[field & NewColumnSuffix],
                    // 兼容数值和其他类型的判等逻辑
                    IsEqual = if Value.Is(OldVal, type number) and Value.Is(NewVal, type number)
                        then Number.Abs(OldVal - NewVal) < Epsilon
                        else OldVal = NewVal,
                    FinalVal = if IsEqual then null else NewVal
                in
                    Record.AddField(record, field, FinalVal)
        )
    )
)

逻辑说明

  • 自动匹配字段对:无需手动罗列所有字段,只要新列后缀统一即可自动配对,适配任意数量的同结构字段
  • 浮点兼容:默认配置的精度阈值可避免小数计算误差导致的误判
  • 直接输出目标结构:输出结果自动保留主键+原有字段名,无需额外调整列名

内容的提问来源于stack exchange,提问作者Christopher Sabol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:45:06