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"