PowerBI之DAX神功:第1卷第19回 上下文轉(zhuǎn)換你還不知道的秘密
本課關(guān)于概念性總結(jié)的專業(yè)術(shù)語,你們可以參考《The Definitive Guide to DAX》,如果你能看懂。。。DAX神功換個方式講原理

新建列1=sumx('Sheet1','Sheet1'[銷量])
解讀:通過迭代函數(shù)創(chuàng)建的是行上下文,放在新建列中,沒有篩選功能

度量值1 = sumx('Sheet1','Sheet1'[銷量])
解讀:sumx是迭代函數(shù),創(chuàng)建行上下文,行上下文在度量值中自動轉(zhuǎn)化成篩選上下文

上面這兩種情況我們經(jīng)常使用,已經(jīng)做到熟練應(yīng)用了,那么下面的:
新建列2 = sumx('Sheet1',calculate('Sheet1'[銷量]))
度量值2 = sumx('Sheet1',calculate('Sheet1'[銷量]))
解讀:calculate(計算器,篩選器), 這里使用語法錯誤,沒有討論的意義
如果這樣使用呢?
新建列3 = sumx('Sheet1',sum(Sheet1[銷量]))

解讀:數(shù)學(xué)公式推導(dǎo)的方法
證:
∵? ?新建列1=sumx('Sheet1','Sheet1'[銷量])??
? ? ?表中每一行返回【銷量】這一列的和。
? ? ?由于有6行,每行分別是1,2,3,4,5,6, 它們的和是21
∴? 新建列3 = sumx('Sheet1',sum(Sheet1[銷量]))
? ? ?不加sum之前,每行都是21,共6行,
? ? ?加上sum之后,每行都是21*6的和,都是126
我們再來看一下相同公式的度量值:
度量值3 = sumx('Sheet1',sum(Sheet1[銷量]))
解讀:數(shù)學(xué)公式推導(dǎo)的方法
證:
∵? 度量值1 = sumx('Sheet1','Sheet1'[銷量])
? ? 雖然sumx創(chuàng)建了行上下文,但是放到度量值中就具有了篩選功能
? ? 度量值就好比calculate(行上下文)
? ? 你喜歡上一個未婚先孕的女人,但是孩子父親去世了
? ? 你可以將這個女人轉(zhuǎn)化為你的妻子,
? ? 但你永遠(yuǎn)都不可能是她腹中孩子的新生父親
∴? 度量值3 = sumx('Sheet1',sum(Sheet1[銷量]))
? ? 度量值可以將sumx轉(zhuǎn)化為篩選上下文,但是無法改變里面的sum
? ? 度量值3返回的最終結(jié)果仍然是126

當(dāng)你將所有的列都放到篩選條件上,你會發(fā)現(xiàn),只是總計顯示126

如果我們將商品從篩選條件上撤掉,因為8月22日和23日每天都有3筆記錄
每天的銷量之和分別是6和15,度量值3相當(dāng)于將每天的銷量之和記算了3次

同理,我們在篩選中還原商品列,撤消日期列,由于A、B、C商品各2條記錄
度量值3相當(dāng)于把3個商品各自銷量之和計算了兩次。

我們現(xiàn)在再次觀察度量值3:
度量值3 = sumx('Sheet1',sum(Sheet1[銷量]))
sumx是你即將過門的妻子,可以通過結(jié)婚(度量值)的方式改變他是你妻子的事實
孩子你雖然改變不了血脈,但是可以做他的爸爸,你名義上就是親生父親(戶口本可以證明)
這時候,讓calculate來幫你,calculate的使命是讓孩子做你兒子
度量值4 = sumx('Sheet1',calculate(sum('Sheet1'[銷量])))
或
度量值4 = sumx('Sheet1',[總銷量])

在度量值4中,calculate的功能是讓sumx的孩子實現(xiàn)篩選功能。
你可能會說,這么簡單的問題,怎么寫了這么復(fù)雜的公式,寫成:
等價度量值4=sum('Sheet1'[銷量])
他不香嗎?這只是舉個簡單的例子講這個知識點(diǎn),不要抬扛,將來你的公式會比這個復(fù)雜很多。也許這就是部分收費(fèi)講課老師,曾經(jīng)說我們不講原理是坑人、誤導(dǎo)人的原因吧。
但是,你們發(fā)現(xiàn)沒有,當(dāng)你使用新建列4時,他會提示你:

新建列4 = sumx('Sheet1',calculate(sum('Sheet1'[銷量])))
提示內(nèi)容:檢測到循環(huán)依賴關(guān)系Sheet1[列] ,其實循環(huán)依賴是個鬼,我們下節(jié)課就講。
現(xiàn)在計算列和度量值的上下文轉(zhuǎn)換你都理解了,《The Definitive Guide to DAX》中有幾個代碼較多的案例,沒什么大不了的,你仔細(xì)看,萬變不離其宗。都是我們上面講的規(guī)律
他的案例就是一個能篩選的變量比較另一個變量(這個變量是由一個固定值不能篩選的變量*系數(shù)),如果大于等于就返回什么,否則返回什么。
