Základné informácie o funkciách jazyka Power Query M

V jazyku vzorcov Power Query M je funkcia mapovaním z množiny vstupných hodnôt na jednu výstupnú hodnotu. Funkcia sa zapíše do prvého pomenovania parametrov funkcie a potom poskytne výraz na výpočet výsledku funkcie. Telo funkcie nasleduje po symbole "goes-to" (=>). Voliteľne môžete zadať typové informácie o parametroch a vrátenú hodnotu funkcie. Funkcia je definovaná a vyvolaná v tele príkazu let . Parametre alebo vrátená hodnota môže byť implicitná alebo explicitná. Implicitné parametre alebo vrátená hodnota sú typu any. Typ any je podobný objektovému typu v iných jazykoch. Všetky typy v jazyku M pochádzajú z typu any.

Funkcia je hodnota rovnako ako číselná alebo textová hodnota a môže byť zahrnutá v riadku rovnako ako akýkoľvek iný výraz. Nasledujúci príklad znázorňuje funkciu, ktorá je hodnotou funkcie Add variable (Pridať premennú), ktorá sa potom vyvolá alebo vykoná z niekoľkých ďalších premenných. Pri vyvolaní funkcie sa zadá množina hodnôt, ktoré sú logicky nahradené za požadovanú množinu vstupných hodnôt vo výraze tela funkcie.

Príklad – explicitné parametre a vrátená hodnota

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

Príklad – implicitné parametre a vrátená hodnota

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

Nájdite prvý prvok zoznamu väčší ako 5 alebo v opačnom prípade hodnotu null

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  

Funkcie možno použiť rekurzívne. Ak chcete rekurzívne odkazovať na funkciu, pridajte k identifikátoru predponu @.

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

Kľúčové slovo each

Kľúčové slovo each sa používa na jednoduché vytváranie jednoduchých funkcií. "každý ..." je syntaktický vzor pre podpis funkcie, ktorý má parameter _ "(_) => ..."

Each je užitočné v kombinácii s operátorom vyhľadávania, ktorý sa predvolene používa na _
Napríklad každé [CustomerID] je rovnaké ako každé _[CustomerID], čo je rovnaké ako (_) => _[CustomerID]

Príklad – použitie každej z hodnôt vo filtri riadkov tabuľky

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"