DAX - 正確地提出好問題 - 你真的理解SUM嗎

在學(xué)習(xí) Power BI 的 DAX 過程中,不免會遇到一些問題和你想的不一致。例如以下問題來自伙伴在實(shí)際業(yè)務(wù)中涉及到的公式,我們來拆解并幫助大家梳理對于 DAX 的理解。
問題重述
首先,伙伴將真實(shí)的復(fù)雜模型和問題簡化,給出了一個適合被討論的模型,如下:

更具體地,本問題涉及到的問題限定在:

大概 90% 的人,是不會化簡問題的,他們的直覺表現(xiàn)是:老師,為啥我的計(jì)算不對呢?老師永遠(yuǎn)只有一個回答:因?yàn)槟闼沐e了啊。一個沒有意義的問題,只能迎來一個沒有意義的回答。
當(dāng)可以把問題具體化到一個信息充足的地步,才可以被討論和回答。本案例的問題現(xiàn)象如下:

提出問題的伙伴將度量值名稱和所有內(nèi)容提供出來,并且將內(nèi)容徹底簡化到一個可以被直接定位的程度。這顯示了該伙伴非常珍惜和尊重別人的時間,因此,將自己能做的極限全部呈現(xiàn),并最大程度地鎖定了問題的范圍,更進(jìn)一步的,將自己的分析和探索實(shí)驗(yàn)的差異以及困惑的問題點(diǎn)全部高量出來。
至此,這個提問的姿勢是非常非常正確的。

如果,你可以除了跑完你的那一段,還可以送你隊(duì)友一段,這種默契才是工作得以高效進(jìn)行的暗力量。這種力量也會決定你的周圍會是同類,以及會有同類來幫助你。正相反,把隊(duì)友不當(dāng)隊(duì)友,直接甩過去問題的方式,必將在日后得到同樣反饋。親眼目睹 80% 的人是自掃門前雪,從來不會多做一點(diǎn)超過自己范圍的事,這樣的短視非常好,因?yàn)?,正是有絕大多數(shù)這樣的人的存在,才推高了極少數(shù)人的價值。這種極少數(shù)的人的價值本來就是應(yīng)該的,然后卻變成了彌足珍貴的品質(zhì)。倒退就是這樣,不是別人在進(jìn)步,只是有很多人在倒退或停滯不前而已,僅此而已。
問題分析
在這么清晰的問題描述下,老師幾乎可以 1 秒鎖定問題并節(jié)省了 99.99% 的理解問題的時間,可以被得到這樣的尊重,那么,你必然會得到你絕對滿意的回答。超越你看到的所有書籍,為你量身定制回答。
問題 1
對于度量值:
FILTER+SUM =
VAR TABLE1 = FILTER( '客戶' , SUM( '訂單'[數(shù)量] ) > 20000 )
RETURN CALCULATE( [合同數(shù)量] , TABLE1 )
// 其中,合同數(shù)量 = SUM('訂單'[數(shù)量])效果如下:

分析如下,對于以上矩陣的每一行,都受到該行的篩選的影響,于是:
VAR TABLE1 = FILTER (' 客戶 ' , SUM ( ' 訂單 '[數(shù)量] ) > 20000 )
這里的注意點(diǎn)有:
1、客戶表在篩選上下文的影響下,只有當(dāng)前行。例如:德州 F。
2、在計(jì)算 SUM 的時候,F(xiàn)ILTER 會創(chuàng)建自己的迭代環(huán)境,針對僅有的一行客戶,計(jì)算:SUM (' 訂單 '[數(shù)量] ) > 20000
3、在 2 中計(jì)算的 SUM (' 訂單 '[數(shù)量] ),由于在篩選上下文中,訂單將被當(dāng)前客戶篩選出屬于它的訂單,因此,只有屬于它的訂單數(shù)量 SUM ( ' 訂單 '[數(shù)量] ) > 20000 時,才返回真,才能返回出含有 1 行客戶的表,否則返回一個含有 0 行客戶的表。
4、用 TABLE1 作為篩選器再去計(jì)算 [合同數(shù)量],凡是 3 中可以返回 1 行的客戶都會計(jì)算出來,否則計(jì)算結(jié)果為空。
需要注意的是:
A、第 2 步中的 FILTER 迭代 ' 客戶 ' 所產(chǎn)生的行上下文對 SUM 是沒有影響的;但是在矩陣?yán)锏漠?dāng)前行作為篩選上下文對 SUM 是有影響的。
B、TABLE1 是空,是一種特殊的空,該空表示一個特地的有 0 個客戶構(gòu)成的表,該表用作篩選器覆蓋了矩陣中的客戶,導(dǎo)致結(jié)果是空。
C、FILTER 的第二個參數(shù)是判斷是否的,如果通過,則迭代的行可以返回,否則被過濾掉,因此有本例的結(jié)果。
問題 2
對于度量值:
FILTER+SUMX =
VAR TABLE1 = FILTER( ALL('客戶') , SUMX( '訂單' , '訂單'[數(shù)量] ) > 20000 )
RETURN CALCULATE( [合同數(shù)量] , TABLE1 )效果如下:

