一個模糊匹配的度量,是怎麼寫出來的?|DAX案例及思路

前些天,我做了個小調查,讓我比較意外的是,調查結果中,大家最想學習的竟然是DAX:

一個模糊匹配的度量,是怎麼寫出來的?|DAX案例及思路

的確,對於很多初學DAX的朋友來說,函式一看好像都認識,因為大部分長得跟Excel裡一模一樣,但是,一要開始寫個度量公式,可能就感覺很抓瞎!

接下來,我會繼續用更多的例子,力求為到家撥開DAX的一些迷霧。

- 案例/問題 -

今天的例子比較簡單——分別用計算列和度量兩種方式,對編號進行模糊匹配:返回被非標準編號包含的標準編號。具體如下圖所示:

一個模糊匹配的度量,是怎麼寫出來的?|DAX案例及思路

對於這個問題,群裡有朋友竟然寫出了下面的度量,而且結果還是不對的:

一個模糊匹配的度量,是怎麼寫出來的?|DAX案例及思路

為什麼會搞得這麼複雜!!!???有點兒感覺是去學了什麼套路之類,然後想著往上套搞出來的——說實話,我沒看懂!

一個模糊匹配的度量,是怎麼寫出來的?|DAX案例及思路

前面的文章《DAX的核心,其實只有4個字!》裡我講過,DAX的核心思想,其實非常、非常簡單,就四個字“篩選、計算”!——

這四個字,大家永遠也不要忘記,只要是寫DAX公式,核心就是:怎麼能把需要的資料篩選出來?資料篩選出來後,怎麼計算?

- 思路/解法 -

回到這個例子,我們先看計算列的寫法:

篩選

顯然,就是用包含判斷的方法(FIND),從標準編號裡篩選(FILTER)出被當前非標準編號包含的資料。

計算

至於計算,這個問題就很簡單,實際沒有什麼計算,只需要從篩選出來的資料裡把需要的值取出來即可。

DAX裡常用來從表中取值的方法是SELECTCOLUMNS,即取表的某列,此時如果是單行表(只有1行),得到的結果就是所需的結果。

綜合起來,計算列公式如下:

一個模糊匹配的度量,是怎麼寫出來的?|DAX案例及思路

說完計算列,再來看看度量怎麼寫。

首先,寫度量,

我們要看這個度量的結果放在什麼樣的環境(切片器/篩選條件等)下用?

對於這個問題,這裡要求很簡單,就是如下圖所示的一個表或矩陣:非標準編號作為一列,透過度量計算得到的標準編號作為一列:

一個模糊匹配的度量,是怎麼寫出來的?|DAX案例及思路

對於度量和計算列,其實現的思路其實都是一樣的,還是我強調的“篩選、計算”四個字。只是,度量的計算環境通常要比計算列的要複雜,要注意的問題也多一些而已。

對於這個問題,非標準編號作為一列,總體上跟在表裡寫計算列其實很接近,即仍然是用FIND函式的方法,對標準編號表進行FILTER篩選,然後對篩選出的結果進行計算(取值)。

唯一要考慮的問題是度量總會面臨一個“總計”的問題,這種情況下,如果按照計算列的方式,總計行就很容易碰到接收返回多個值從而導致出錯的情況。

針對這種情況,最常用的方法就是加條件IF(ISFILTER())或IF(HASONEVALUE())或PBI裡用SELECTEDVALUE()來避免總計行多餘的計算。

最後的度量公式如下圖所示:

一個模糊匹配的度量,是怎麼寫出來的?|DAX案例及思路

其中都是幾個簡單的函式——當然,如果說這幾個函式都還不會,那最好還是先把DAX的基礎知識學一下。

最後再囉嗦一下,

在基本掌握DAX的基礎知識和常用函式的情況下,寫DAX公式時,一定要謹記“篩選、計算”這個核心思路,確保思路清晰而不是一團亂麻

——關於這個思路更加具體的應用,還可以參考文章《一個度量,是怎樣煉成的?| DAX重要思路》。

-

最通俗易懂Power系列影片

-

購書領60元影片券 or 直購影片送簽名書

TAG: DAX度量計算篩選編號