Del via


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"