
CALCULATE和CALCULATETABLE其實一樣,區(qū)別在于返回結果不同,CALCULATE返回一個值,CALCULATETABLE返回一個表,是一個表函數(shù),用于建立虛擬表,在這點上又跟FILTER類似,今天重點也是分享CALCULATETABLE和FILTER的區(qū)別。
首先先認識一下CALCULATETABLE:
語法:CALCULATETABLE(表,過濾條件1,過濾條件2...)
參數(shù):第一個參數(shù)是表或表達式返回的表
第二參數(shù)及以后參數(shù)都是篩選條件
功能:在由過濾器修改的上下文中計算表達式
返回:根據(jù)第二個及以后的過濾器篩選的上下文中,返回第一個表達式計算的表
注意:表和篩選條件的表是有關系的,只要有關系的表都可以進行篩選,實現(xiàn)多表運作的功能
明白了此函數(shù)的用法,下面就看一下CALCULATETABLE和FILTER的區(qū)別:
舉例:
產(chǎn)品種類銷售計數(shù) = ADDCOLUMNS(VALUES('產(chǎn)品分類表'[種類]),"計數(shù)",COUNTROWS('銷售數(shù)據(jù)表'))
先看一下這個公式的返回結果,是一張超市產(chǎn)品種類的銷售數(shù)據(jù)計數(shù)

在這個函數(shù)外面分別加入CALCULATETABLE和FILTER,結果如下:
calculatetable函數(shù) = CALCULATETABLE(ADDCOLUMNS(VALUES('產(chǎn)品分類表'[種類]),"計數(shù)",COUNTROWS('銷售數(shù)據(jù)表')),'產(chǎn)品分類表'[種類]="食品")

filter函數(shù) = FILTER(ADDCOLUMNS(VALUES('產(chǎn)品分類表'[種類]),"計數(shù)",COUNTROWS('銷售數(shù)據(jù)表')),'產(chǎn)品分類表'[種類]="食品")

問題來了:為什么顯示的數(shù)據(jù)不一樣?
雖然兩者函數(shù)內(nèi)的參數(shù)是一模一樣,但是邏輯運算不同,首先根據(jù)CALCULATETABLE這個函數(shù)的功能是在第二參數(shù)的篩選條件的基礎上計算第一參數(shù)表達式,那么 CALCULATETABLE是先篩選產(chǎn)品表種類是美式,在這個基礎上新增列計數(shù)。
FILTER函數(shù)是逐行計算,沒有篩選上下文,所以是執(zhí)行第一參數(shù)結果后再篩選條件,也就是說篩選條件是在ADDCOLUMNS和COUNTROWS計算了所有產(chǎn)品的數(shù)量后執(zhí)行的,相當于是不起作用的,所以最終結果顯示的是所有產(chǎn)品的數(shù)量。
在實際工作中可能用到CALCULATETABLE這個函數(shù)的機會很少,常用的就是FILTER函數(shù)建立虛擬表,況且在編寫DAX函數(shù)公式時CALCULATE+FILTER這個是黃金組合。
喜歡的就點個贊吧,可以關注我,我是Sugargl,拜拜