DAX 列上下文 (Row Context) 完全指南:解鎖迭代的秘密

覺得 DAX 中的 SUMX 和計算資料行難以理解?關鍵就在「列上下文 (Row Context)」。本指南將用放大鏡的比喻,帶你徹底搞懂 DAX 引擎如何進行逐行運算,並深入解析 DAX 中最神奇、也最強大的技巧:「上下文轉換」。掌握它,你就能真正駕馭 CALCULATE 與迭代函數的威力。

DAX 列上下文 (Row Context) 完全指南:解鎖迭代的秘密

你好,我是 Kiro。

《DAX 函數終極指南》中,我們深入探討了 DAX 的兩大核心環境。如果說「篩選上下文」是決定要計算哪些資料列的「超級篩選框」,那麼它的雙胞胎兄弟——「列上下文」,就是一把在特定一列上進行精細操作的「放大鏡」。

如果你曾經疑惑:

  • 為什麼 SUM('銷售表'[數量] * '銷售表'[單價]) 會報錯,但 SUMX 就可以?
  • 為什麼在計算資料行裡用 SUM,結果每一列的數字都一樣?

那麼,你遇到的正是「列上下文」的魔力與陷阱。

這篇文章,就是你的列上下文終極說明書。我們將用最直觀的比喻,帶你徹底搞懂這個概念,並學會 DAX 中最重要的高級技巧:「上下文轉換」。


第一部分:到底什麼是列上下文?—— 放大鏡的比喻

忘掉所有生硬的定義,記住這個畫面:

列上下文 (Row Context) 就像一把放大鏡,它強迫 DAX 引擎一次只專注於你資料表中的「單一一列」。

當這把放大鏡停在某一列上時:

  • 它的視野很「寬」: 它可以清楚地看到這一列中所有欄位的值(例如,這一列的 [數量] 是 5,[單價] 是 100)。
  • 同時它的視野也很「窄」: 它完全看不到其他任何一列的資料。它不知道上一列的數量是多少,也不知道下一列的單價是多少。

列上下文的核心任務只有一個:迭代 (Iteration),也就是逐行處理。

列上下文 vs. 篩選上下文:一場「放大鏡」與「篩網」的對決

這是 DAX 新手最容易混淆的地方。讓我們用一張表來徹底釐清它們的區別:

核心概念對決

比較維度 列上下文 (Row Context) 篩選上下文 (Filter Context)
核心比喻 放大鏡 🔍 篩網 / 篩選框 🥅
核心動作 迭代 (Iterating) - 逐行掃描 篩選 (Filtering) - 圈選符合條件的資料列
作用範圍 單一一列 (A Single Row) 多個資料列 (A Table of Rows)
主要出現地 計算資料行、迭代函數 (`...X`) 量值 (Measures)

簡單來說,篩選上下文決定了你要處理的數據範圍(例如,只看北區的銷售數據),而列上下文則是在這個範圍內(或整個表)進行逐行運算


第二部分:列上下文在哪裡出沒?

列上下文並不像篩選上下文那樣無處不在。它只會在你明確要求「逐行處理」時才會被啟動。主要有兩個場景:

場景一:計算資料行 (Calculated Columns)

這是最自然、最常見的列上下文。當你在資料表中新增一個計算資料行時,DAX 會自動為每一列都執行一次你的公式。

LineTotal (新計算資料行) = 'Fact_Sales'[Quantity] * 'Fact_Sales'[UnitPrice]
OrderID Quantity UnitPrice LineTotal (新計算資料行)
ORD-001 3 50 150 ⬅️ (🔍 當前列上下文: 3 * 50)
ORD-002 2 30 60
ORD-003 5 100 500

DAX 引擎逐行掃描,在每一列的「列上下文」中執行乘法。

場景二:迭代函數 (Iterator Functions)

這是 DAX 更強大、也更核心的應用。所有以 "X" 結尾的函數(SUMX, AVERAGEX, MAXX, FILTER 等)都被稱為迭代函數。

它們被設計出來的目的,就是在量值 (Measure) 的計算過程中,手動創建一個臨時的列上下文。

示意圖:SUMX 的運作流程

SUMX 在記憶體中創建臨時的列上下文,逐行計算後再加總。

