前些天,我做了個小調查,讓我比較意外的是,調查結果中,大家最想學習的竟然是DAX:
的確,對於很多初學DAX的朋友來說,函式一看好像都認識,因為大部分長得跟Excel裡一模一樣,但是,一要開始寫個度量公式,可能就感覺很抓瞎!
接下來,我會繼續用更多的例子,力求為到家撥開DAX的一些迷霧。
- 案例/問題 -
今天的例子比較簡單——分別用計算列和度量兩種方式,對編號進行模糊匹配:返回被非標準編號包含的標準編號。具體如下圖所示:
對於這個問題,群裡有朋友竟然寫出了下面的度量,而且結果還是不對的:
為什麼會搞得這麼複雜!!!???有點兒感覺是去學了什麼套路之類,然後想著往上套搞出來的——說實話,我沒看懂!
前面的文章《DAX的核心,其實只有4個字!》裡我講過,DAX的核心思想,其實非常、非常簡單,就四個字“篩選、計算”!——
這四個字,大家永遠也不要忘記,只要是寫DAX公式,核心就是:怎麼能把需要的資料篩選出來?資料篩選出來後,怎麼計算?
- 思路/解法 -
回到這個例子,我們先看計算列的寫法:
篩選
顯然,就是用包含判斷的方法(FIND),從標準編號裡篩選(FILTER)出被當前非標準編號包含的資料。
計算
至於計算,這個問題就很簡單,實際沒有什麼計算,只需要從篩選出來的資料裡把需要的值取出來即可。
DAX裡常用來從表中取值的方法是SELECTCOLUMNS,即取表的某列,此時如果是單行表(只有1行),得到的結果就是所需的結果。
綜合起來,計算列公式如下:
說完計算列,再來看看度量怎麼寫。
首先,寫度量,
我們要看這個度量的結果放在什麼樣的環境(切片器/篩選條件等)下用?
對於這個問題,這裡要求很簡單,就是如下圖所示的一個表或矩陣:非標準編號作為一列,透過度量計算得到的標準編號作為一列:
對於度量和計算列,其實現的思路其實都是一樣的,還是我強調的“篩選、計算”四個字。只是,度量的計算環境通常要比計算列的要複雜,要注意的問題也多一些而已。
對於這個問題,非標準編號作為一列,總體上跟在表裡寫計算列其實很接近,即仍然是用FIND函式的方法,對標準編號表進行FILTER篩選,然後對篩選出的結果進行計算(取值)。
唯一要考慮的問題是度量總會面臨一個“總計”的問題,這種情況下,如果按照計算列的方式,總計行就很容易碰到接收返回多個值從而導致出錯的情況。
針對這種情況,最常用的方法就是加條件IF(ISFILTER())或IF(HASONEVALUE())或PBI裡用SELECTEDVALUE()來避免總計行多餘的計算。
最後的度量公式如下圖所示:
其中都是幾個簡單的函式——當然,如果說這幾個函式都還不會,那最好還是先把DAX的基礎知識學一下。
最後再囉嗦一下,
在基本掌握DAX的基礎知識和常用函式的情況下,寫DAX公式時,一定要謹記“篩選、計算”這個核心思路,確保思路清晰而不是一團亂麻
——關於這個思路更加具體的應用,還可以參考文章《一個度量,是怎樣煉成的?| DAX重要思路》。
-
最通俗易懂Power系列影片
-
購書領60元影片券 or 直購影片送簽名書