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

Power Query中匹配两表逗号分隔ID组的方法求助

Power Query匹配逗号分隔ID组解决方案

原代码问题分析

你写的代码逻辑错在两点:

  1. 用List.AllTrue(matches)要求所有Table2行都和当前Table1行匹配才返回"Match",但你实际要找的是Table2中存在任意一行匹配的情况。
  2. 只返回固定的匹配提示,没有提取Table2中匹配行的对应值。

修正方案(高效版)

第一步:先标准化Table2的ID列

先给Table2做预处理,把每个ID组拆分、排序后重新合并成统一格式的字符串,后续匹配更高效:

let
    源 = Table2,
    添加标准化列 = Table.AddColumn(源, "标准化ID组", each Text.Combine(List.Sort(Text.Split([FAC_Group_ID], ", ")), ", "))
in
    添加标准化列

把处理后的表重命名为Table2_标准化。

第二步:在Table1中添加匹配列

在Table1里新增自定义列,实现匹配并返回Table2的对应值(这里默认返回Table2的FAC_Group_ID,你可以替换成需要的其他列名):

let
    源 = Table1,
    添加匹配结果 = Table.AddColumn(源, "Table2对应值", (当前行) => 
        let
            // 标准化当前行的ID组
            当前标准化ID = Text.Combine(List.Sort(Text.Split(当前行[FAC_Group_ID], ", ")), ", "),
            // 找Table2中匹配的行
            匹配行 = Table.SelectRows(Table2_标准化, each [标准化ID组] = 当前标准化ID),
            // 返回匹配值,无匹配则显示"无匹配"
            结果 = if Table.RowCount(匹配行) > 0 then 匹配行{0}[FAC_Group_ID] else "无匹配"
        in
            结果
    )
in
    添加匹配结果

简化版(适合小数据集)

如果你的表数据量不大,也可以不用预处理,直接在Table1的自定义列里遍历匹配:

let
    源 = Table1,
    添加匹配结果 = Table.AddColumn(源, "Table2对应值", (当前行) => 
        let
            当前排序ID = List.Sort(Text.Split(当前行[FAC_Group_ID], ", ")),
            // 遍历Table2找第一个匹配的ID组
            匹配值 = List.First(List.Select(Table2[FAC_Group_ID], (id2) => 
                List.Sort(Text.Split(id2, ", ")) = 当前排序ID
            ), "无匹配")
        in
            匹配值
    )
in
    添加匹配结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:30:13