Partager via


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"