一篇搞懂 Power BI 最強函數:CALCULATE 完全解析 (附實戰練習檔)
覺得 DAX CALCULATE 函數很難嗎?這篇終極指南將用「超級篩選器」的簡單比喻,帶你徹底搞懂它新增、覆蓋與移除篩選的三大超能力。文章附有免費實戰練習檔,讓你從此駕馭 DAX,不再害怕!

你好,我是 Kiro。
在深入 DAX 的世界前,如果你對 Power BI 的核心概念與三大模組還不熟悉,我強烈建議你先閱讀《Power BI 是什麼?2025 年終極指南》,它會為你打下最穩固的基礎。
如果你曾在學習 Power BI DAX 的路上感到挫折,相信我,你並不孤單。而在那條陡峭的學習曲線上,有一座幾乎所有人初次見面都會感到恐懼的大山,它的名字,叫做 CALCULATE
。
網路上有無數文章告訴你,它是 DAX 中最重要、最強大的函數。甚至流傳著一句話:
「學會了 CALCULATE,你就學會了 DAX 的一半。」
這句話一點也不誇張。因為 CALCULATE
正是 DAX 引擎的核心,是你從一個只會拖拉欄位的「拉圖表專員」,蛻變為能洞悉數據背後真相的「數據分析師」的關鍵鑰匙 🔑。
但問題是,大多數教學都把它講得太複雜、太學術了。什麼「篩選上下文的轉換」、「擴展表」、「列上下文轉移」... 這些名詞足以勸退 90% 的新手。
這篇文章的目標只有一個:徹底撕掉 CALCULATE
可怕的標籤。我們將用最簡單的比喻,帶你理解它的核心運作邏輯,並掌握它足以改變遊戲規則的三大超能力。
🎁 邊讀邊做,學得更快!
我為這篇文章準備了一份專屬的 Power BI 練習檔 (.pbix
),內含所有範例資料。免費訂閱我的電子報,即可立即前往會員資源中心下載,跟著文章一起動手操作!
前置觀念:我們先聊聊什麼是「篩選上下文 (Filter Context)」
在我們召喚 CALCULATE
這隻神獸之前,必須先理解它所處的「棲息地」——也就是 Power BI 的篩選上下文 (Filter Context)。
忘掉所有複雜的定義,你只需要記住這個極簡的比喻:
Power BI 報表上的每一個數字,都活在一個被下了多重指令的「超級篩選框」裡。

想像上面這張圖。當你看著「北區」對應「服飾」的那個銷售額數字時,那個數字背後其實有一張隱形的「指令清單」:
- 指令1 (來自交叉分析篩選器): 「只看 2024 年的訂單!」
- 指令2 (來自矩陣的『資料列』): 「只看『北區』的訂單!」
- 指令3 (來自矩陣的『資料行』): 「只看『服飾』類別的產品!」
Power BI 引擎會拿著這張完整的指令清單,去你的原始資料表中,篩選出完全符合所有指令的數據,然後才進行加總。這個由所有外部篩選器、圖表行列共同組成的「指令清單」,就是篩選上下文。
記住這點: 在沒有 CALCULATE
的情況下,你的所有量值 (Measure) 都會 100% 聽話地遵守這個「篩選框」裡的每一條指令。
而 CALCULATE
的出現,就是為了打破這個規則。
CALCULATE 的三大超能力
CALCULATE
的語法很簡單:
CALCULATE( <你要計算的運算式>, <篩選條件1>, <篩選條件2>, ... )
它的第一個參數是你原本的量值(例如 [總銷售額]
),而後面所有的參數,都是你對那個「超級篩選框」下的新指令。這些新指令,會讓它展現出三種強大的超能力。
超能力一:新增篩選 (Add a Filter) 🚀
這是 CALCULATE
最基本、也最直觀的能力:在現有的篩選框裡,再增加一條新的指令。
假設老闆想知道:「我們所有通路在 2024 年,藍色產品的總銷售額是多少?」
如果沒有 CALCULATE
,你可能需要把「顏色」這個欄位也拉到交叉分析篩選器,然後手動點選「藍色」。但 CALCULATE
讓你可以在量值裡直接寫死這個條件:
藍色產品銷售額 =
CALCULATE(
[總銷售額],
'Dim_Products'[Color] = "藍色"
)
當你把這個量值放到報表上時,它會發生什麼事?

它會先繼承原本「超級篩選框」裡的所有指令(例如:2024 年、北區),然後,它會再額外加上一條我們寫死的新指令:「而且,產品顏色必須是藍色!」。
這就是「新增篩選」,簡單直接,威力強大。
超能力二:覆蓋/修改篩選 (Overwrite a Filter) 👑
現在,準備好見證 CALCULATE
最霸道、也最神奇的地方了。
如果我們下的新指令,跟「超級篩選框」裡已有的指令發生衝突,會發生什麼事?
答案是:CALCULATE
的指令會獲勝!
假設你的報表長這樣,你已經在交叉分析篩選器上選擇了「藍色」:

