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

Power Query中Text.Combine循环引用错误:求Power BI计算列等价表达式

Power Query实现Power BI计算列的匹配功能(解决循环引用错误)

需求说明

在Table1中新增一列,检查Table1[Column1.words]是否包含Table2[US_english]中的词汇,匹配时返回对应的US_english值。原Power BI计算列的DAX代码如下:

=
MINX (
    FILTER ( Table2, SEARCH ( Table2[US_english], Table1[Column1.words],, 0 ) > 0 ),
    Table2[US_english]
)

注:原DAX逻辑是返回所有匹配词汇中最小的那个(通过MINX取最小值)

遇到的问题

自行编写的Power Query代码触发循环引用错误:Expression.Error: 计算期间遇到循环引用错误,代码如下:

let x= Table.AddColumn(Table1, "Column2.matched", each Text.Combine(List.Select(Table2[US_english], (x) => Text.Contains([Column1.words], x)),",")) in x

错误原因

代码里的变量名冲突:let语句定义的变量x和List.Select里的参数(x)重名,导致Power Query误判为循环引用。

解决方案

方案1:匹配所有词汇并合并(对应你写的合并逻辑)

修改参数名避免冲突,同时保证上下文正确:

let
    添加匹配列 = Table.AddColumn(Table1, "Column2.matched", 
        each Text.Combine(
            List.Select(Table2[US_english], (匹配词) => Text.Contains([Column1.words], 匹配词)),
            ","
        )
    )
in
    添加匹配列

方案2:完全等价原DAX逻辑(返回最小匹配词汇)

如果要和原DAX的MINX逻辑完全一致,返回所有匹配词汇中的最小值,用这段代码:

let
    添加最小匹配列 = Table.AddColumn(Table1, "Column2.matched", 
        each 
            let
                匹配词汇列表 = List.Select(Table2[US_english], (匹配词) => Text.Contains([Column1.words], 匹配词))
            in
                if List.IsEmpty(匹配词汇列表) then null else List.Min(匹配词汇列表)
    )
in
    添加最小匹配列

额外说明

  • Text.Contains默认区分大小写,要是需要不区分大小写,可添加第三个参数:Text.Contains([Column1.words], 匹配词, Comparer.OrdinalIgnoreCase)
  • 原DAX的SEARCH同样区分大小写,若要保持逻辑一致,无需修改;若要统一不区分,两边的判断逻辑都要调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:20:12