DAX函數從A到Z——一個都不能少

今兒我們要介紹一個篩選器函數「ALL」函數。ALL函數的作用是「返回表中的所有行或者返回列中的所有值,同時忽略可能已應用的任何篩選器。 此函數可用於清除篩選器並對表中的所有行創建計算」。ALL函數只需要填入你不想要被篩選器篩選的欄位就可以了。

例如,我們需要計算每個品類的銷售額在總銷售額中的佔比。我們希望達到的效果是分子位置上是經過品類篩選過的銷售額,分母位置上是不被篩選的全部銷售額。

理清需求之後,我們就可以開始寫公式了

【銷售佔比 = DIVIDE(SUM("銷售"[銷售額]),CALCULATE(SUM("銷售"[銷售額]),ALL("銷售"[銷售額])))】

上面的公式得到以下結果:

我們可以明顯的發現這個結果是錯的。

這是因為在上面的使用過程中,我們沒有搞清楚ALL函數究竟是如何作用的。阿航面的錯誤示範確實是我在接觸ALL函數最初所犯的錯誤。

ALL函數是清除篩選器對錶或者對某列數據的作用的,所以在使用ALL函數時,我們需要搞清楚需要清除的篩選條件究竟是什麼,而不是使用ALL來直接確保某一列數據全部出現。

所以關於上述案例ALL函數正確的使用方法是,使用ALL函數清除對「品類」的篩選。

【銷售佔比 = DIVIDE(SUM("銷售"[銷售額]),CALCULATE(SUM("銷售"[銷售額]),ALL("銷售"[品類])))】

上面的公式得到以下結果:

這樣就得到我們想要的正確的結果了。

如果問題情境改為,計算每個年度的銷售額占近三年銷售總額的佔比。那麼我們就只需要使用ALL函數清除對「年度」的篩選。

【銷售佔比 = DIVIDE(SUM("銷售"[銷售額]),CALCULATE(SUM("銷售"[銷售額]),ALL("銷售"[年度])))】

上面的公式得到以下結果:

ALL函數使用的重點在於理解ALL函數用於清除某個篩選器的篩選作用,而不是直接使某一列或某張表的數據全部出現,所以在ALL函數里的欄位是需要被清除的篩選條件欄位。

Read after me!

ALL函數里的欄位是需要被清除的篩選條件欄位!

ALL函數里的欄位是需要被清除的篩選條件欄位!!

ALL函數里的欄位是需要被清除的篩選條件欄位!!!

以上,再見!

*Power Pivot工坊原創文章,轉載請註明出處。

----------------------------------------------------------------------------------------------

延伸閱讀:

如何優雅的算出黃道吉日

我敢說這個函數多數人都不知道—HASONEFILTER

PBI 自定義可視化對象介紹——Strippet Browser

用PBI說愛你,每一個角度都是愛你的形狀

萌新學BI - Infographic Designer自定義可視化

萌新學Power BI - 又見切片器Chiclet Slicer

萌新學Power BI - 走出Excel思維小衚衕

萌新學Power BI - 動人的報表從美美的切片器開始

亮瞎雙眼的PowerBI可視化圖表

一張圖看懂微軟Power BI系列組件

一張圖看懂Power BI 架構

當Power BI 遇上洪災

當Power BI 遇上歐冠決賽

當Power BI遇上條形碼

當Power BI遇上Visio

----------------------------------------------------------------------------------------------

如果您想深入學習微軟Power BI,歡迎登錄網易雲課堂試聽學習我們的「從Excel到Power BI數據分析可視化」系列課程。或者關注我們的公眾號(PowerPivot工坊)後猛戳」在線學習」


推薦閱讀:

如何跨組織安全地分享Power BI報告
Power BI - Earlier 公式
大多書上沒說明白的DAX計算核心原理與計算上下文
PowerQuery的優勢與短板
DAX學習分享:十條經驗

TAG:PowerBI | PowerQuery | MicrosoftExcel |