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 rappresenta il valore di una variabile Add , che viene quindi richiamata o eseguita, da diverse altre variabili. Quando viene richiamata una funzione, viene specificato un set di valori che sostituisce logicamente il set obbligatorio di valori di input all'interno dell'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 ...
è lo zucchero sintattico per una firma di funzione che accetta il _
parametro (_) => ...
.
La parola chiave each è utile se combinata con l'operatore di ricerca, che viene applicato per impostazione predefinita a _
.
Ad esempio, each [CustomerID]
è uguale each _[CustomerID]
a , che corrisponde a (_) => _[CustomerID]
.
Esempio- Uso di ogni 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"