Opis funkcji Power Query M
W języku formuł Power Query M funkcja jest mapowaniem z zestawu wartości wejściowych na pojedynczą wartość wyjściową. Funkcja jest zapisywana przez najpierw nazewnictwo parametrów funkcji, a następnie podanie wyrażenia w celu obliczenia wyniku funkcji. Treść funkcji jest zgodna z symbolem goes-to (=>). Opcjonalnie można uwzględnić informacje o typie dla parametrów i zwracanej wartości funkcji. Funkcja jest definiowana i wywoływana w treści instrukcji let . Parametry i/lub wartość zwracana mogą być niejawne lub jawne. Niejawne parametry i/lub wartość zwracana są typu dowolne. Typ dowolny jest podobny do typu obiektu w innych językach. Wszystkie typy w języku M pochodzą z dowolnego typu.
Funkcja jest wartością podobną do liczby lub wartości tekstowej i może być uwzględniona w wierszu tak samo jak dowolne inne wyrażenie. W poniższym przykładzie przedstawiono funkcję, która jest wartością zmiennej Dodaj , która jest następnie wywoływana lub wykonywana z kilku innych zmiennych. Po wywołaniu funkcji określony jest zestaw wartości, które logicznie zastępują wymagany zestaw wartości wejściowych w wyrażeniu treści funkcji.
Przykład — jawne parametry i wartość zwracana
let
AddOne = (x as number) as number => x + 1,
//additional expression steps
CalcAddOne = AddOne(5)
in
CalcAddOne
Przykład — niejawne parametry i wartość zwracana
let
Add = (x, y) => x + y,
AddResults =
[
OnePlusOne = Add(1, 1), // equals 2
OnePlusTwo = Add(1, 2) // equals 3
]
in
AddResults
Znajdź pierwszy element listy większej niż 5 lub null w przeciwnym razie
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
Funkcje mogą być używane rekursywnie. Aby rekursywnie odwoływać się do funkcji, prefiks identyfikatora za pomocą znaku @.
let
fact = (num) => if num = 0 then 1 else num * @fact (num-1)
in
fact(5) // equals 120
Każde słowo kluczowe
Każde słowo kluczowe służy do łatwego tworzenia prostych funkcji. each ...
jest cukrem składniowym dla podpisu funkcji, który przyjmuje _
parametr (_) => ...
.
Każde słowo kluczowe jest przydatne w połączeniu z operatorem wyszukiwania, który jest domyślnie stosowany do ._
Na przykład each [CustomerID]
jest taka sama jak , która jest taka sama jak each _[CustomerID]
(_) => _[CustomerID]
.
Przykład — używanie każdego filtru wierszy tabeli
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"