Principy funkcí Power Query M

V jazyce vzorců Power Query M je funkce mapování ze sady vstupních hodnot na jednu výstupní hodnotu. Funkce je napsána prvním pojmenováním parametrů funkce a poskytnutím výrazu pro výpočet výsledku funkce. Tělo funkce se řídí symbolem goes-to (=>). Volitelně lze informace o typech zahrnout do parametrů a návratové hodnoty funkce. Funkce je definována a vyvolána v těle příkazu let . Parametry a/nebo návratová hodnota mohou být implicitní nebo explicitní. Implicitní parametry a/nebo návratová hodnota jsou typu jakékoli. Jakýkoli typ objektu je podobný typu v jiných jazycích. Všechny typy v jazyce M jsou odvozeny od typu.

Funkce je hodnota stejně jako číslo nebo textová hodnota a může být zahrnuta v řádku stejně jako jakýkoli jiný výraz. Následující příklad ukazuje funkci, která je hodnotou add proměnné, která je následně vyvolána nebo spuštěna z několika dalších proměnných. Při vyvolání funkce je zadána sada hodnot, které jsou logicky nahrazeny požadovanou sadou vstupních hodnot v rámci výrazu těla funkce.

Příklad – explicitní parametry a návratová hodnota

let  
    AddOne = (x as number) as number => x + 1,  
    //additional expression steps  
    CalcAddOne = AddOne(5)  
in  
    CalcAddOne  

Příklad – implicitní parametry a návratová hodnota

let  
    Add = (x, y) => x + y,  
    AddResults =   
        [  
            OnePlusOne = Add(1, 1),     // equals 2  
            OnePlusTwo = Add(1, 2)      // equals 3  
    ]  
in  
    AddResults  

Vyhledání prvního prvku seznamu většího než 5 nebo null jinak

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  

Funkce je možné používat rekurzivně. Chcete-li rekurzivně odkazovat na funkci, předpona identifikátoru @.

let   
    fact = (num) => if num = 0 then 1 else num * @fact (num-1)   
in   
    fact(5) // equals 120  

Každé klíčové slovo

Každé klíčové slovo slouží k snadnému vytváření jednoduchých funkcí. "každý..." je syntaktický cukr pro podpis funkce, který přebírá _ parametr "(_) => ..."

Každá z nich je užitečná v kombinaci s operátorem vyhledávání, který se ve výchozím nastavení použije na hodnotu _
Například každý [CustomerID] je stejný jako každý _[CustomerID], což je stejné jako (_) => _[CustomerID]

Příklad – Použití každého z nich ve filtru řádků tabulky

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"