➡️ Step 1: 輸入資料表
QtyPrice
350
230
5100
➡️
Step 2: 記憶體中逐行計算
dax
總銷售額 = 
SUMX(
    '銷售表',
    '銷售表'[Qty] * '銷售表'[Price]
)
(臨時計算結果)
150
60
500
➡️
Step 3: 最終加總
710
➡️ 深度學習: 想更深入了解 SUMSUMX 的差異與應用場景嗎?請閱讀我們的專文:《SUM vs. SUMX:一篇搞懂 Power BI 的迭代函數》

第三部分:最重要的概念:上下文轉換 (Context Transition)

現在,準備好迎接 DAX 中最神奇、也最強大的概念:「上下文轉換」。它回答了一個終極問題:

如果我正處於「列上下文」(例如,在一個計算資料行中),但我需要進行一次「篩選上下文」的操作(例如,計算一個聚合值),該怎麼辦?

CALCULATE 函數在這裡的唯一任務,就是執行「上下文轉換」。它能將當前「列上下文」中的值,轉換成一個等效的「篩選上下文」。

示意圖:資料模型關係

DAX 透過「一對多」關係,將篩選從維度表傳播到事實表。

Dim_Product (維度表)
ProductID (PK) ProductName
P-001 iPhone 15
P-002 Galaxy S24
"一" 端
1
⬇️
(篩選傳播)
*
Fact_Sales (事實表)
OrderID ProductID (FK) SalesAmount
ORD-101P-00130000
ORD-102P-00215000
ORD-105P-00130000
"多" 端

Step 1: DAX 處於 Dim_Product 表的某一列 (列上下文 🔍)

Product Sales (New Column) = 
CALCULATE(
    SUM('Fact_Sales'[SalesAmount])
)
ProductIDProductName...Product Sales (New Column)
P-001iPhone 15...正在計算...

Step 2: CALCULATE 提取該列的值,並將其「轉換」為篩選器

列上下文的值 (`ProductID = 'P-001'`)
⬇️ CALCULATE 轉換 ⬇️
新的篩選上下文 (`FILTER('Dim_Product', [ProductID] = "P-001")`) 🥅

CALCULATE 將單一一列的「列上下文」,轉化為篩選整個模型的「篩選上下文」。

Step 3: 新的篩選上下文作用於 Fact_Sales

`Fact_Sales` 被篩選後只剩下 `ProductID = 'P-001'` 的資料列
OrderIDProductIDSalesAmount
ORD-101P-00130000
ORD-105P-00130000
ORD-102P-00215000

Step 4: SUM 在被篩選後的表上進行計算,返回最終結果

ProductIDProductName...Product Sales (New Column)
P-001iPhone 15...60000

這就是上下文轉換的威力。CALCULATE 就像一座橋樑,讓你能從逐行掃描的「列上下文」,跳轉到聚合篩選的「篩選上下文」,從而實現極其複雜和強大的計算。


結論:掌握兩種上下文,駕馭 DAX 全局

DAX 的世界,就是由「篩選上下文」和「列上下文」這兩大核心規則所統治的。

  • 篩選上下文告訴你計算的範圍
  • 列上下文讓你在這個範圍內(或整個表)進行逐行處理
  • CALCULATE 則是讓你能夠在這兩種強大環境之間自由轉換的唯一鑰匙。

理解它們的區別,並學會駕馭它們之間的轉換,你就真正掌握了像 DAX 引擎一樣思考的能力。這不僅是技巧的提升,更是思維的升維。


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

恭喜你,你已經掌握了 DAX 的完整思維藍圖!如果你渴望將這些心法,轉化為可以放進作品集的亮眼專案,我誠摯地邀請你加入我在 Hahow 好學校的線上課程。

【Power BI x AI 終極實戰:打造高效數據分析工作流】
超過 5 小時的 DAX 專門單元,帶你逐行拆解 DAX 在真實商業專案中的應用。
🎯 親手實作三大商業儀表板,將理論化為你的實戰超能力。
💬 專屬學員社團,由我親自為你解答學習路上的所有疑惑。

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

👉 點擊這裡,立即加入超過千名學員的行列,將 DAX 從夢魘變為超能力!


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

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

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

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

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

Read more

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

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

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

By Kiro