Share via


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, som 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 værdisæt, som logisk erstattes af 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. "hver ..." er syntaktisk sukker for en funktionssignatur, der bruger parameteren _"(_) => ..."

Hver enkelt er nyttig, når den kombineres med opslagsoperatoren, som som standard anvendes på _
Hver [CustomerID] er f.eks. den samme som hver _[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"