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 loogisesti korvaa vaaditut syötearvojen joukon 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 _
(_) => ...
.
Kukin avainsana 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"