使用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」,獲取145頁入門電子書,2019年,送自己一個技能!
THE END
.
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!