Power BI之DAX神功番外篇:第11回 導(dǎo)航上有多條路,為什么選擇最擁堵的那條路?
在回答問(wèn)題前,我給你們講個(gè)故事,我買完xbox series s開(kāi)通了XGP,里面可以免費(fèi)玩生化7,但是第一人稱(逃生)不適合我,由于生化8有國(guó)語(yǔ)配音,我想在PS5上買生化8,為了這個(gè)我去XGP上玩生化7,玩到被老丈人追的那里就玩不下去了,我開(kāi)始思考,玩游戲本來(lái)就是一個(gè)開(kāi)心的事情,何必花錢難為自己呢。
PowerBI中的DAX也是一樣,如果你是一個(gè)項(xiàng)目開(kāi)發(fā)人員,你研究這些東西是正常的,但是我并不是給項(xiàng)目開(kāi)發(fā)人員做培訓(xùn)的。我只是無(wú)條件幫助辦公室人員的。換句話說(shuō),你就假設(shè)我是駕校的教練,幫你考駕照的,漂移是賽車手的事情。不是說(shuō)我會(huì)的就都要講出來(lái),會(huì)不會(huì)給別人造成困擾也是我要考慮的因素。
做為新人,用一張干凈的數(shù)據(jù)表來(lái)做分析才是你的最佳選擇,當(dāng)您的目標(biāo)是數(shù)據(jù)分析師時(shí),原理應(yīng)該是你自己推導(dǎo),而不是問(wèn)出來(lái)的。那我接下來(lái)講的這些東西,完全都是推導(dǎo)出來(lái)的,推導(dǎo)是一個(gè)過(guò)程,正是要用這個(gè)過(guò)程來(lái)鍛煉思維和邏輯。
一、網(wǎng)友問(wèn)題



個(gè)人建議:您的數(shù)據(jù)看似簡(jiǎn)單,但是為了學(xué)習(xí)原理,還可以更簡(jiǎn)單,越簡(jiǎn)單的數(shù)據(jù)越直觀。
特殊說(shuō)明:您與《DAX神功》番外篇第1回 網(wǎng)友遇到的問(wèn)題是不一樣的
最簡(jiǎn)單的例子,世界上每個(gè)國(guó)家在各個(gè)領(lǐng)域都有相關(guān)的法律法規(guī),既然有法律法規(guī),那為什么各國(guó)法官還要商討每個(gè)案件應(yīng)該如何判決呢,為什么要有律師呢?為什么不直接按法律法規(guī)執(zhí)行呢?同樣的道理,沒(méi)有什么東西是可以套用的,除了發(fā)音等沒(méi)有技術(shù)含量東西是通過(guò)記憶和死記硬背的,其它都是需要人為思考的。
二、先解決你關(guān)于度量值Value2的問(wèn)題
【1】當(dāng)你使用sum('表'[大小]) 為了研究原理盡量別用一端表舉例了?您要先理解sum('表'[大小])?的作用。

新建度量值:
因?yàn)榫仃嚿闲袠?biāo)題是【類型】所以工作原理如下

我們將度量值A(chǔ)放到矩陣中:

這里為什么是11,而不是5+4=9呢?因?yàn)?span id="s0sssss00s" class="color-green-04">《DAX神功》第1卷第19回 獨(dú)創(chuàng)的"母子關(guān)系"
PS:如果您想讓總計(jì)顯示為9也是可以的,我們?cè)凇禗AX神功》中講了如何讓總計(jì)單獨(dú)計(jì)算,不要問(wèn)我是哪一集,知識(shí)一定要按順序系統(tǒng)學(xué)習(xí),為了解決問(wèn)題而去看某一集,換個(gè)問(wèn)題還是不會(huì)。
接下來(lái)我們新建度量值:
因?yàn)閍ll('表')在Filter中只是表函數(shù),但是出現(xiàn)在Calculate中就起到了調(diào)節(jié)器的作用。all('表')的意思是指定表所有列刪除篩選。因?yàn)槎攘恐礎(chǔ)的總計(jì)是11,所以度量值B的總計(jì)是每行都是11
為什么類型B顯示為空而不是11呢?因?yàn)轭愋虯和C是由Filter篩選的,filter表與filter+all表在filter中是一樣的,度量值【B】就是A和C這兩個(gè)類型的總和值
證明:類型A總數(shù)是5,度量值【A】也是5,類型C總數(shù)是4,度量值【A】也是4
行標(biāo)題并未參與度量值A(chǔ)的篩選,所以當(dāng)使用calculate+All表時(shí),只有類型A和C是11
總結(jié):就是因?yàn)槟缸雨P(guān)系,內(nèi)層沒(méi)有被行標(biāo)題篩選

【2】理解“母子關(guān)系”工作原理
新建度量值
calculate(SUM('表'[大小]))?不就是等于度量值 [總數(shù)] 嗎?度量值具有篩選功能,所以工作不原理如下:

所以放到矩陣中是這個(gè)樣子的:

同理我們新建度量值
因?yàn)槭褂昧薬ll(表),當(dāng)度量值C的總計(jì)是7時(shí),度量值D的每一行都是7
為什么這里B不顯示為空,而每行都顯示為7,filter篩選出了A和C的總和值,但是因?yàn)槟闶褂媚缸雨P(guān)系,度量值【C】受到了行標(biāo)題的篩選,證明:A的總數(shù)是5,度量值【C】是3
所以,因?yàn)樾袠?biāo)題篩選了度量值【C】,已知Calculate中使用了all表,所以每行顯示為7
總結(jié):就是因?yàn)槟缸雨P(guān)系,內(nèi)層被行標(biāo)題篩選了

