PowerBI中基于条件用其他表列数据替换本表列数据的实现
在PowerBI中基于匹配条件用另一表数据替换当前表列值
需求场景
现有两个关联数据表,需基于Customer和ID两列的匹配关系,用表2的Action 1、Action 2列数据替换表1对应行的同名列值,同时保留表1中未匹配到的行数据。
示例数据
表1:
| Customer | Action 1 | Action2 | ID |
|---|---|---|---|
| A | Open | InProg | 1001 |
| B | Closed | Sent | 1002 |
| B | On Hold | Waiting | 1003 |
表2:
| Customer | Action 1 | Action2 | ID |
|---|---|---|---|
| B | Open | InProg | 1002 |
| B | Closed | Sent | 1003 |
| B | On Hold | Waiting | 1004 |
预期输出
| Customer | Action 1 | Action2 | ID |
|---|---|---|---|
| A | Open | InProg | 1001 |
| B | Open | InProg | 1002 |
| B | Closed | Sent | 1003 |
解决方案
方法1:使用DAX创建计算列
在表1中分别为Action 1和Action 2创建计算列,通过LOOKUPVALUE函数实现条件匹配替换:
替换Action 1的计算列
新Action 1 = VAR MatchValue = LOOKUPVALUE('表2'[Action 1], '表2'[Customer], '表1'[Customer], '表2'[ID], '表1'[ID]) RETURN IF(ISBLANK(MatchValue), '表1'[Action 1], MatchValue)
替换Action 2的计算列
新Action 2 = VAR MatchValue = LOOKUPVALUE('表2'[Action 2], '表2'[Customer], '表1'[Customer], '表2'[ID], '表1'[ID]) RETURN IF(ISBLANK(MatchValue), '表1'[Action 2], MatchValue)
逻辑说明:LOOKUPVALUE会根据Customer和ID双条件查找表2对应的值,若未找到匹配项(如客户A的行),则保留表1原列值;找到匹配项则用表2的值替换。
方法2:使用Power Query(查询编辑器)处理
通过查询编辑器的合并与自定义列实现替换,步骤如下:
- 打开Power Query编辑器,加载表1和表2
- 选中表1,点击【合并查询】→【合并查询作为新查询】,选择表2作为合并对象,匹配列选择
Customer和ID,连接类型选择左外部(从第一个表获取所有行,从第二个表获取匹配行) - 展开合并后的表2列,仅勾选
Action 1和Action 2,展开时可将列名重命名为表2_Action 1、表2_Action 2 - 添加自定义列:
- 替换Action 1:
if [表2_Action 1] <> null then [表2_Action 1] else [Action 1] - 替换Action 2:
if [表2_Action 2] <> null then [表2_Action 2] else [Action 2]
- 替换Action 1:
- 删除原
Action 1、Action 2列及表2的辅助列,将自定义列重命名为Action 1、Action 2 - 关闭并应用查询,即可得到预期结果
内容的提问来源于stack exchange,提问作者Maha
相关产品推荐
相关产品推荐

