You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power BI中NATURALOUTERLEFTJOIN实现主表与两表左连接的问题

解决DAX中主表同时左连接两个表的问题

要实现主表与另外两个表的左连接并仅保留主表行,可通过以下两种方式解决NATURALOUTERLEFTJOIN仅支持两表连接的限制:

方法一:嵌套使用NATURALOUTERLEFTJOIN

先将主表与第一个表左连接,再把得到的中间结果与第二个表左连接,最终保留主表的所有行。

假设主表为MainTable,需连接的两个表为TableA和TableB,且三者通过同名列ID关联,示例代码如下:

MainTable_LeftJoin_TwoTables = 
VAR First_Join_Result = NATURALOUTERLEFTJOIN(MainTable, TableA)
RETURN NATURALOUTERLEFTJOIN(First_Join_Result, TableB)

如果连接列名不一致,可先用RENAMECOLUMNS统一列名,例如:

MainTable_LeftJoin_TwoTables = 
VAR Renamed_TableA = RENAMECOLUMNS(TableA, "TableA_ID", "ID")
VAR First_Join_Result = NATURALOUTERLEFTJOIN(MainTable, Renamed_TableA)
VAR Renamed_TableB = RENAMECOLUMNS(TableB, "TableB_ID", "ID")
RETURN NATURALOUTERLEFTJOIN(First_Join_Result, Renamed_TableB)

方法二:使用ADDCOLUMNS结合LOOKUPVALUE

这种方式更灵活,适合连接列名不同或仅需关联少数列的场景,通过给主表添加来自另外两个表的匹配列实现需求。

示例代码(假设需关联TableA的InfoA列和TableB的InfoB列,连接键分别为MainTable[ID]对应TableA[TableA_ID]、TableB[TableB_ID]):

MainTable_With_Joined_Data = 
ADDCOLUMNS(
    MainTable,
    "TableA_Info", LOOKUPVALUE(TableA[InfoA], TableA[TableA_ID], MainTable[ID]),
    "TableB_Info", LOOKUPVALUE(TableB[InfoB], TableB[TableB_ID], MainTable[ID])
)

若存在多匹配项,可改用MAXX或MINX避免报错,例如:

MainTable_With_Joined_Data = 
ADDCOLUMNS(
    MainTable,
    "TableA_Info", MAXX(FILTER(TableA, TableA[TableA_ID] = MainTable[ID]), TableA[InfoA]),
    "TableB_Info", MINX(FILTER(TableB, TableB[TableB_ID] = MainTable[ID]), TableB[InfoB])
)

内容的提问来源于stack exchange,提问作者Eniola Abolade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:52:18