使用Power Query進行複雜一些的數據處理,離不開M函數,目前已經有超過700個函數了,基本上各式各樣的數據處理需求都可以使用M函數實現,如果你覺得這些還不夠,或者使用起來不是很方便,也可以在PQ中自定義函數。

自定義函數的語法

如果在M編輯器中看到這個符號: => ,就是有自定義函數在裡面,自定義函數的基本語法是:

函數名=(參數1,參數2,參數3……)=>表達式

函數名可以任意寫,只要和M語言裏的關鍵字不要重複就行,參數至少有1個,放在括弧中,如果有多個參數,以逗號分隔,=>後面就是自定義函數的表達式。

為了保證結果的準確性,可以預先限定參數的數據類型,假如有兩個參數a和b,限制為數值型,可以這樣寫:

函數名=(a as number,b as number)=>表達式

當然不限制也是可以的,不限制就是可以為任意類型。

參數還可以是可選的,在參數前加上optional就可以了,比如有兩個參數,第一個參數a,第二個參數b是可選參數,自定義函數這樣寫:

函數名=(a,optional b)=>表達式

這樣只要輸入參數a,無論是否輸入參數b都可以調用這個自定義函數了。

自定義函數示例

我們先在Power Query編輯器中創建一個簡單的自定義函數,新建一個空查詢,在編輯器重輸入:= (x)=>{1..x},確定後出現參數調用窗口,

這個自定義函數只有一個參數x,生成從1到x的序列,指定為自定義函數後,左邊的空查詢類型就變成了fx,名稱可以根據自定義函數的含義進行重命名,這裡把函數名改成mylist。

參數x輸入10,點擊"調用":

就生成了從1到10到一個序列。

自定義函數的參數不是每次都要手動輸入進去,同樣可以調用其他數據,比如將上面的這個序列轉化為表,然後添加一個自定義列=mylist([Column1])

這個自定義列的每一行數據,就是從1到第一列數據的序列,

從這裡也可以看出,自定義函數mylist可以和其他標準的M函數一樣使用。

自定義函數也並不是一定要提前定義好,還可以在需要的時候隨時自定義,並立即使用,還是上面的這張表,需要對第一列累計求和,即計算從第一行到當前行的合計數。

添加自定義列,公式可以這樣寫:

累計=List.Sum(Table.SelectRows(轉換為表,(x)=>x[Column1]<=[Column1])[Column1])

然後就生成一列累計數,和預想的一致,

其中(x)=>x[Column1]<=[Column1]就是一個自定義函數,該自定義函數作為Table.SelectRows的條件返回小於等於當前行的所有行,然後對篩選出的這些行的[Column1]列,使用List.Sum來求和。

不過這種在某個步驟中使用的自定義函數,只能供該查詢使用,而前面生成的自定義函數mylist,可以供該文件內的所有查詢使用。

其實前面的文章中也使用過自定義函數,比如使用M生成日期表就使用了自定義函數,

可以點擊圖片查看該文,瞭解利用自定義函數製作日期表的用法。

通過以上的介紹,基本可以對自定義函數有個初步的瞭解,其實自定義函數的用法很廣泛,以後在進行複雜的數據處理時還會經常用到它。

公眾號:PowerBI星球

推薦閱讀:

相關文章