DAX 關係函數:RELATED 與 RELATEDTABLE 實戰 (附練習檔)

還在用 LOOKUPVALUE 的舊思維嗎?這篇文章將帶你升級到 Power BI 更強大的模型導航思維。我們將深入 DAX 中最重要的兩個關係函數:RELATED 與 RELATEDTABLE。你將學會 RELATED 在量值中進行動態「跨表列級比較」的殺手級應用,並掌握如何用 RELATEDTABLE 建立靜態屬性,實現基於聚合值的篩選器與 ABC 分析。告別儲存格查找,擁抱模型導航的新世界。

DAX 關係函數:RELATED 與 RELATEDTABLE 實戰 (附練習檔)

你好,我是 Kiro。

如果你是從 Excel 的世界來到 Power BI,你腦中肯定有一個根深蒂固的習慣:當需要來自另一張表的資訊時,第一反應就是 VLOOKUP。你可能會驚喜地發現,DAX 中確實有一個幾乎一模一樣的函數叫做 LOOKUPVALUE

然而,這正是新手的第一个陷阱。

如果你還在用 LOOKUPVALUE 的思維來解決所有查找問題,那就好比你買了一台法拉利,卻只用一檔在市區開。它能動,但你完全浪費了它強大的 V12 引擎。

LOOKUPVALUE 的問題在於,它完全忽略了 Power BI 最核心的威力來源——事先建立好的資料模型與『關係』。它依然是一種「儲存格查找」的舊思維。

RELATEDRELATEDTABLE,就是你在這些預先建立好的『數據高速公路』上自由穿梭的原生 GPS 導航系統。它們不靠蠻力查找,而是優雅地沿著關係流動。

這篇文章,就是你的 GPS 使用手冊。我們將帶你徹底告別「儲存格查找」的舊思維,擁抱「模型導航」的新世界。

學習前提: 本文假設你已經理解了 Power BI 資料建模 的核心概念,特別是「一對多」關係。

🎁 邊讀邊做,學得更快! 我為這篇文章準備了專屬的 Power BI 練習檔。免費訂閱我的電子報,即可立即前往會員資源中心下載!

📂 練習資料包含:
Dim_Customer.xlsx
Dim_Product.xlsx
Fact_Sales.xlsx
PBI_DAX_關係函數實戰_練習檔_V1.pbix

第一部分:RELATED —— 你的上游導航器 (從「多」到「一」)

RELATED 函數是你最常使用的關係函數。它的任務非常單純:

從「多」的那一端(通常是事實表),沿著關係的「高速公路」逆流而上,去「一」的那一端(維度表),拿取你需要的資訊。

經典使用場景:為事實表添加「維度標籤」

讓我們從 RELATED 最直觀的應用開始。這是在計算資料行中,為事實表「豐富」來自維度表的描述性資訊。

  • 商業問題: 我們的 Fact_Sales 表中只有 ProductKey,但我想根據「產品分類」來進行篩選和分析。
  • 解決方案:Fact_Sales 表中,新增一個計算資料行。

DAX 公式:

// 在 'Fact_Sales' 表中新增此計算資料行
Product Category = RELATED('Dim_Product'[CategoryName])

【關鍵問題】RELATED 的真正威力在哪?

看到這裡,經驗豐富的 Excel 使用者一定會問一個非常敏銳的問題:「如果目的只是 VLOOKUP,為什麼不用 Power Query 的合併查詢 (Merge) 就好?那不是最佳實踐嗎?

答案是:是的,你說的完全正確。

對於上面那個「為事實表添加靜態標籤」的場景,在 Power Query 中使用「合併查詢」永遠是更優、更高效的首選

那麼,為什麼我們還需要 RELATED?因為 RELATED 的真正威力,體現在一個 Power Query 和簡單篩選語法都無法完成的特殊場景:在量值 (Measure) 中,進行動態的「跨表列級比較」。

  • 商業問題: 銷售總監需要一份報告,找出所有「違規折扣」的銷售總額。公司的規定是:業務給予客戶的折扣率 (Fact_Sales 表),不應超過該產品官方核准的最高折扣率 (Dim_Product 表)
  • 挑戰: 這個邏輯需要在 Fact_Sales 表的每一列,將 [DiscountPercentage]關聯產品的 [MaxAllowedDiscount] 進行比較。這是一個動態的、跨越兩個表格的列級比較,簡單的 CALCULATE 篩選無法完成。

DAX 公式 (量值):

// 量值:計算違規折扣的銷售總額
NonCompliantDiscountSales =
CALCULATE(
    SUM('Fact_Sales'[SalesAmount]),
    FILTER(
        'Fact_Sales',
        'Fact_Sales'[DiscountPercentage] > RELATED('Dim_Product'[MaxAllowedDiscount])
    )
)

