數據可視化之powerBI入門(十三)CALCULATE函數的最佳搭檔:FILTER


https://zhuanlan.zhihu.com/p/64383000

介紹過CALCULATE函數之后,有必要再介紹它的最佳搭檔:FILTER函數。

CALCULATE函數的第二個及之后的參數是篩選條件,而FILTER函數正是為篩選而生。

 


 

FILTER語法

 

FILTER(<table>,<filter>)
  • 第一個參數<table>是要篩選的表
  • 第二個參數<filter>是篩選條件
  • 返回的是一張表,不能單獨使用,需要與其他函數結合使用

 

 

FILTER應用

 

前一篇文章中介紹CALCULATE的時候,沒有使用FILTER函數也實現了篩選,你可能會問,既然不用FILTER函數也可以,為什么還要使用FILTER呢?

那是因為前文中的篩選條件都是最簡單的篩選,沒有必要使用強大的FILTER,其實用FILTER也是可以實現的,比如這個度量值[產品數量2],

 

= CALCULATE([產品數量],'產品明細'[品牌]="蘋果")

 

等同於:

 

= CALCULATE([產品數量],
FILTER(ALL('產品明細'[品牌]),
'產品明細'[品牌]="蘋果"))

 

這兩種方式返回的結果完全一致。

 

在這個簡單的例子里看起來好像用FILTER寫起來更復雜,不用FILTER的情況下顯得更簡潔,但是如果我們要做更復雜的運算,通過簡單的布爾表達式根本無法實現,必須借助FILTER。

 

依然用介紹度量值的那篇文章中的案例數據(可點擊閱讀原文查看),有這6張表,

 

 

 

 

現在想找出年銷售額超過2000萬的城市銷售金額,這個利用簡單的表達式已無法解決,來看FILTER如何實現。

 

第一個度量值還是之間建好的,

 

銷售總額 = sum('銷售明細'[銷售額])

 

再建一個度量值[大於2000萬的城市銷售金額],

 

= CALCULATE([銷售總額],
FILTER(ALL('門店城市'),
[銷售總額]>20000000))

 

這個度量值先利用FILTER函數,篩選出銷售大於2000萬的城市有哪幾個,然后再匯總這些城市的銷售額,返回結果如下,

 

 

 

 

超過2000萬銷售額的城市的銷售額總計等於451026000,但發現上面明細的兩個數字之和並不等於總計,這正是PowerBI中數據模型的特點,在這個表格中,每個數據都是獨立運算的,和其他數字沒有關系。

 

上面兩個數字代表的是,在銷售額超過2000萬的城市中,單個產品的銷售額也大於2000萬的只有蘋果電腦和蘋果手機。

 

為什么會有產品的銷售額也大於2000萬這個篩選條件呢,不要忘了還有外部的篩選上下文,在這個表中即是行標簽,這兩個數字正是內部上下文和外部上下文相結合,篩選計算的結果。

 

這就是FILTER的一個簡單應用,這里要特別記住這個函數嵌套組合,

CALCULATE(…,FILTER(ALL(…),…))

做各種分析時會經常用到這個組合。

 

關於上面例子中合計金額不等於上面數據之和,雖然在PowerBI中很正常,但按通常理解的習慣,容易引起誤導,這也有解決的辦法,下篇文章介紹兩個新函數來解決它。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM