DAX 篩選上下文 (Filter Context) 深度解析

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

DAX 篩選上下文 (Filter Context) 深度解析

你好,我是 Kiro。

《DAX 函數終極指南》中,我們將「篩選上下文 (Filter Context)」比喻為一個看不見的「超級篩選框」。這個概念,毫無疑問是整個 DAX 語言中最核心、最重要、也最讓新手感到困惑的基石。

如果你曾經寫出一個看似正確、結果卻完全不對的 DAX 公式,十之八九,是你和 DAX 引擎對於當下「篩選上下文」的理解出現了偏差。

這篇文章,就是你的「篩選上下文」使用說明書。我們將不再只滿足於知道「有」這個篩選框,而是要徹底搞懂:

  • 這個篩選框裡的指令清單究竟從何而來?
  • 篩選指令如何在你的資料模型中像水一樣流動?
  • CALCULATE 又是如何像一位總司令一樣,對這份指令清單發號施令?

掌握了它,你將不再是盲目地寫公式,而是在與 DAX 引擎進行一場清晰、可預測的對話。


第一部分:指令的源頭 —— 篩選上下文從何而來?

篩選上下文並非單一來源,它是一份由報表上所有元素共同擬定的動態指令清單。DAX 引擎在計算任何一個量值之前,都會先仔細閱讀這份清單。

其指令主要來自三個地方:

  1. 報表級篩選器 (Slicers & Filters):

這是最明顯的指令來源。你在頁面上放置的交叉分析篩選器(例如年份、地區),或是右側篩選窗格中的設定,都會直接成為篩選上下文的一部分。

0:00
/0:13
  1. 圖表間的交叉篩選 (Cross-Filtering):

當你在報表上點擊橫條圖的橫條時,這個動作會立刻向頁面上的其他所有圖表廣播一條篩選指令:「嘿,現在只看這個橫條對應的數據!」這也是篩選上下文的動態來源。

0:00
/0:09
  1. 圖表本身的「座標」(Rows, Columns, Axis, Legend):

這是最關鍵、也最容易被忽略的指令來源。 一個視覺效果的結構本身,就在不斷地產生篩選上下文。

0:00
/0:08

這個過程可以用以下結構圖來表示:

篩選上下文的構成

來源1: 篩選器 🗓️

指令: 年份 = 2017

來源2: 矩陣圖座標 ▦

指令 (列): 地區 = "北區"

指令 (欄): 分類 = "服飾"

來源3: 交叉篩選 📊

指令: ...

⬇️

📝 最終的「篩選上下文」

一份完整的指令清單:

  • 年份 = 2017
  • 地區 = "北區"
  • 產品分類 = "家居"
  • ...

第二部分:篩選的傳播 —— 數據如何在模型中流動 (Filter Propagation)

理解了指令的來源後,下一個核心問題是:當我在一張表(例如 產品維度表)下達指令時,另一張表(例如 銷售事實表)是如何「聽懂」的?

答案就是透過你在資料模型中建立的「關係 (Relationship)」。

請把「關係」想像成數據在模型中流動的「單向水管」。

在一個設計良好的星型模型中,篩選的水流永遠是從「」的那端(維度表),流向「」的那端(事實表)。

這個傳播過程的結構如下:


維度表 (Dim_Product)
指令下達:
Category = "電子產品"
事實表 (Fact_Sales)
結果呈現:
只剩下「電子產品」的銷售紀錄
篩選水流 (Filter Flow)
(1對多關係)

這個由「一」到「多」的單向流動,是 Power BI 高效能與可預測性的基礎。

➡️ 深度學習: 何時該打破規則使用「雙向」篩選?又該如何用「橋接表」處理複雜的多對多關係?我們將在專文中深入探討:《一對多 vs. 多對多關係:Power BI 建模的黃金準則》

第三部分:CALCULATE —— 篩選上下文的唯一主宰

現在,我們終於可以回到 DAX 的王者 CALCULATE。如果說篩選上下文是一份「指令清單」,那麼 CALCULATE 就是唯一有權力「修改」這份清單的函數。

假設我們正在分析以下這個公式,CALCULATE 的運作模式,可以理解為一個「三步驟的指令修改流程」:

總銷售額_ALL = CALCULATE([總銷售額], ALL('商品表'))
0:00
/0:10

CALCULATE 運作流程

① 接收原始的篩選上下文

  • 年份 = 2017
  • 地區 = "北區"
  • 產品分類 = "家居"
⬇️

② 主宰者 CALCULATE 介入 ⚙️

參數: ALL('Dim_Product')

行動: 移除所有來自 `Dim_Product` 的指令

⬇️

③ 產生用於計算的「新」篩選上下文

  • 年份 = 2024
  • 地區 = "北區"

CALCULATE 接收原始的上下文,根據你給的參數(例如 ALLFILTER 或簡單的篩選條件)對其進行新增、覆蓋或移除,然後在這個全新的、臨時的上下文中執行計算。

➡️ 深度學習: 要深入理解 CALCULATE 的三大超能力,以及 ALL, ALLSELECTED 等上下文修改器的細微差別,請務必閱讀我們的核心指南:《一篇搞懂 Power BI 最強函數:CALCULATE 完全解析》

結論:像 DAX 引擎一樣思考

篩選上下文不再神秘。它就是一份動態的、由報表所有元素共同決定的、透過關係來傳播的「篩選指令清單」

理解了這個核心機制,你就能從根本上明白 DAX 為何如此運作。你寫的每一行 CALCULATE 公式,都將不再是碰運氣的猜測,而是一次精準、有目的的「上下文操作」。

這,就是從「公式的使用者」蛻變為「邏輯的設計師」的關鍵一步。


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

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

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

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

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


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

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

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

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

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

Read more

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

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

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

By Kiro