DAX 篩選上下文 (Filter Context) 深度解析
篩選上下文 (Filter Context) 是 DAX 最核心也最令人困惑的概念。如果你曾因 DAX 公式結果不符預期而感到挫折,這篇文章就是你的終極說明書。我們將透過視覺化示意圖,帶你徹底搞懂篩選指令的來源、如何在資料模型中傳播,以及 CALCULATE 如何像總司令般主宰一切。掌握它,你將從公式的使用者,蛻變為邏輯的設計師。

你好,我是 Kiro。
在《DAX 函數終極指南》中,我們將「篩選上下文 (Filter Context)」比喻為一個看不見的「超級篩選框」。這個概念,毫無疑問是整個 DAX 語言中最核心、最重要、也最讓新手感到困惑的基石。
如果你曾經寫出一個看似正確、結果卻完全不對的 DAX 公式,十之八九,是你和 DAX 引擎對於當下「篩選上下文」的理解出現了偏差。
這篇文章,就是你的「篩選上下文」使用說明書。我們將不再只滿足於知道「有」這個篩選框,而是要徹底搞懂:
- 這個篩選框裡的指令清單究竟從何而來?
- 篩選指令如何在你的資料模型中像水一樣流動?
CALCULATE
又是如何像一位總司令一樣,對這份指令清單發號施令?
掌握了它,你將不再是盲目地寫公式,而是在與 DAX 引擎進行一場清晰、可預測的對話。
第一部分:指令的源頭 —— 篩選上下文從何而來?
篩選上下文並非單一來源,它是一份由報表上所有元素共同擬定的動態指令清單。DAX 引擎在計算任何一個量值之前,都會先仔細閱讀這份清單。
其指令主要來自三個地方:
- 報表級篩選器 (Slicers & Filters):
這是最明顯的指令來源。你在頁面上放置的交叉分析篩選器(例如年份、地區),或是右側篩選窗格中的設定,都會直接成為篩選上下文的一部分。
- 圖表間的交叉篩選 (Cross-Filtering):
當你在報表上點擊橫條圖的橫條時,這個動作會立刻向頁面上的其他所有圖表廣播一條篩選指令:「嘿,現在只看這個橫條對應的數據!」這也是篩選上下文的動態來源。
- 圖表本身的「座標」(Rows, Columns, Axis, Legend):
這是最關鍵、也最容易被忽略的指令來源。 一個視覺效果的結構本身,就在不斷地產生篩選上下文。
這個過程可以用以下結構圖來表示:
篩選上下文的構成
來源1: 篩選器 🗓️
指令: 年份 = 2017
來源2: 矩陣圖座標 ▦
指令 (列): 地區 = "北區"
指令 (欄): 分類 = "服飾"
來源3: 交叉篩選 📊
指令: ...
📝 最終的「篩選上下文」
一份完整的指令清單:
- 年份 = 2017
- 地區 = "北區"
- 產品分類 = "家居"
- ...
第二部分:篩選的傳播 —— 數據如何在模型中流動 (Filter Propagation)
理解了指令的來源後,下一個核心問題是:當我在一張表(例如 產品維度表
)下達指令時,另一張表(例如 銷售事實表
)是如何「聽懂」的?
答案就是透過你在資料模型中建立的「關係 (Relationship)」。
請把「關係」想像成數據在模型中流動的「單向水管」。
在一個設計良好的星型模型中,篩選的水流永遠是從「一」的那端(維度表),流向「多」的那端(事實表)。
這個傳播過程的結構如下:
維度表 (Dim_Product)
Category = "電子產品"
事實表 (Fact_Sales)
只剩下「電子產品」的銷售紀錄
這個由「一」到「多」的單向流動,是 Power BI 高效能與可預測性的基礎。
➡️ 深度學習: 何時該打破規則使用「雙向」篩選?又該如何用「橋接表」處理複雜的多對多關係?我們將在專文中深入探討:《一對多 vs. 多對多關係:Power BI 建模的黃金準則》
第三部分:CALCULATE
—— 篩選上下文的唯一主宰
現在,我們終於可以回到 DAX 的王者 CALCULATE
。如果說篩選上下文是一份「指令清單」,那麼 CALCULATE
就是唯一有權力「修改」這份清單的函數。
假設我們正在分析以下這個公式,CALCULATE
的運作模式,可以理解為一個「三步驟的指令修改流程」:
總銷售額_ALL = CALCULATE([總銷售額], ALL('商品表'))
CALCULATE 運作流程
① 接收原始的篩選上下文
年份 = 2017
地區 = "北區"
產品分類 = "家居"
② 主宰者 CALCULATE 介入 ⚙️
參數: ALL('Dim_Product')
行動: 移除所有來自 `Dim_Product` 的指令
③ 產生用於計算的「新」篩選上下文
年份 = 2024
地區 = "北區"
CALCULATE
接收原始的上下文,根據你給的參數(例如 ALL
、FILTER
或簡單的篩選條件)對其進行新增、覆蓋或移除,然後在這個全新的、臨時的上下文中執行計算。
➡️ 深度學習: 要深入理解CALCULATE
的三大超能力,以及ALL
,ALLSELECTED
等上下文修改器的細微差別,請務必閱讀我們的核心指南:《一篇搞懂 Power BI 最強函數:CALCULATE 完全解析》
結論:像 DAX 引擎一樣思考
篩選上下文不再神秘。它就是一份動態的、由報表所有元素共同決定的、透過關係來傳播的「篩選指令清單」。
理解了這個核心機制,你就能從根本上明白 DAX 為何如此運作。你寫的每一行 CALCULATE
公式,都將不再是碰運氣的猜測,而是一次精準、有目的的「上下文操作」。
這,就是從「公式的使用者」蛻變為「邏輯的設計師」的關鍵一步。
🚀 從心法到實戰,只差一步
恭喜你,你已經掌握了 DAX 的完整思維藍圖!如果你渴望將這些心法,轉化為可以放進作品集的亮眼專案,我誠摯地邀請你加入我在 Hahow 好學校的線上課程。
【Power BI x AI 終極實戰:打造高效數據分析工作流】
✨ 超過 5 小時的 DAX 專門單元,帶你逐行拆解 DAX 在真實商業專案中的應用。
🎯 親手實作三大商業儀表板,將理論化為你的實戰超能力。
💬 專屬學員社團,由我親自為你解答學習路上的所有疑惑。
這不只是一堂工具課,更是一趟將你打造成真正數據專家的旅程。
👉 點擊這裡,立即加入超過千名學員的行列,將 DAX 從夢魘變為超能力!
🎁 想持續升級你的數據決策系統嗎?
覺得這篇文章對你有幫助嗎?這只是個開始。
免費加入,立即解鎖『會員資源中心』 (內含完整電子書、練習檔案與更多專屬內容)!
你將不僅能立即下載排版精美的 【數據分析師的養成心法 (2025 終極指南)】 完整版電子書 (PDF) ,更重要的是,你將開始每週收到我的獨家框架、實踐案例與工具推薦。
讓我們一起,將數據轉化為智慧,打造屬於自己的理想人生。