Présentation des fonctions Power Query M
Dans le langage de formule Power Query M, une fonction est un mappage entre un ensemble de valeurs d’entrée et une valeur de sortie unique. Une fonction est écrite en nommant d’abord les paramètres de fonction, puis en fournissant une expression pour calculer le résultat de la fonction. Le corps de la fonction suit le symbole =>. Vous pouvez éventuellement inclure des informations de type dans les paramètres et la valeur de retour de la fonction. Une fonction est définie et appelée dans le corps d’une instruction let. Les paramètres et/ou la valeur de retour peuvent être implicites ou explicites. Les paramètres et/ou la valeur de retour implicites sont de type any (indifférent). Le type any est similaire à un type d’objet dans d’autres langages. Tous les types dans M dérivent du type any.
Une fonction est une valeur à l’instar d’un nombre ou d’une valeur de texte, et peut être incluse en ligne comme toute autre expression. L’exemple suivant montre une fonction qui est la valeur d’une variable Add , qui est ensuite appelée ou exécutée, à partir de plusieurs autres variables. Lorsqu’une fonction est appelée, un ensemble de valeurs est spécifié qui remplace logiquement le jeu requis de valeurs d’entrée dans l’expression du corps de la fonction.
Exemple : paramètres explicites et valeur de retour
let
AddOne = (x as number) as number => x + 1,
//additional expression steps
CalcAddOne = AddOne(5)
in
CalcAddOne
Exemple : paramètres implicites et valeur de retour
let
Add = (x, y) => x + y,
AddResults =
[
OnePlusOne = Add(1, 1), // equals 2
OnePlusTwo = Add(1, 2) // equals 3
]
in
AddResults
Rechercher le premier élément supérieur à 5 dans une liste, ou sinon la valeur 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
Les fonctions peuvent être utilisées de manière récursive. Pour faire référence à la fonction de manière récursive, préfixez l’identificateur avec @.
let
fact = (num) => if num = 0 then 1 else num * @fact (num-1)
in
fact(5) // equals 120
Mot clé each
Le mot clé each est utilisé pour créer facilement des fonctions simples. each ...
est le sucre syntactique pour une signature de fonction qui prend le _
paramètre (_) => ...
.
Chaque mot clé est utile lorsqu’il est combiné avec l’opérateur de recherche, qui est appliqué par défaut à _
.
Par exemple, each [CustomerID]
est le même que each _[CustomerID]
, qui est le même que (_) => _[CustomerID]
.
Exemple : utilisation de chaque filtre de ligne de table
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"