You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PowerBI中跨3张表匹配数值并生成匹配结果的方案求助

解决PowerBI中多表关联对比生成Result列的问题

嘿,我来帮你搞定这个需求!根据你描述的表结构和期望结果,我整理了两种可行的实现方法,你可以根据自己的习惯选择:

方法一:使用DAX计算列(直接在表3中添加结果列)

这种方法不需要修改原始表结构,直接在表3中新建一个计算列即可:

  1. 打开PowerBI报表视图,选中表3
  2. 在【建模】选项卡中点击【新建列】
  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做数据清洗和转换,可以按以下步骤操作:

  1. 进入Power Query编辑器:点击【主页】选项卡 → 【转换数据】
  2. 创建匹配基准表
    • 选中表1,点击【合并查询】→ 选择表2,关联字段选表1[Num]表2[Number],连接类型选择「仅保留匹配的行」
    • 展开合并后的表2字段,只保留Code列,并重命名为Table2_Match_Code
    • 删除多余列,只保留NumTable2_Match_Code,将这个表重命名为Table_Match
  3. 处理表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中222-bb的Result应该为Y(因为表2中222对应的Code就是bb),但你给出的期望输出里写的是N,如果这是笔误的话,上面两种方法都会得到正确的Y;如果确实需要222-bb返回N,请补充说明具体的逻辑规则哦!

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

火山引擎 最新活动