PowerBI中基于ID匹配对比Name字段的查询实现需求
PowerBI 两表Name字段对比解决方案
一、数据预处理(先修复Table 2的问题)
Table 2存在列名错误(ID.)和无效空行,先在Power Query编辑器里清洗:
- 导入Table 2后,把列名
ID.重命名为ID - 选中任意列,点击筛选按钮,取消勾选「空」,删掉无效空行
- 统一
ID列的数据类型(和Table 1的ID类型保持一致,比如都设为文本或数字)
二、用Power Query实现(推荐,适合批量处理)
合并两张表
打开Power Query编辑器,选中Table 1,点击「合并查询」→「合并查询作为新查询」:- 合并对象选Table 2
- 匹配列选两张表的
ID - 连接类型选「左外部」(保留Table 1所有行,匹配Table 2对应行)
确定后,Table 1会新增一列包含Table 2的匹配数据。
提取Table 2的Name并生成结果列
- 点击新增列的展开按钮,只勾选
Name列,重命名为Table2_Name - 添加自定义列
Name Result,输入以下M语言公式:
- 点击新增列的展开按钮,只勾选
if [Name] = null or [Name] = "" then "Empty in Table 1" else if [Table2_Name] = null then "Not Found Table 2" else if [Name] = [Table2_Name] then "No Difference" else "Difference Value"
- 按需删除多余列(比如
Table2_Name、Email),最终结果就和你要的一致。
三、用DAX计算列实现(适合数据模型已关联的场景)
如果已经给两张表通过ID建立了关系(Table 1为主动表),可以直接加计算列:
- 先加
Table2_Name列:
Table2_Name = RELATED(Table2[Name])
- 再加
Name Result列:
Name Result = SWITCH( TRUE(), ISBLANK(Table1[Name]) || Table1[Name] = "", "Empty in Table 1", ISBLANK([Table2_Name]), "Not Found Table 2", Table1[Name] = [Table2_Name], "No Difference", "Difference Value" )
最终效果
处理后得到的结果如下:
| ID | Name | Name Result |
|---|---|---|
| 1001 | Henrik | No Difference |
| 1002 | Lars | Not Found Table 2 |
| 1003 | Fredrik | Difference Value |
| 1004 | Empty in Table 1 |
内容的提问来源于stack exchange,提问作者Istiak Mahmood
相关产品推荐
相关产品推荐

