Om M-funktioner i Power Query
I M-formelsproget i Power Query er en funktion en tilknytning fra et sæt inputværdier til en enkelt outputværdi. En funktion skrives ved først at navngive funktionsparametrene og derefter angive et udtryk til beregning af resultatet af funktionen. Brødteksten i funktionen følger symbolet går til (=>). Du kan eventuelt inkludere typeoplysninger om parametre og funktionens returværdi. En funktion defineres og aktiveres i brødteksten i en let-sætning . Parametre og/eller returværdier kan være implicitte eller eksplicitte. Implicitte parametre og/eller returværdier er af typen enhver. Type any svarer til en objekttype på andre sprog. Alle typer i M stammer fra typen any.
En funktion er en værdi på samme måde som et tal eller en tekstværdi og kan inkluderes i linjen på samme måde som ethvert andet udtryk. I følgende eksempel vises en funktion, der er værdien af en Add-variabel , som derefter aktiveres eller udføres fra flere andre variabler. Når en funktion aktiveres, angives der et sæt værdier, der logisk erstatter det påkrævede sæt inputværdier i funktionsbrødtekstudtrykket.
Eksempel – Eksplicitte parametre og returværdi
let
AddOne = (x as number) as number => x + 1,
//additional expression steps
CalcAddOne = AddOne(5)
in
CalcAddOne
Eksempel – implicitte parametre og returværdi
let
Add = (x, y) => x + y,
AddResults =
[
OnePlusOne = Add(1, 1), // equals 2
OnePlusTwo = Add(1, 2) // equals 3
]
in
AddResults
Find det første element på en liste, der er større end 5, ellers er 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
Funktioner kan bruges rekursivt. Hvis du vil referere rekursivt til funktionen, skal du foranfikse id'et med @.
let
fact = (num) => if num = 0 then 1 else num * @fact (num-1)
in
fact(5) // equals 120
Hvert nøgleord
Hvert nøgleord bruges til nemt at oprette enkle funktioner. each ...
er syntaktisk sukker for en funktionssignatur, der tager _
parameteren (_) => ...
.
Hvert nøgleord er nyttigt, når det kombineres med opslagsoperatoren, som som standard anvendes på _
.
Er f.eks. each [CustomerID]
det samme som each _[CustomerID]
, hvilket er det samme som (_) => _[CustomerID]
.
Eksempel – Brug af hvert filter i tabelrække
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"