Informazioni sulle funzioni M di Power Query
Nel linguaggio delle formule M di Power Query, una funzione è un mapping da un set di valori di input a un singolo valore di output. Una funzione viene scritta specificando prima di tutto i parametri della funzione e quindi specificando un'espressione per calcolare il risultato della funzione. Il corpo della funzione segue il simbolo vai a (=>). Facoltativamente, possono essere incluse informazioni sul tipo nei parametri e nel valore restituito della funzione. Una funzione viene definita e richiamata nel corpo di un'istruzione let. I parametri e/o il valore restituito possono essere impliciti o espliciti. I parametri impliciti e/o il valore restituito sono di tipo any. Il tipo any è simile a un tipo di oggetto in altri linguaggi. Tutti i tipi in M derivano dal tipo any.
Una funzione è un valore esattamente come un numero o un valore di testo e può essere inclusa inline come qualsiasi altra espressione. Nell'esempio seguente viene illustrata una funzione che corrisponde al valore di una variabile Add che viene quindi richiamata, o eseguita, da varie altre variabili. Quando viene richiamata una funzione, viene specificato un set di valori che vengono sostituiti in modo logico per il set di valori di input obbligatorio nell'espressione del corpo della funzione.
Esempio - Parametri espliciti e valore restituito
let
AddOne = (x as number) as number => x + 1,
//additional expression steps
CalcAddOne = AddOne(5)
in
CalcAddOne
Esempio - Parametri impliciti e valore restituito
let
Add = (x, y) => x + y,
AddResults =
[
OnePlusOne = Add(1, 1), // equals 2
OnePlusTwo = Add(1, 2) // equals 3
]
in
AddResults
Trovare il primo elemento di un elenco maggiore di 5 o Null in caso contrario
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
Le funzioni possono essere usate in modo ricorsivo. Per fare riferimento in modo ricorsivo alla funzione, anteporre @ all'identificatore.
let
fact = (num) => if num = 0 then 1 else num * @fact (num-1)
in
fact(5) // equals 120
Parola chiave each
La parola chiave each viene usata per creare facilmente funzioni semplici. "Each..." è un espediente sintattico per una firma di funzione che accetta il parametro _ "(_) => ..."
Each è utile in combinazione con l'operatore di ricerca, che viene applicato per impostazione predefinita a _
Ad esempio, each [CustomerID] è uguale a each [CustomerID], che corrisponde a (_) => _[CustomerID]
Esempio - Uso di each in un filtro di riga di tabella
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"