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"