了解 Power Query M 函式
在 Power Query M 公式語言中,函式是從一組輸入值到單一輸出值的對應。 函式的撰寫方式是先命名函式參數,然後提供運算式來計算函式的結果。 函式的主體會跟在前往 (=>) 符號之後。 可以在參數和函式的傳回值上包含選擇性的類型資訊。 函式會在 let 陳述式的主體中進行定義和叫用。 參數和/或傳回值可以是隱含或明確。 隱含參數和/或傳回值的類型是 any。 any 類型與其他語言中的 object 類型相似。 M 中所有的類型都是衍生自 any 類型。
函式是值,其類似數字或文字值,且可和其他任何運算式一樣以內嵌方式包含在其中。 下列範例顯示一個函式,這是 Add 變數的值,然後從數個其他變數叫用或執行。 叫用函式時,會指定一組值,以邏輯方式取代函式主體運算式內所需的輸入值集合。
範例 - 明確參數和傳回值
let
AddOne = (x as number) as number => x + 1,
//additional expression steps
CalcAddOne = AddOne(5)
in
CalcAddOne
範例 - 隱含參數和傳回值
let
Add = (x, y) => x + y,
AddResults =
[
OnePlusOne = Add(1, 1), // equals 2
OnePlusTwo = Add(1, 2) // equals 3
]
in
AddResults
找出清單中第一個大於 5 的項目,否則傳回 null
let
FirstGreaterThan5 = (list) =>
let
GreaterThan5 = List.Select(list, (n) => n> 5),
First = List.First(GreaterThan5)
in
First,
Results =
[
Found = FirstGreaterThan5({3,7,9}), // equals 7
NotFound = FirstGreaterThan5({1,3,4}) // equals null
]
in
Results
函式可以透過遞迴方式使用。 若要遞迴參考函式,請使用 @ 為識別碼加上前置詞。
let
fact = (num) => if num = 0 then 1 else num * @fact (num-1)
in
fact(5) // equals 120
Each 關鍵字
each 關鍵字可用來輕鬆建立簡單的函式。 each ...
是採用 參數(_) => ...
之函式簽章的_
語法糖。
與 查閱運算子結合時,每個 關鍵詞都很有用,預設會套用至 _
。
例如, each [CustomerID]
與 each _[CustomerID]
相同,與相同 (_) => _[CustomerID]
。
範例 - 在數據表數據列篩選中使用每個
Table.SelectRows(
Table.FromRecords({
[CustomerID = 1, Name = "Bob", Phone = "123-4567"],
[CustomerID = 2, Name = "Jim", Phone = "987-6543"] ,
[CustomerID = 3, Name = "Paul", Phone = "543-7890"] ,
[CustomerID = 4, Name = "Ringo", Phone = "232-1550"]
}),
each [CustomerID] = 2
)[Name]
// equals "Jim"