Delen via


Informatie over Power Query M-functies

In de formuletaal Power Query M is een functie een toewijzing van een set invoerwaarden aan één uitvoerwaarde. Een functie wordt geschreven door eerst de functieparameters een naam te geven en vervolgens een expressie op te geven om het resultaat van de functie te berekenen. De hoofdtekst van de functie volgt het symbool 'goes-to' (=>). Typgegevens kunnen eventueel worden opgenomen in parameters en de retourwaarde van de functie. Een functie wordt gedefinieerd en aangeroepen in de hoofdtekst van een let-instructie . Parameters en/of retourwaarde kunnen impliciet of expliciet zijn. Impliciete parameters en/of retourwaarde zijn van het type. Typ een willekeurige is vergelijkbaar met een objecttype in andere talen. Alle typen in M zijn afgeleid van elk type.

Een functie is een waarde, net als een getal of een tekstwaarde, en kan net als elke andere expressie in de regel worden opgenomen. In het volgende voorbeeld ziet u een functie die de waarde is van een variabele Toevoegen die vervolgens vanuit verschillende andere variabelen wordt aangeroepen of uitgevoerd. Wanneer een functie wordt aangeroepen, wordt een set waarden opgegeven die logisch worden vervangen door de vereiste set invoerwaarden in de hoofdtekstexpressie van de functie.

Voorbeeld: expliciete parameters en retourwaarde

let  
    AddOne = (x as number) as number => x + 1,  
    //additional expression steps  
    CalcAddOne = AddOne(5)  
in  
    CalcAddOne  

Voorbeeld: impliciete parameters en retourwaarde

let  
    Add = (x, y) => x + y,  
    AddResults =   
        [  
            OnePlusOne = Add(1, 1),     // equals 2  
            OnePlusTwo = Add(1, 2)      // equals 3  
    ]  
in  
    AddResults  

Het eerste element van een lijst zoeken dat groter is dan 5 of anderszins 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  

Functies kunnen recursief worden gebruikt. Als u recursief naar de functie wilt verwijzen, moet u de id vooraf laten gaan door @.

let   
    fact = (num) => if num = 0 then 1 else num * @fact (num-1)   
in   
    fact(5) // equals 120  

Elk trefwoord

Het trefwoord wordt gebruikt om eenvoudig eenvoudige functies te maken. "elke ..." is syntactische suiker voor een functiehandtekening die de _-parameter "(_) => ..."

Elk is handig in combinatie met de opzoekoperator, die standaard wordt toegepast op _
Elke [CustomerID] is bijvoorbeeld hetzelfde als elke _[CustomerID], wat hetzelfde is als (_) => _[CustomerID]

Voorbeeld: elk gebruiken in het filter voor tabelrijen

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"