Kiro 的黃金準則:

當你的計算邏輯,需要在 FILTERSUMX 等迭代函數的每一列中,比較來自「多」端表格的一個欄位和來自「一」端表格的另一個欄位時,RELATED 就是你唯一的、最強大的武器。

第二部分:RELATEDTABLE —— 你的下游探測器 (從「一」到「多」)

RELATEDTABLE 的真正威力,不是為了顯示數字,而是為了將那個計算出來的數字,轉化為維度表的一個靜態的、可供篩選的「屬性」

當你需要用這個「特徵」來做更進階的分析時,RELATEDTABLE 就變得不可或缺。以下是三個只有用 RELATEDTABLE 建立計算資料行才能輕鬆完成的經典場景:


殺手級場景一:建立基於聚合值的「篩選器 (Slicer)」

  • 商業問題: 「我想在報表上放一個篩選器,讓使用者可以自由地只分析我們的『高價值產品』(例如,歷史總銷售額超過 $1,000,000 的產品)。」
  • 為什麼量值做不到?不能將一個量值 ([Total Sales]) 放入篩選器中。篩選器需要一個實體的「欄位」來運作。

DAX 解決方案 (兩步驟):

第一步:計算出每個產品的靜態屬性。
Dim_Product 表中,使用 RELATEDTABLE 建立計算資料行來獲取總銷售額:

// 計算資料行 1: Product Total Sales
Product Total Sales =
SUMX(
    RELATEDTABLE('Fact_Sales'),
    'Fact_Sales'[SalesAmount]
)

第二步:根據這個屬性進行分類。
繼續在 Dim_Product 表中,建立第二個計算資料行來進行分類:

// 計算資料行 2: Product Value Segment
Product Value Segment =
IF(
    'Dim_Product'[Product Total Sales] > 1000000,
    "高價值產品",
    "一般產品"
)

最終成果:
你現在可以將 [Product Value Segment] 這個欄位拖入篩選器中。當使用者點擊「高價值產品」時,整個報表都會被篩選,只顯示這些頂級產品的表現。


殺手級場景二:將聚合值作為圖表的「座標軸 (Axis)」

  • 商業問題: 「我想製作一張散佈圖,來分析產品的『購買頻次』與『總貢獻額』之間的關係。」
  • 為什麼量值做不到?不能將量值拖曳到散佈圖的 X 軸、Y 軸或大小等區域。這些區域需要的是實體的「欄位」。

DAX 解決方案:

Dim_Product 表中,使用 RELATEDTABLE 建立兩個計算資料行:

// 計算資料行 1: Product Total Sales
Product Total Sales =
SUMX(
    RELATEDTABLE('Fact_Sales'),
    'Fact_Sales'[SalesAmount]
)

// 計算資料行 2: Product Transaction Count
Product Transaction Count =
COUNTROWS(
    RELATEDTABLE('Fact_Sales')
)

最終成果:
你現在可以建立一張散佈圖,將 [Product Transaction Count] 拖到 X 軸,[Product Total Sales] 拖到 Y 軸,[ProductName] 拖到詳細資料。這張圖能極其直觀地將你的產品分為四個象限(高頻高價值、高頻低價值等),這是純量值分析無法企及的洞察深度。


殺手級場景三:進行複雜的「分層與排名」(如 ABC/帕累托分析)

  • 商業問題: 「我需要為所有產品進行 ABC 分析,將貢獻了前 80% 營收的產品標記為 A 級,接下來 15% 的標記為 B 級,剩下 5% 的標記為 C 級。」
  • 挑戰: 這個分析需要先計算出每個產品的總銷售額,然後計算出所有產品的總銷售額,接著計算每個產品的累計銷售額百分比,最後根據百分比進行分類。這是一個複雜的多步驟邏輯。

DAX 解決方案 (計算資料行):

我們將在 Dim_Product 表中,新增一個名為 [ABC Segment] 的計算資料行。

// 在 'Dim_Product' 表中新增此計算資料行
ABC Segment =
VAR ProductSales =
    SUMX(RELATEDTABLE('Fact_Sales'), 'Fact_Sales'[SalesAmount])
VAR AllProductSales =
    CALCULATE(
        SUM('Fact_Sales'[SalesAmount]),
        ALL('Dim_Product')
    )
VAR ProductsWithHigherSales =
    FILTER(
        ALL('Dim_Product'),
        SUMX(RELATEDTABLE('Fact_Sales'), 'Fact_Sales'[SalesAmount]) >= ProductSales
    )
VAR CumulativeSales =
    SUMX(
        ProductsWithHigherSales,
        CALCULATE(SUM('Fact_Sales'[SalesAmount]))
    )
VAR CumulativePercentage =
    DIVIDE(CumulativeSales, AllProductSales)