要理解問題 2 的計(jì)算邏輯,就必須先搞懂問題 1 中的計(jì)算邏輯,在問題 1 中已經(jīng)充分說明。
現(xiàn)在來解釋這里的計(jì)算邏輯,對于任意的一個矩陣圖表行,作為篩選上下文,它對度量值的影響如下:
1、VAR TABLE1 = FILTER (ALL (' 客戶 ') , SUMX ( ' 訂單 ' , ' 訂單 '[數(shù)量] ) > 20000 ) 中的 ALL (' 客戶 ') 會得到所有客戶,并進(jìn)行迭代,但由于 SUMX 中的第一個參數(shù)'訂單' 所處于的篩選上下文正是矩陣中當(dāng)前行,注意:不是 FILTER 迭代 ALL (' 客戶 ') 的行上下文,在行上下文中'訂單' 是不受影響的,只受到位于矩陣行的篩選上下文影星。特別強(qiáng)調(diào):濟(jì)南 A 是矩陣的一行,但它本身是篩選上下文。
2、由于矩陣行本身的原因,如果對應(yīng)的訂單的數(shù)量不是滿足 FILTER 條件的,那么 FILTER 的 ALL (' 客戶 ') 全部都會返回 FALSE 導(dǎo)致得到空表;而如果對應(yīng)的訂單的數(shù)量是滿足 FILTER 條件的,那么 FILTER 的 ALL (' 客戶 ') 全部都會返回 TRUE 導(dǎo)致得到全表。
由此可知,在濟(jì)南 A 處的矩陣行,TABLE1 會得到的是全部客戶,進(jìn)而計(jì)算得到的結(jié)果是與全局總數(shù)一致的。
總結(jié)
通過問題 1 和 2 的解析過程,我們得到以下收益:
1、如何問問題
經(jīng)驗(yàn)表明,當(dāng)你把問題拆分到最極限小的規(guī)模時,你就來到了你的極限。A 節(jié)省了老師的時間;B 可以徹底理清自己的問題;C 將自己的極限推進(jìn)和突破。而且往往 80% 的情況,通過這個自我整理問題的過程,會自己解決好問題的。
2、關(guān)于 DAX 的使用的建議
DAX 的使用是有著清晰規(guī)律的,對于業(yè)務(wù)人員(強(qiáng)調(diào) 100 次:業(yè)務(wù)人員)使用 DAX 往往需要遵循一些套路,而不是像工程師一樣要死扣所有細(xì)節(jié),或者自己給自己編制一個有問題的陷阱。這方面是我們后續(xù)工作的重點(diǎn),會推出一些簡單的模式供業(yè)務(wù)人員直接遵守使用。
3、是否必須學(xué)習(xí)所有 DAX 細(xì)節(jié)
答案顯然是:不需要。尤其是對于業(yè)務(wù)人員。還記得曾經(jīng)學(xué)習(xí) C ++ 的時候,工程師就一定要去問指針和引用有什么區(qū)別,甚至某些操作哪個效率高,對于程序員或者是架構(gòu)師,的確如此,需要理解最底層邏輯。但對于應(yīng)用開發(fā)者,應(yīng)該使用 C#,Java,Python 等面向應(yīng)用的設(shè)計(jì)語言,而屏蔽底層的復(fù)雜性。
DAX 是一門非常有特點(diǎn)的函數(shù)。以下 3 件事非常重要,且全部來自官方說法,這里將它們擺在這里告訴你:
第一要事:DAX 是很容易的。這是官方的說法。例如:

看看這里的用詞,我猜測這不是機(jī)器翻譯的,不然怎么能這么接地氣呢。
第二要事:DAX 不是為程序員設(shè)計(jì)的,而是為分析師設(shè)計(jì)的。只不過不妨礙程序員也成為分析師,也可以深度使用 DAX。
第三要事:DAX 是全球范圍唯一的模型驅(qū)動的自助商業(yè)智能分析工具。
如果你感覺你的理解和上述三點(diǎn)不一致,那么,不要說我,以上 3 點(diǎn)來自官方原話,要噴就直接去官方噴吧。那為什么你的感受完全不同的,很簡單,因?yàn)槟銢]有學(xué)習(xí)《BI 真經(jīng)》。一部學(xué)習(xí) Power BI 而不得不學(xué)習(xí)的內(nèi)容。我們正在以及持續(xù)在這個體系中把 Power BI,DAX 乃至 BI 的本質(zhì)邏輯和典型套路以最簡單方式呈現(xiàn)。
總結(jié):
1、內(nèi)卷之下,要么躺平,要么好好學(xué)習(xí)。
2、數(shù)字力是一個非常非常重要的機(jī)會。
3、數(shù)字力工具選 Power BI。
4、學(xué) Power BI 就必須學(xué)習(xí)《BI 真經(jīng)》。
這就是嚴(yán)密的邏輯鏈條。看懂的,就得行動了。沒看懂,那就不適合再做分析了。如圖:

相關(guān)文章

Power BI 終極系列課程《BI真經(jīng)》

BI真經(jīng) - 讓數(shù)據(jù)真正成為你的力量
掃碼與精英一起討論 Power BI,驗(yàn)證碼:data2021
點(diǎn)擊“閱讀原文”進(jìn)入學(xué)習(xí)中心
↙