三、再解決你關(guān)于Value1的問(wèn)題
【1】先分析Filter表的情況
為什么說(shuō)您的問(wèn)題與《DAX神功》番外篇第1回并不是一件事
在你的案例中,度量值? [TOTALD]=SUM('表(2)'[大小])
但是您能證明:[TOTALD]=5? 嗎?
這個(gè)等式并不成立,所以在我的案例中? [總數(shù)]≠3
為了說(shuō)清楚這件事,我剛才的表,還需要做以下修改才能直觀表示(增加一行數(shù)據(jù))

我們分別下出下面三個(gè)度量值:
將它們放到矩陣中:

工作原理:

已知?sum('表'[大小]、矩陣行標(biāo)題是類型,所以 類型聚合(分組),?適配度量值【總數(shù)】
每個(gè)類型的紫色數(shù)字與紅色數(shù)字進(jìn)行比較:
sum('表'[大小])<[總數(shù)]:只有類型C對(duì)應(yīng)的4
sum('表'[大小])=[總數(shù)]:只有類型B對(duì)應(yīng)的2
sum('表'[大小])>[總數(shù)]:類型A對(duì)應(yīng)的2和3(加在一起是5),類型C對(duì)應(yīng)的-1
現(xiàn)在我們知道原理了,下面的這個(gè)度量值:
放到矩陣中,這一步的邏輯絕對(duì)是小學(xué)數(shù)學(xué)題

【2】再分析Filter+all表的情況
還是新建3個(gè)度量值來(lái)分析
放到矩陣中:

接下來(lái)我們解釋為什么會(huì)這樣

<1>? sum('表'[大小])<[總數(shù)]:
因?yàn)槲覀兪褂昧薬ll(表) ,現(xiàn)在需要用紫色字體全部數(shù)字與每個(gè)類型對(duì)應(yīng)的紅色數(shù)字進(jìn)行比較

類型A:【總數(shù)】紫色字體沒(méi)有任何一個(gè)數(shù)比A對(duì)應(yīng)的sum('表'[大小])的值5更大,所以為空。
類型B:【總數(shù)】紫色字體有3和4都比B對(duì)應(yīng)的sum('表'[大小])的值2更大,所以顯示3+4=7
類型C:【總數(shù)】紫色字體只有4比C對(duì)應(yīng)的sum('表'[大小])的值3更大,所以顯示為4
<2>??sum('表'[大小])=[總數(shù)]:
因?yàn)槲覀兪褂昧薬ll(表) ,現(xiàn)在需要用紫色字體全部數(shù)字與每個(gè)類型對(duì)應(yīng)的紅色數(shù)字進(jìn)行比較

類型A:【總數(shù)】紫色字體沒(méi)有任何一個(gè)數(shù)等于A對(duì)應(yīng)的sum('表'[大小])的值5,所以為空。
類型B:【總數(shù)】紫色字體中有兩個(gè)2等于B對(duì)應(yīng)的sum('表'[大小])的值2,顯示為2+2=4
類型C:【總數(shù)】紫色字體只有一個(gè)3等于C對(duì)應(yīng)的sum('表'[大小])的值3,所以顯示為3
<3> sum('表'[大小])>[總數(shù)]:
因?yàn)槲覀兪褂昧薬ll(表) ,現(xiàn)在需要用紫色字體全部數(shù)字與每個(gè)類型對(duì)應(yīng)的紅色數(shù)字進(jìn)行比較

類型A:【總數(shù)】紫色字體每個(gè)數(shù)都小于A對(duì)應(yīng)的sum('表'[大小])的值5,所以把紫色字體所有的數(shù)都加在一起2+3+2+4+(-1)=10
類型B:【總數(shù)】紫色字體只有一個(gè)負(fù)1小于B對(duì)應(yīng)的sum('表'[大小])的值2,所以顯示為-1
類型C:【總數(shù)】紫色字體有兩個(gè)2,一個(gè)負(fù)1小于C對(duì)應(yīng)的sum('表'[大小])的值3,所以2+2+(-1)=3
最后我們?cè)俅卫眯W(xué)數(shù)學(xué)的知識(shí)把它寫成:

因?yàn)槟缸雨P(guān)系的原因,內(nèi)層沒(méi)有被行標(biāo)題篩選,如果我們對(duì)內(nèi)層使用了Calculate實(shí)現(xiàn)了行標(biāo)題對(duì)其內(nèi)層篩選的功能,那不又回到了我們上面的問(wèn)題。所有行都返回10

《孫興華講PowerBI火力全開(kāi)》PowerBI必學(xué)課程
https://www.bilibili.com/video/BV1qa4y1H7wp
《DAX神功》文字版合集:
https://www.bilibili.com/read/readlist/rl442274
《DAX神功》視頻版合集:
https://www.bilibili.com/video/BV1YE411E7p3
PowerBI(DAX函數(shù))、PowerQuery(M函數(shù))、Python辦公自動(dòng)化、Python爬蟲(chóng)、Python數(shù)據(jù)分析、ExcelVBA、WordVBA、AccessVBA、MySQL等等
https://www.bilibili.com/read/cv10222110