DAX 佔比計算的秘密:ALL vs. ALLSELECTED vs. ALLEXCEPT (附練習檔)
你的 DAX 佔比總是算錯嗎?這場混亂的根源,往往來自於對 ALL、ALLSELECTED 和 ALLEXCEPT 的誤解。這篇文章將徹底終結這場混亂,我們將用一個「公司年度業績報告大會」的比喻,讓你一次就搞懂三位不同層級主管(CEO、區域總監、部門主管)的真實視角,並自信地為你的報表,計算出絕對正確的佔比。

你好,我是 Kiro。
在 DAX 的世界裡,計算「佔比」或「百分比」是我們最常執行的任務之一。然而,這個看似簡單的計算,卻是無數 Power BI 新手最頭痛的惡夢。問題永遠不在分子,而在那個讓人捉摸不定的分母。
你是否也曾困惑,為什麼算出來的佔比永遠是 100%?或是當你點下篩選器,佔比的結果卻不如預期?
這場混亂的根源,往往來自於對 DAX 中幾個最強大的上下文修改器——ALL
、ALLSELECTED
和 ALLEXCEPT
的誤解。它們就像三位不同層級的主管,在業績會議上,他們各自關心的「總額」範疇截然不同。
這篇文章,就是要徹底終結這場混亂。我們將用一個「公司年度業績報告大會」的比喻,讓你一次就搞懂這三位主管的真實視角,並自信地為你的報表,計算出絕對正確的佔比。
學習前提: 本文假設你已經理解 DAX 的核心CALCULATE
函數。如果還不熟悉,我強烈建議你先閱讀我們的 《一篇搞懂 Power BI 最強函數:CALCULATE 完全解析》。
🎁 邊讀邊做,學得更快! 我為這篇文章準備了專屬的 Power BI 練習檔。免費訂閱我的電子報,即可立即前往會員資源中心下載!
📂 練習資料包含:
Dim_Product.xlsx
Dim_Region.xlsx
Fact_Sales.xlsx
PBI_DAX_ALL函數實戰_練習檔_V1.pbix
核心商業場景:分析公司年度業績
假設我們正在分析公司的銷售數據,我們的資料模型是一個標準的星型模型,包含 [銷售事實表]
、[產品維度表]
和 [地區維度表]
。

[銷售事實表]
、[產品維度表]
和 [地區維度表]
。我們的基礎量值很簡單:
總銷售額 = SUM('Fact_Sales'[SalesAmount])
現在,讓我們來看看三位不同層級的主管,他們是如何看待「總銷售額」這個分母的。
ALL
:專注產品全局的「產品長 (CPO)」
首先登場的是 ALL
函數。請把它想像成集團的產品長 (Chief Product Officer)。
產品長的視角: 他的核心職責是洞察公司「所有產品線」的整體表現。在業績會議上,當大家正在檢視「亞太區」的業績時(外部篩選器),他會認真聆聽。但當簡報聚焦在「電子產品」這個分類時(圖表內部篩選),為了評估該分類的貢獻,他腦中需要一個基準:「在亞太區,我們『所有產品』的總銷售額是多少?」
ALL
函數的任務是:移除指定資料表或資料行上的「所有」篩選,無論篩選來自圖表內部還是外部。
實戰場景與 DAX 公式
- 報表設定: 頁面上有一個地區篩選器 (
Dim_Region
[RegionName]) 和一個矩陣圖。矩陣圖的資料列放的是Dim_Product
[Category],值放的是[總銷售額]
。 - 使用者操作: 在地區篩選器中選擇了「亞太區」。
為了計算「佔當前所選區域所有產品的百分比」,DAX 公式如下:
第一步:計算分母
總銷售額 ALL Products (產品長視角) =
CALCULATE(
[總銷售額],
ALL('Dim_Product') // 移除【產品維度表】上的所有篩選
)
第二步:計算佔比
佔比 % (vs. 當前區域所有產品) =
DIVIDE(
[總銷售額],
[總銷售額 ALL Products (產品長視角)]
)
計算解析 (以矩陣圖「電子產品」那一列為例):
- 分子
[總銷售額]
的篩選上下文:RegionName = "亞太區"
且Category = "電子產品"
。 - 分母
[總銷售額 ALL Products]
的篩選上下文:CALCULATE
接收到上述上下文後,ALL('Dim_Product')
指令會移除所有來自Dim_Product
表的篩選 (即Category = "電子產品"
被移除),但保留來自Dim_Region
表的篩選。因此,分母的最終上下文是RegionName = "亞太區"
。

ALLSELECTED
:聚焦戰區的「區域總監」
接下來是 ALLSELECTED
。請把它想像成負責特定市場的區域總監。
區域總監的視角: 報告大會上,大家正在看亞太區的業績(透過外部篩選器選定)。當簡報的圖表中只顯示了「電子產品」和「居家用品」時(圖表內部篩選),你問他「總銷售額是多少?」,他會告訴你「在亞太區,『電子產品』和『居家用品』這兩個被選中類別」的總銷售額是多少。他尊重「亞太區」這個外部篩選,也尊重圖表當前「選中了哪些分類」,但他會忽略圖表內部正在計算的某一列(例如只看「電子產品」時)。
ALLSELECTED
函數的任務更為智能:它會移除圖表內部的篩選,但尊重來自圖表外部(如交叉分析篩選器或其他圖表)的篩選。
實戰場景與 DAX 公式
- 報表設定: 頁面上有一個地區篩選器和一個產品分類篩選器 (
Dim_Product
[Category]),以及一個矩陣圖。矩陣圖的資料列放的是Dim_Product
[Category]。 - 使用者操作: 地區篩選器選擇「亞太區」,產品分類篩選器選擇了「電子產品」和「居家用品」。
第一步:計算分母
總銷售額 ALLSELECTED (區域總監視角) =
CALCULATE(
[總銷售額],
ALLSELECTED('Dim_Product'[Category])
)
第二步:計算佔比
佔比 % (vs. 當前所選) =
DIVIDE(
[總銷售額],
[總銷售額 ALLSELECTED (區域總監視角)]
)
計算解析 (以矩陣圖「電子產品」那一列為例):
- 分子
[總銷售額]
的篩選上下文:RegionName = "亞太區"
且Category IN {"電子產品", "居家用品"}
且 (來自矩陣該列)Category = "電子產品"
。 - 分母
[總銷售額 ALLSELECTED]
的篩選上下文:ALLSELECTED
會移除來自矩陣圖內部的篩選 (Category = "電子產品"
),但保留來自外部篩選器的篩選 (RegionName = "亞太區"
和Category IN {"電子產品", "居家用品"}
)。

