工坊實驗室之失靈的篩選

今天,又是元氣滿滿的一天(好古老的梗)

開門見山,今天我們研究三個篩選函數:CALCULATE、SUMX和FILTER。學過一段時間DAX函數的坊友們應該有這種體會,用的較多的篩選函數就是CALCULATE,從微軟官網上download下來的函數定義:在指定篩選器修改的上下文中計算表達式。

語法是:CALCULATE(<expression>,<filter1>,<filter2>…)。

舉個例子,比如有這樣的一個數據集,

我們想展示實際數的話,那麼度量值應該這樣寫:

營業收入實際數 = CALCULATE(SUM(營業收入表[營業收入]),營業收入表[分組]="實際數")

我們按年去展示數據的話出來的條形圖長這樣 :

該條形圖按照每年去計算實際數,因為2018年及之後沒有實際數,所以橫軸年份只到2017年,本例雖簡單,卻也包含了篩選上下文的概念。

假設如果我們想在CALCULATE函數表達式中直接篩選年<=2017來控制橫軸年份以達到同樣的效果,那麼我們的度量值應該這樣寫:

營業收入實際數 = CALCULATE(SUM(營業收入表[營業收入]),營業收入表[年]<=2017)

出來的圖長這樣:

一臉黑人問號。。。為啥這個圖變成了這樣??莫不是篩選函數失靈了?仔細看了下數值,每一年展示的數都是2017年之前的數據的匯總,仔細想想函數的篩選上下文的邏輯,對橫軸的每個年份計算2017年之前的營業收入,確實是這樣。

那麼應該怎麼樣通過度量值的方式直接篩選年份呢?我們先試試CALCULATE的兄弟SUMX函數。

度量值應該這樣寫:

營業收入實際數 = SUMX(FILTER(營業收入表,營業收入表[年]<=2017),營業收入表[營業收入])

再瞅一眼圖表:

嗯,達到了我們預期的效果,那麼這個表達式跟我們用CALCULATE函數寫的表達式差別在哪裡呢?我們發現用SUMX函數往往配合filter函數使用,我們也給CALCULATE函數加一個FILTER試試。

營業收入實際數 = CALCULATE(SUM(營業收入表[營業收入]),FILTER(營業收入表,營業收入表[年]<=2017))

再瞅一眼圖表:

原來加一個篩選函數FILTER就可以解決這個問題了。

去官網上看一下FILTER函數的描述,注意到FILTER函數的返回值:只包含篩選行的表。恍然大悟,果然官方文檔還是要多看看的。

DAX函數微軟官方參考文件:msdn.microsoft.com/zh-c.aspx

今天的文章水完了,坊友們,我滾啦~

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


延伸閱讀:

工坊實驗室之R腳本視覺對象

工坊實驗室之數據標籤的位置

工坊實驗室之桑基圖排序

工坊實驗室之流向圖展現

工坊實驗室之使用瀑布圖

亮瞎雙眼的PowerBI可視化圖表

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

一張圖看懂Power BI 架構

當Power BI 遇上洪災

當Power BI 遇上歐冠決賽

當Power BI遇上條形碼

當Power BI遇上Visio


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


推薦閱讀:

史上第一份基於DAX數據模型編寫的美國人口遷徙地圖
華爾街圖表點圖與堆積組合
把數據標籤「掛」在柱形圖的外側,逼格滿滿!
3個Excel神技巧,免費教你

TAG:Office365 | MicrosoftExcel | PowerBI |