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

Power BI中如何通过Table 1与Table 2生成Table 3?

Power BI高效生成Table3的方案(替代低效的Text.Contains)

表结构说明(基于截图整理)

  • Table1:字段为物料编码、物料名称,是待分类的物料清单
  • Table2:字段为物料组名称、包含物料关键词(关键词以逗号分隔),是物料组的规则映射表
  • Table3:目标表,为Table1的每条物料匹配对应的物料组名称

优化匹配方案

方案1:Power Query拆分关键词+合并查询(低耗时易操作)

  1. 进入Power Query编辑器,加载Table2
  2. 拆分包含物料关键词列:选中该列 → 点击「拆分列」→ 按逗号分隔符拆分到行,得到「物料组名称」对应单个关键词的行数据
  3. 合并Table1与拆分后的Table2:
    • 选中Table1 → 点击「合并查询」→ 选择拆分后的Table2作为关联表
    • 匹配条件设置为:Table1的物料名称 包含 Table2的包含物料关键词
  4. 展开合并后的物料组名称列,按需去重(若单个物料匹配多组,可按业务规则保留首个结果或全部结果)

方案2:Power Query哈希表预处理(极致高效)

  1. 先处理Table2,生成关键词-物料组的哈希表:
    let
        源 = Table2,
        添加关键词列表 = Table.AddColumn(源, "关键词列表", each Text.Split([包含物料关键词], ",")),
        转哈希表 = Record.FromList(添加关键词列表[物料组名称], 添加关键词列表[关键词列表])
    in
        转哈希表
    
  2. 在Table1中添加匹配列:
    Table.AddColumn(Table1, "物料组名称", each 
        let
            物料名 = [物料名称],
            匹配关键词 = List.Select(Record.FieldNames(转哈希表), (k) => Text.Contains(物料名, k))
        in
            if List.Count(匹配关键词) > 0 then 转哈希表{匹配关键词{0}} else null
    )
    
    哈希表的快速查找特性会大幅减少遍历次数,比原生Text.Contains快数倍。

方案3:DAX计算列(适合数据模型端生成)

若需在数据模型中直接生成Table3,用DAX的MAXX+SEARCH组合替代低效遍历:

物料组名称 = 
VAR 当前物料名 = 'Table1'[物料名称]
RETURN
MAXX(
    FILTER(
        'Table2',
        SEARCH('Table2'[包含物料关键词], 当前物料名, 1, 0) > 0
    ),
    'Table2'[物料组名称]
)

若需匹配多个物料组,可替换MAXX为CONCATENATEX拼接所有匹配结果。

原方法慢的核心原因

Text.Contains默认会生成两张表的笛卡尔积(计算量为Table1行数 × Table2行数),数据量较大时计算复杂度呈指数级增长。上述方案通过拆分关键词、哈希表预处理,将计算复杂度从O(n*m)降低到O(n+k)(k为关键词总数),效率显著提升。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:05:42