Forstå Power Query M-funksjoner
I power query M-formelspråket er en funksjon en tilordning fra et sett med inndataverdier til én enkelt utdataverdi. En funksjon skrives ved først å navngi funksjonsparameterne, og deretter gi et uttrykk for å beregne resultatet av funksjonen. Brødteksten i funksjonen følger gå til (=>)-symbolet. Alternativt kan typeinformasjon inkluderes på parametere og funksjonens returverdi. En funksjon defineres og aktiveres i brødteksten i en la-setning . Parametere og/eller returverdi kan være implisitte eller eksplisitte. Implisitte parametere og/eller returverdi er av hvilken som helst type. Skriv inn en hvilken som helst type som ligner på en objekttype på andre språk. Alle typer i M er avledet fra hvilken som helst type.
En funksjon er en verdi akkurat som et tall eller en tekstverdi, og kan inkluderes på linje akkurat som alle andre uttrykk. Eksemplet nedenfor viser en funksjon som er verdien for en Legg til-variabel som deretter aktiveres, eller utføres, fra flere andre variabler. Når en funksjon aktiveres, angis et sett med verdier som er logisk erstattet med det nødvendige settet med inndataverdier i brødtekstuttrykket for funksjonen.
Eksempel – eksplisitte parametere og returverdi
let
AddOne = (x as number) as number => x + 1,
//additional expression steps
CalcAddOne = AddOne(5)
in
CalcAddOne
Eksempel – implisitte parametere og returverdi
let
Add = (x, y) => x + y,
AddResults =
[
OnePlusOne = Add(1, 1), // equals 2
OnePlusTwo = Add(1, 2) // equals 3
]
in
AddResults
Finne det første elementet i en liste som er større enn 5, eller null ellers
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
Funksjoner kan brukes rekursivt. For å rekursivt referere til funksjonen, prefiks identifikatoren med @.
let
fact = (num) => if num = 0 then 1 else num * @fact (num-1)
in
fact(5) // equals 120
Hvert nøkkelord
Hvert nøkkelord brukes til enkelt å opprette enkle funksjoner. "hver ..." er syntaktisk sukker for en funksjonssignatur som tar _ parameteren "(_) => ..."
Hver av dem er nyttig når de kombineres med oppslagsoperatoren, som brukes som standard på _
Hver [CustomerID] er for eksempel den samme som hver _[CustomerID], som er den samme som (_) => _[CustomerID]
Eksempel – Bruke hvert i tabellradfilter
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"