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

Power Query(M):如何让Text.Combine/Table.CombineColumns合并双null返回null?

问题解答:让Text.Combine/Table.CombineColumns在两列均为null时返回null

核心结论:Text.Combine和Table.CombineColumns没有内置参数可以直接实现这个需求,但可以通过包装内置函数或自定义合并器的方式达成效果,无需完全从零编写自定义函数。

内置函数的默认行为

Text.Combine会将列表中的null视为空文本,因此Text.Combine({null,null})返回空字符串"";Table.CombineColumns使用默认的Combiner.CombineTextByDelimiter时,同样遵循这个逻辑,导致两列均为null时合并结果为""而非null。

实现需求的两种替代方案

方案1:包装Text.Combine实现通用处理

编写一个包装函数,先判断输入列表是否全为null,再决定返回null还是调用原生Text.Combine:

let
    Source = #table(
        {"Column1","Column2"},
        {
            {"1",null},
            {null,"2"},
            {null,null}
        }
    ),
    // 包装Text.Combine的自定义函数
    Text.CombineWithNull = (texts as list, optional separator as nullable text) =>
        if List.AllTrue(List.Transform(texts, (x) => x is null)) then
            null
        else
            Text.Combine(texts, if separator = null then "" else separator),
    // 使用包装函数合并列
    merge_using_wrapped_textcombine = Table.AddColumn(
        Source,
        "MergeWithWrappedTextCombine",
        each Text.CombineWithNull({[Column1],[Column2]})
    )
in
    merge_using_wrapped_textcombine

方案2:给Table.CombineColumns传自定义合并器

直接给Table.CombineColumns的合并器参数传入匿名函数,针对两列的情况做判断:

let
    Source = #table(
        {"Column1","Column2"},
        {
            {"1",null},
            {null,"2"},
            {null,null}
        }
    ),
    // 使用自定义合并器的Table.CombineColumns
    merged_with_custom_combiner = Table.CombineColumns(
        Source,
        {"Column1","Column2"},
        (cols) => if cols{0} is null and cols{1} is null then null else Text.Combine(cols, ""),
        "MergeWithCustomCombiner"
    )
in
    merged_with_custom_combiner

与原自定义函数的对比

原自定义函数针对固定两列设计,而上面两种方案更灵活:

  • 包装Text.Combine的方式支持任意数量的列合并
  • 自定义合并器的方式更贴合Table.CombineColumns的原生用法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:54:26