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
相关产品推荐
相关产品推荐