ALLEXCEPT
:專注本業的「品類經理」
最後,是那位最精準的專家 ALLEXCEPT
。請把它想像成只負責「電子產品」這個品類的經理。
品類經理的視角: 他的眼中只有「電子產品」。當你在矩陣圖中,指著「iPhone 15 Pro」(某個特定產品)那一列問他總額時,他會忽略「iPhone 15 Pro」這個細項,然後告訴你整個「電子產品」品類的總銷售額。他會移除所有產品相關的篩選,只保留「產品分類」這一層的篩選。
ALLEXCEPT
函數的任務像一位外科醫生:移除指定資料表上的所有篩選,除了你明確指定要保留的那些欄位。
實戰場景與 DAX 公式
- 報表設定: 一個矩陣圖,資料列有兩層階層:
Dim_Product
[Category] 和Dim_Product
[ProductName]。 - 使用者操作: 展開「電子產品」分類。
第一步:計算分母
分類總銷售額 ALLEXCEPT (品類經理視角) =
CALCULATE(
[總銷售額],
ALLEXCEPT(
'Dim_Product',
'Dim_Product'[Category] // 保留'Category'欄位的篩選
)
)
第二步:計算佔比
佔比 % (vs. 所屬分類) =
DIVIDE(
[總銷售額],
[分類總銷售額 ALLEXCEPT (品類經理視角)]
)
計算解析 (以矩陣圖「iPhone 15 Pro」那一列為例):
- 分子
[總銷售額]
的篩選上下文:Category = "電子產品"
且ProductName = "iPhone 15 Pro"
。 - 分母
[分類總銷售額 ALLEXCEPT]
的篩選上下文:ALLEXCEPT
指令會移除Dim_Product
表上的所有篩選 (Category
和ProductName
),但唯獨豁免了Category
欄位。因此,ProductName = "iPhone 15 Pro"
的篩選被移除了,但Category = "電子產品"
的篩選被保留下來。

決策框架:一張表搞懂三位主管
比較維度 | ALL | ALLSELECTED | ALLEXCEPT |
---|---|---|---|
核心比喻 | 產品長 (CPO) | 區域總監 | 品類經理 |
移除的篩選 | 指定表格上的所有篩選 | 僅圖表內部的篩選 | 指定表格上的所有篩選,除了... |
尊重的篩選 | 未被 ALL 指定的其他表格 | 圖表外部的篩選 | ALLEXCEPT 中指定的欄位 |
回答的問題 | 「佔『當前區域所有產品』的百分比?」 | 「佔『當前所選』的百分比?」 | 「佔『所屬分類』的百分比?」 |
常見用途 | 計算佔模型總計或跨分類的比例。 | 最常用的佔比計算,能與篩選器互動。 | 計算佔父層級小計的比例。 |
結論:選擇你想要的「總數」
ALL
、ALLSELECTED
與 ALLEXCEPT
的選擇,本質上是在回答一個問題:你希望你的分母,是相對於哪個「總數」?
- 想要相對於某個維度全局的總數(例如,所有產品)?請派出「產品長」
ALL
。 - 想要相對於使用者當前篩選出的那個動態總數?請派出「區域總監」
ALLSELECTED
。 - 想要相對於某個分類的父層級小計?請派出那位最專業的「品類經理」
ALLEXCEPT
。
掌握了這三位主管的視角,你就掌握了 DAX 佔比計算的所有秘密。你將能更自信地構建出靈活、準確、且真正符合商業需求的動態報表。
🚀 從心法到實戰,只差一步
覺得這些技巧很強大,但渴望將它們應用在真實的商業專案中嗎?
在我的 Hahow 好學校線上課程 【Power BI x AI 終極實戰:打造高效數據分析工作流】 中,我們將會深入應用這篇文章提到的所有技巧,親手處理來自政府公開資料庫的真實、混亂的原始數據,並最終打造出三個令人驚豔的商業儀表板。
這不只是一堂工具課,更是一趟將你打造成真正數據專家的旅程。
👉 點擊這裡,立即加入超過千名學員的行列,開啟你的數據自動化之旅!
🎁 想持續升級你的數據決策系統嗎?
覺得這篇文章對你有幫助嗎?這只是個開始。
免費加入,立即解鎖『會員資源中心』 (內含完整電子書、練習檔案與更多專屬內容)!
你將不僅能立即下載排版精美的 【數據分析師的養成心法 (2025 終極指南)】 完整版電子書 (PDF) ,更重要的是,你將開始每週收到我的獨家框架、實踐案例與工具推薦。
讓我們一起,將數據轉化為智慧,打造屬於自己的理想人生。