現在,你想新增一個指標,叫做「紅色產品的銷售額」,無論外部怎麼篩選,它都只計算紅色的部分。你可以這樣寫:
紅色產品銷售額 =
CALCULATE(
[總銷售額],
'Dim_Products'[Color] = "紅色"
)
當你把這個量值放進來,神奇的事情發生了:

看到了嗎?儘管整個報表的「篩選框」已經被下了「只看藍色」的指令,但 [紅色產品銷售額]
這個量值完全無視它。
它的內心戲是: 「哦,外部篩選器說要看『藍色』?但我老闆 CALCULATE
說了,要看『紅色』。聽老闆的!」
CALCULATE
的篩選條件會覆蓋掉來自外部、針對同一個欄位的篩選條件。這個能力是進行各種複雜比較分析的基礎,例如計算特定產品線對整體營收的貢獻,而不需要更動使用者的篩選。
超能力三:移除篩選 (Remove a Filter) 💥
CALCULATE
不僅能新增和修改指令,它甚至能直接「撕掉」篩選框裡的某條指令。而幫助它完成這件事的,就是它的最佳拍檔:ALL
函數。
最經典的商業問題:「各產品佔總銷售額的百分比是多少?」
這個指標的公式是:該產品的銷售額 / 所有產品的總銷售額
。
「該產品的銷售額」很簡單,就是 [總銷售額]
這個量值。但「所有產品的總銷售額」這個分母該怎麼算?
看看下面這張圖:

當計算「服飾」那一列時,篩選框裡的指令是「只看服飾」。如果我們只用 [總銷售額]
當分母,那結果也會是 $74,373,276,佔比永遠是 100%。
我們需要一個量值,它能無視「產品類別」這個篩選指令,永遠返回所有產品的總銷售額。這就是 CALCULATE
+ ALL
的用武之地:
所有類別總銷售額 =
CALCULATE(
[總銷售額],
ALL('Dim_Products'[Category])
)
ALL('Dim_Products'[Category])
的作用就像一張「豁免卡」,它告訴 CALCULATE
:「嘿,把篩選框裡所有關於『產品類別』的指令都暫時撕掉,然後再計算!」
於是,無論在哪一列,這個量值都能正確地計算出分母 $382,225,110,讓我們能完成佔比的計算。
一個常見的錯誤與提醒
你可能會發現,CALCULATE
的篩選參數寫法很多樣,例如 'Dim_Products'[Color] = "藍色"
,或是 ALL('Dim_Products'[Category])
。
這裡有一個進階但非常重要的觀念:CALCULATE
的所有篩選參數,本質上都是「表函數 (Table Functions)」。
'Dim_Products'[Color] = "藍色"
其實是一個語法糖 (syntactic sugar),它在背後會被轉換成FILTER(ALL('Dim_Products'[Color]), 'Dim_Products'[Color] = "藍色")
。ALL()
本身就是一個會返回一張「移除了篩選的表」的表函數。
你現在不需要完全搞懂這背後的複雜機制,但請記住這個概念。當你未來遇到更複雜的篩選需求,需要用到 FILTER
、KEEPFILTERS
等函數時,這個觀念會幫助你更快地理解它們是如何與 CALCULATE
協同作戰的。
結論:開始駕馭你的超級篩選器
讓我們回到開頭的那句話:「學會了 CALCULATE,你就學會了 DAX 的一半。」
現在,你應該能體會到它的真實含義了。CALCULATE
賦予了你修改、覆蓋和移除「篩選上下文」的終極權力。掌握了它,你就能:
- 新增條件,進行更精細的分析。
- 覆蓋條件,進行不受外部干擾的特定比較。
- 移除條件,計算佔比、排名等高價值的商業指標。
CALCULATE
正是你從被動地「拉圖表」,進化到主動地「用數據回答商業問題」的關鍵鑰匙。它將解放你的分析潛力,讓你真正開始用數據創造價值。
下一步:從理論到實戰
🎁 下載練習檔,親手操作!
紙上談兵終覺淺,絕知此事要躬行。為了讓你真正掌握 CALCULATE
的威力,我已經準備好了這篇文章的完整 Power BI 練習檔 (.pbix
),包含所有範例資料和 DAX 量值。
立即免費訂閱我的「人生算法」實踐筆記,即可前往會員資源中心下載練習檔!
🚀 準備好接受更深度的挑戰了嗎?
理解 CALCULATE
的三大超能力只是第一步。在真實的商業世界裡,你會遇到更複雜的場景,需要將這些能力與時間智慧、迭代函數等結合起來。
如果你已經準備好,想將這套「超級篩選器」應用在真實的商業專案中,我誠摯地邀請你加入我在 Hahow 好學校的線上課程。
【Power BI x AI 終極實戰:打造高效數據分析工作流】
在這門課程中,我們有超過 5 小時的 DAX 專門單元,會帶你逐行拆解 CALCULATE
在「潛在旅客分析」、「人力資源分析」等真實專案中的應用。這不只是一堂工具課,更是一趟將你打造成真正數據專家的旅程。