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),則使用關聯鍵進行連接;若為臨時表(例如透過 SUMMARIZESELECTCOLUMNS 建立的虛擬表),則會自動根據**同名且同資料類型**的欄位進行合併。

在 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)。建議使用 SELECTCOLUMNS 嚴格篩選與重新命名欄位後再進行連接。
⚠️ 注意事項 2:模型關聯與數據資料類型約束
當參與 Join 的兩張表屬於實體模型表且彼此存在關聯時,NATURALINNERJOIN 會強制使用實體關聯進行連接。此時兩邊關聯欄位的資料類型與內部資料歷程(Lineage)必須完全吻合,否則可能引發系統錯誤。

五、 相關函數推薦

  • NATURALLEFTOUTERJOIN:執行自然左外連接,保留左表所有資料。
  • INTERSECT:計算兩張具有相同欄位結構之資料表的交集(集合運算)。
  • SELECTCOLUMNS:選取並重命名資料表欄位,常用於搭配 Join 前的資料準備。
  • CROSSJOIN:計算兩張資料表的所有組合(交叉相乘/笛卡爾積)。

六、 官方文件連結

想進一步瞭解微軟官方說明與 DAX 語法細節,可參考:

留言

相關文章 / 薪資情報

文章載入中...

你可能有興趣

精選文章 / 推薦情報

文章載入中...