Power Query M -funktioiden ymmärtäminen

Power Query M -kaavakielessä funktio on yhdistämismääritys syötearvojen joukosta yksittäiseen tulostearvoon. Funktio kirjoitetaan nimeämällä ensin funktion parametrit ja antamalla sitten lauseke, jolla lasketaan funktion tulos. Funktion leipätekstiä seuraa merkki =>. Vaihtoehtoisesti tyyppitiedot voidaan sisällyttää parametreihin ja funktion palautusarvoon. Funktio määritetään ja käynnistetään let-lausekkeen leipätekstissä. Parametrit ja/tai palautusarvo voivat olla implisiittisiä tai eksplisiittisiä. Implisiittisten parametrien ja/tai palautusarvon tyyppi on mikä tahansa. Tyyppi mikä tahansa on samanlainen kuin muilla kielillä oleva objektityyppi. Kaikki M:n tyypit johdetaan tyypistä mikä tahansa.

Funktio on arvo, aivan kuten luku- tai tekstiarvokin, ja se voidaan sisällyttää riviin samalla tavalla kuin muutkin lausekkeet. Seuraavassa esimerkissä näytetään funktio, joka on Lisää-muuttujan arvo, joka käynnistetään tai suoritetaan useista muista muuttujista. Kun funktio käynnistetään, määritetään arvojoukko, joka korvataan loogisesti vaadituille syötearvojen joukolle funktion leipätekstilausekkeessa.

Esimerkki – eksplisiittiset parametrit ja palautusarvo

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

Esimerkki – implisiittiset parametrit ja palautusarvo

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

Selvitä luettelon ensimmäinen elementti, joka on suurempi kuin 5, tai muussa tapauksessa tyhjäarvo

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  

Funktioita voidaan käyttää rekursiivisesti. Jos haluat viitata funktioon rekursiivisesti, lisää tunnisteen etuliitteeksi @.

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

Each (jokainen) -avainsana

Each-avainsanan avulla voit helposti luoda yksinkertaisia funktioita. "each..." on syntaktinen sokeri funktion allekirjoitukselle, joka ottaa _ parametrin "(_) => ..."

Each on hyödyllinen, kun se yhdistetään hakuoperaattoriin, jota käytetään oletusarvoisesti parametrissa _
Esimerkiksi each [CustomerID] on sama kuin each _[CustomerID], joka on sama kuin (_) => _[CustomerID]

Esimerkki – Each-funktion käyttäminen taulukon rivisuodattimena

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"