Power BI DAX NATURALINNERJOIN 函數:進行資料表自然內連接 (Natural Inner Join) 完整指南
Power BI DAX NATURALINNERJOIN 函數:進行資料表自然內連接 (Natural Inner Join) 完整指南
📅 發布日期:2026-09-21
🏷️ 分類:表操作函數 DAX 函數
💡 函數速查卡
| 函數名稱 | NATURALINNERJOIN |
|---|---|
| 所屬類別 | 表操作函數 (Table Manipulation functions) |
| 傳回類型 | 資料表 (Table) |
| 常用頻率 | ★★☆☆☆ |
在 Power BI / Analysis Services 的 DAX 數據建模中,NATURALINNERJOIN 函數用於執行兩張資料表之間的**自然內連接 (Inner Join)**。它會自動根據兩表之間具備**相同名稱與相同資料類型**的欄位(或模型中已建立的物理關聯)進行比對,並僅回傳兩邊皆有匹配資料的交叉結果集。
一、 基本語法與參數
NATURALINNERJOIN 函數的標準 DAX 語法結構如下:
NATURALINNERJOIN(<leftJoinTable>, <rightJoinTable>)
| 參數 | 說明 | 預設值 / 必填 |
|---|---|---|
leftJoinTable |
作為內連接左側的資料表表達式(Table Expression)。 | 必填 |
rightJoinTable |
作為內連接右側的資料表表達式(Table Expression)。 | 必填 |
二、 核心功能說明
NATURALINNERJOIN 根據兩表間的共同鍵(Common Keys)進行 Inner Join 運算。若兩表之間存在模型關聯(Relationship),則使用關聯鍵進行連接;若為臨時表(例如透過 SUMMARIZE 或 SELECTCOLUMNS 建立的虛擬表),則會自動根據**同名且同資料類型**的欄位進行合併。
在 Power BI 報表建模中,常見的實務應用包括:
- 在 DAX 度量值或虛擬表中,組合兩張存在交集的資料集。
- 進行跨表資料比對,僅保留同時存在於兩個資料來源的交集記錄。
- 在無需寫複雜邏輯的情況下,快速將維度屬性貼附至彙總結果表。
三、 實用 DAX 範例
範例 1:結合兩張虛擬表(以同名欄位自然內連接)
透過 SELECTCOLUMNS 建立兩張共享 ProductID 欄位的虛擬表,並進行內連接:
// 建立計算表:僅保留產品清單與銷售紀錄中皆存在的 ProductID 資料列
JoinedTable =
VAR TableA =
SELECTCOLUMNS(
'Product',
"ProductID", 'Product'[ProductID],
"ProductName", 'Product'[ProductName]
)
VAR TableB =
SELECTCOLUMNS(
'Sales',
"ProductID", 'Sales'[ProductID],
"SalesAmount", 'Sales'[Amount]
)
RETURN
NATURALINNERJOIN(TableA, TableB)
範例 2:在度量值中計算兩表交集的彙總總額
在不建立實體計算表的情況下,於記憶體中動態內連接並計算交集金額:
// 建立度量值:計算同時屬於 VIP 客戶且有促銷活動的銷售額
IntersectedSales =
VAR VIPCustomers =
SELECTCOLUMNS(
FILTER('Customer', 'Customer'[IsVIP] = TRUE()),
"CustomerID", 'Customer'[CustomerID]
)
VAR PromoSales =
SELECTCOLUMNS(
FILTER('Sales', 'Sales'[IsPromo] = TRUE()),
"CustomerID", 'Sales'[CustomerID],
"Amount", 'Sales'[Amount]
)
VAR CombinedTable = NATURALINNERJOIN(VIPCustomers, PromoSales)
RETURN
SUMX(CombinedTable, [Amount])
四、 常見陷阱與注意事項
⚠️ 注意事項 1:同名欄位重疊衝突 (No common join columns error)
若兩張表之間沒有相同的欄位名稱,或者除了連接鍵(Join Key)之外還包含其他同名但非連接目的的欄位,運算可能會失敗或產生意料之外的笛卡爾積(Cartesian Product)。建議使用
若兩張表之間沒有相同的欄位名稱,或者除了連接鍵(Join Key)之外還包含其他同名但非連接目的的欄位,運算可能會失敗或產生意料之外的笛卡爾積(Cartesian Product)。建議使用
SELECTCOLUMNS 嚴格篩選與重新命名欄位後再進行連接。
⚠️ 注意事項 2:模型關聯與數據資料類型約束
當參與 Join 的兩張表屬於實體模型表且彼此存在關聯時,
當參與 Join 的兩張表屬於實體模型表且彼此存在關聯時,
NATURALINNERJOIN 會強制使用實體關聯進行連接。此時兩邊關聯欄位的資料類型與內部資料歷程(Lineage)必須完全吻合,否則可能引發系統錯誤。
五、 相關函數推薦
NATURALLEFTOUTERJOIN:執行自然左外連接,保留左表所有資料。INTERSECT:計算兩張具有相同欄位結構之資料表的交集(集合運算)。SELECTCOLUMNS:選取並重命名資料表欄位,常用於搭配 Join 前的資料準備。CROSSJOIN:計算兩張資料表的所有組合(交叉相乘/笛卡爾積)。
六、 官方文件連結
想進一步瞭解微軟官方說明與 DAX 語法細節,可參考:
留言
張貼留言