PowerBI之DAX神功:第1卷第11回 基礎(chǔ)表函數(shù)之ALLSELECTED
? ? ? ? 《The Definitive Guide to DAX》介紹ALLSELECTED是DAX中最復(fù)雜的一個(gè)函數(shù),但是現(xiàn)在,你就放輕松,在基礎(chǔ)使用中,它是一個(gè)最簡(jiǎn)單的函數(shù)。復(fù)雜的內(nèi)容會(huì)放到第3卷中詳細(xì)講解。
講課之前,我還是那句話:
世界上本沒有路,走的人多了便成了路。
DAX本沒有原理,公式的推導(dǎo)過程就是原理。
我的學(xué)習(xí)方法是,只要知道了DAX語法和規(guī)則后,自己推導(dǎo)原理。

根據(jù)上圖,我們做三個(gè)度量值,并放到矩陣中:
總捐款 = sum('Sheet1'[捐款])
all表 = Calculate([總捐款],all('Sheet1'))
all姓名班級(jí)捐款 = calculate([總捐款],all('Sheet1'[姓名],'Sheet1'[班級(jí)],'Sheet1'[捐款]))?

如圖所示:
【總捐款】:哪個(gè)字段都能篩選
【all表】:哪個(gè)字段都無法篩選
【all姓名班級(jí)捐款】:姓名、班級(jí)、捐款這三個(gè)字段無法篩選

現(xiàn)在我們修改度量值后再看一下效果:(我不想保留無意義的度量值)
<1> 將度量值【all表】改成【占比1】
all表 = calculate([總捐款],all('Sheet1'))
占比1 = [總捐款]/calculate([總捐款],all('Sheet1'))

由于我們使用的是ALL(表),【占比1】的分母永遠(yuǎn)是固定值60
當(dāng)我們使用「性別」字段做切片器時(shí),【占比1】仍然計(jì)算每個(gè)人占捐款總和的比例。如下圖

如果我們通過切片器,選擇男的時(shí)候,想看張三、王五占男生的比例
<2> 將度量值【all姓名班級(jí)捐款】改成【占比2】
all姓名班級(jí)捐款 = calculate([總捐款],all('Sheet1'[姓名],'Sheet1'[班級(jí)],'Sheet1'[捐款]))?
占比2 = [總捐款]/calculate([總捐款],all('Sheet1'[姓名],'Sheet1'[班級(jí)],'Sheet1'[捐款]))?
占比2 = [總捐款]/calculate([總捐款],ALLEXCEPT('Sheet1','Sheet1'[性別]))?

目的達(dá)到了,但是這樣不方便,如果我現(xiàn)在將切片器改成班級(jí),這個(gè)時(shí)候結(jié)果錯(cuò)了,如下圖

由于占比2已經(jīng)取消了班級(jí)的篩選,現(xiàn)在的占比2結(jié)果是張三占男生的比例,李四占女生的比例。
不可能每換一次切片器,我就換一次度量值呀!太不靈活了。
這還不是最大的問題,all('Sheet1'[姓名],'Sheet1'[班級(jí)],'Sheet1'[捐款])相當(dāng)于是對(duì)這些列取消篩選,但是【性別】列是可以通過內(nèi)部與外部篩選的
現(xiàn)在我們需要:內(nèi)部篩選不生效,但是外部篩選生效(如:切片器)
需要一個(gè)函數(shù)將切片器寫活,今后無論用哪個(gè)字段做切片器時(shí),它都能實(shí)現(xiàn)每個(gè)人對(duì)切片器這個(gè)字段的占比。
占比2 = [總捐款]/calculate([總捐款],ALLSELECTED('Sheet1'))?

當(dāng)我們?cè)谇衅魃虾Y選指定字段時(shí),這個(gè)字段就會(huì)自動(dòng)取消外部篩選,得到正確的占比。

ALL(表名):永遠(yuǎn)取那個(gè)固定值,誰都不能篩選它。
ALLSELECTED(表):內(nèi)部篩選全部取消,但外部篩選可以。

? ? ? ? 如果,這么簡(jiǎn)單的數(shù)據(jù)你聽著都很費(fèi)力,那么你做為一名數(shù)據(jù)分析人員,當(dāng)你對(duì)自己業(yè)務(wù)不理解,對(duì)自己表不熟悉,根本就無法分析。勿忘初心,一定要把業(yè)務(wù)學(xué)好,軟件是次要的。
