PowerBI中跨3张表匹配数值并生成匹配结果的方案求助
解决PowerBI中多表关联对比生成Result列的问题
嘿,我来帮你搞定这个需求!根据你描述的表结构和期望结果,我整理了两种可行的实现方法,你可以根据自己的习惯选择:
方法一:使用DAX计算列(直接在表3中添加结果列)
这种方法不需要修改原始表结构,直接在表3中新建一个计算列即可:
- 打开PowerBI报表视图,选中表3
- 在【建模】选项卡中点击【新建列】
- 输入以下DAX公式:
Result = // 获取表2中当前Number对应的Code值 VAR Match_Code = LOOKUPVALUE(表2[Code], 表2[Number], 表3[Number]) // 判断当前Number是否存在于表1中(仅表1的Number需要参与对比) VAR Is_In_Table1 = NOT(ISBLANK(LOOKUPVALUE(表1[Num], 表1[Num], 表3[Number]))) // 双重条件判断:在表1中且Code匹配则返回Y,否则返回N RETURN IF(Is_In_Table1 && Match_Code = 表3[Code], "Y", "N")
公式说明:
LOOKUPVALUE函数用来精准匹配表2中对应Number的Code值Is_In_Table1通过判断是否能在表1中找到当前Number,筛选出需要对比的范围- 最后通过
IF函数输出结果:只有同时满足「Number在表1中」和「Code与表2对应值一致」时返回Y,其余情况返回N
方法二:使用Power Query(通过数据预处理生成结果表)
如果你更习惯用Power Query做数据清洗和转换,可以按以下步骤操作:
- 进入Power Query编辑器:点击【主页】选项卡 → 【转换数据】
- 创建匹配基准表:
- 选中表1,点击【合并查询】→ 选择表2,关联字段选
表1[Num]和表2[Number],连接类型选择「仅保留匹配的行」 - 展开合并后的表2字段,只保留
Code列,并重命名为Table2_Match_Code - 删除多余列,只保留
Num和Table2_Match_Code,将这个表重命名为Table_Match
- 选中表1,点击【合并查询】→ 选择表2,关联字段选
- 处理表3生成结果:
- 选中表3,点击【合并查询】→ 选择
Table_Match,关联字段选表3[Number]和Table_Match[Num],连接类型选择「左外部」 - 展开合并后的
Table_Match字段,只保留Table2_Match_Code列 - 添加自定义列:点击【添加列】→ 【自定义列】,输入以下M语言公式:
if [Table2_Match_Code] <> null and [Table2_Match_Code] = [Code] then "Y" else "N" - 可以删除
Table2_Match_Code列,最后关闭并应用更改,回到报表视图
- 选中表3,点击【合并查询】→ 选择
注意事项:
根据你的需求描述,表3中222-bb的Result应该为Y(因为表2中222对应的Code就是bb),但你给出的期望输出里写的是N,如果这是笔误的话,上面两种方法都会得到正确的Y;如果确实需要222-bb返回N,请补充说明具体的逻辑规则哦!
内容的提问来源于stack exchange,提问作者Istiak Mahmood




