Power Query中匹配两表逗号分隔ID组的方法求助
Power Query匹配逗号分隔ID组解决方案
原代码问题分析
你写的代码逻辑错在两点:
- 用
List.AllTrue(matches)要求所有Table2行都和当前Table1行匹配才返回"Match",但你实际要找的是Table2中存在任意一行匹配的情况。 - 只返回固定的匹配提示,没有提取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
相关产品推荐
相关产品推荐

