PowerBI之DAX神功:答網(wǎng)友問(wèn)02.if函數(shù)如何用到度量值中
網(wǎng)友提問(wèn):IF函數(shù)只能用在新建列中嗎?如何將它使用在度量值中呢?

其實(shí),不只是IF函數(shù),switch函數(shù)也是同理。
例如我們有一張表,表的名字:Sheet1
需求:新增一列,商品是switch顯示已買(mǎi),商品是PS5顯示準(zhǔn)備買(mǎi)

新建列 = if('Sheet1'[商品]="PS5","準(zhǔn)備買(mǎi)","已買(mǎi)")

如果直接將公式? ?if('Sheet1'[商品]="PS5","準(zhǔn)備買(mǎi)","已買(mǎi)")? 寫(xiě)成度量值,100%是錯(cuò)的,因?yàn)槎攘恐抵荒軐⑿猩舷挛霓D(zhuǎn)換成篩選上下文,但是它不能創(chuàng)建行上下文。

如果是多個(gè)數(shù)值列的計(jì)算,我們可以通過(guò)《DAX神功》第1卷12回學(xué)習(xí)的知識(shí),通過(guò)多個(gè)列度量值的計(jì)算完成,例如下表名字是Sheet2

我們需要A列-B列寫(xiě)成新建列:
新建列='Sheet2'[A]-'Sheet2'[B]
我們需要寫(xiě)成度量值:相當(dāng)于兩個(gè)度量值在計(jì)算,度量值是篩選上下文,這是篩選上下文內(nèi)部的計(jì)算
度量值=sum('Sheet2'[A])-sum('Sheet2'[B])
也可以寫(xiě)成:使用sumx生成行上下文,放到度量值里,因?yàn)槎攘恐堤焐哂泻Y選功能,同時(shí)度量值將行上下文轉(zhuǎn)化成了篩選上下文件
度量值=sumx('Sheet2','Sheet2'[A]-'Sheet2'[B])
但是如果您寫(xiě)成下面的公式就錯(cuò)了,因?yàn)閮蓚€(gè)列相減是生成行上下文,度量值不能生成行上下文,只能轉(zhuǎn)換行上下文
度量值='Sheet2'[A]-'Sheet2'[B]

現(xiàn)在回歸我們這個(gè)案例,表名為:Sheet1

我們需要將下面的新建列寫(xiě)成度量值:
?新建列 = if('Sheet1'[商品]="PS5","準(zhǔn)備買(mǎi)","已買(mǎi)")
現(xiàn)在的情況不一樣,它不是數(shù)值,是文本類(lèi)型。
我們回憶一下《DAX神功》第1卷第5回,我們學(xué)習(xí)的聚合函數(shù)與迭代函數(shù)

現(xiàn)在我們發(fā)現(xiàn)一個(gè)問(wèn)題,聚合函數(shù)除了計(jì)數(shù)以外,只有max和min支持文本。MaxX和MinX與max和min聚合規(guī)則是一樣的,只是迭代函數(shù)運(yùn)行方式不同,迭代函數(shù)是逐行掃描
?所以我們可以將度量值寫(xiě)成:
度量值 = MINX('Sheet1',if('Sheet1'[商品]="PS5","準(zhǔn)備買(mǎi)","已買(mǎi)"))
或
度量值 = MAXX('Sheet1',if('Sheet1'[商品]="PS5","準(zhǔn)備買(mǎi)","已買(mǎi)"))
將度量值放到矩陣或表中:
如果想讓總計(jì)為空:IF+HASONEVALUE? ? 具體方法詳見(jiàn)《DAX神功》第1卷第10回