RETURN
    SWITCH(
        TRUE(),
        CumulativePercentage <= 0.8, "A 級產品",
        CumulativePercentage <= 0.95, "B 級產品",
        "C 級產品"
    )

DAX 引擎的思考流程 (讓我們逐行拆解這門藝術品):

  1. VAR ProductSales = ...
    • 基石! 這裡就是 RELATEDTABLE 發揮作用的地方。對於當前這一列的產品,它會計算出其總銷售額。這個 ProductSales 值將成為後續比較的基準。
  2. VAR AllProductSales = ...
    • 計算所有產品的總銷售額。ALL('Dim_Product') 會移除所有篩選,確保我們得到一個全局的總數,作為計算百分比的分母。
  3. VAR ProductsWithHigherSales = ...
    • 最精妙的一步 (上下文嵌套):
      • 一個比喻: 就像一位經理(外部列上下文)拿著 "iPhone 15" 的業績報告(ProductSales 變數),然後去檔案室,把所有產品的報告(ALL('Dim_Product'))都拿出來,一份一份地看(FILTER 的內部列上下文),只有當看到一份業績不低於手上這份報告的檔案時,才把它抽出來放到一個新的文件夾 (ProductsWithHigherSales) 裡。
      • 這種「內部迭代」能夠引用「外部迭代」的值,是 DAX 中最高級、也最強大的能力之一。
  4. VAR CumulativeSales = ...
    • SUMX 會迭代剛剛建立的那張 ProductsWithHigherSales 虛擬表,將這些「排名更高或相同」的產品的銷售額全部加總起來,得到累計銷售額
  5. VAR CumulativePercentage = ...
    • 用累計銷售額除以所有產品的總銷售額,得到累計百分比
  6. RETURN SWITCH(...)
    • 最後,根據這個累計百分比,為當前這一列的產品打上 "A", "B", 或 "C" 的標籤。

最終成果:
這個看似複雜的公式,會為 Dim_Product 表中的每一行都執行一次。執行完畢後,你就有了一個靜態的、可供篩選的 [ABC Segment] 欄位,這讓後續的所有分析都變得極其簡單和高效。


結論:何時選擇 RELATEDTABLE 計算資料行

當你需要的只是一個在表格中顯示的數字時,請優先使用「量值 (Measure)」。

但是,當你需要將這個數字作為一個固定的屬性,用來進行「篩選」、「分類」、「分層排名」或作為圖表的「座標軸」時,RELATEDTABLE 建立的「計算資料行」就是你唯一的、最強大的選擇。

掌握了這兩個函數的精確戰略定位,你就真正掌握了 DAX 的「關係」精髓,你的資料建模能力也將提升到一個全新的層次。

想了解 DAX 語言的全貌,以及 RELATEDRELATEDTABLE 在整個函數體系中的位置嗎?歡迎回到我們的 DAX 知識中樞:《DAX 函數終極指南:從新手到專家的完整學習路徑》

🚀 從心法到實戰,只差一步

覺得這些技巧很強大,但渴望將它們應用在真實的商業專案中嗎?

在我的 Hahow 好學校線上課程 【Power BI x AI 終極實戰:打造高效數據分析工作流】 中,我們將會深入應用這篇文章提到的所有技巧,親手處理來自政府公開資料庫的真實、混亂的原始數據,並最終打造出三個令人驚豔的商業儀表板。

這不只是一堂工具課,更是一趟將你打造成真正數據專家的旅程。

👉 點擊這裡,立即加入超過千名學員的行列,開啟你的數據自動化之旅!


🎁 想持續升級你的數據決策系統嗎?

覺得這篇文章對你有幫助嗎?這只是個開始。

免費加入,立即解鎖『會員資源中心』 (內含完整電子書、練習檔案與更多專屬內容)!

你將不僅能立即下載排版精美的 【數據分析師的養成心法 (2025 終極指南)】 完整版電子書 (PDF) ,更重要的是,你將開始每週收到我的獨家框架、實踐案例與工具推薦。

讓我們一起,將數據轉化為智慧,打造屬於自己的理想人生。

Read more

《內容電力公司》實戰讀書筆記 (四):從發電廠到電力網,為你的王國建立真正的護城河

《內容電力公司》實戰讀書筆記 (四):從發電廠到電力網,為你的王國建立真正的護城河

讀完《內容電力公司》前幾章,我們已打造了內容事業的「發電廠」。但一座孤立的電廠無法照亮城市。這篇筆記將深入本書的「電網工程篇」(13-16章),探討如何透過建立直接的「訂閱者」關係,來回應職場上那份因價值觀被踐踏而生的痛苦,並策略性地運用 SEO 與社群媒體,為你的王國建立真正的護城河。

By Kiro