Modèle d’évaluation

Le modèle d’évaluation du langage de formules Power Query M est modélisé d’après le modèle d’évaluation généralement présent dans les tableurs, où l’ordre des calculs peut être déterminé en fonction des dépendances entre les formules dans les cellules.

Si vous avez écrit des formules dans un tableur tel qu’Excel, vous pouvez reconnaître que les formules de gauche aboutissent aux valeurs de droite quand elles sont calculées :

Evaluation Model 1

Evaluation Model 2

Dans M, une expression peut référencer des expressions précédentes par nom, et le processus d’évaluation détermine automatiquement l’ordre dans lequel les expressions référencées sont calculées.

Nous allons utiliser un enregistrement pour générer une expression qui est équivalente à l’exemple de feuille de calcul ci-dessus. Quand vous initialisez la valeur d’un champ, vous faites référence à d’autres champs de l’enregistrement au moyen du nom du champ, comme suit :

[
    A1 = A2 * 2,
    A2 = A3 + 1,
    A3 = 1
]

L’expression ci-dessus aboutit à l’enregistrement suivant :

[
    A1 = 4,
    A2 = 2,
    A3 = 1
]

Les enregistrements peuvent être contenus, ou imbriqués, dans d’autres enregistrements. Vous pouvez utiliser l’opérateur de recherche ([]) pour accéder aux champs d’un enregistrement par nom. Par exemple, l’enregistrement suivant a un champ nommé Sales contenant un enregistrement et un champ nommé Total qui accède aux champs FirstHalf et SecondHalf de l’enregistrement Sales :

[
    Sales = [ FirstHalf = 1000, SecondHalf = 1100 ],
    Total = Sales[FirstHalf] + Sales[SecondHalf]
]

L’expression ci-dessus aboutit à l’enregistrement suivant :

[
    Sales = [ FirstHalf = 1000, SecondHalf = 1100 ],
    Total = 2100
]

Vous utilisez l’opérateur d’index positionnel ({}) pour accéder à un élément d’une liste par son index numérique. Vous faites référence aux valeurs d’une liste à l’aide d’un index de base zéro à partir du début de la liste. Par exemple, les index 0 et 1 sont utilisés pour référencer le premier et le deuxième éléments de la liste ci-dessous :

[
    Sales =
        {
            [
                Year = 2007,
                FirstHalf = 1000,
                SecondHalf = 1100,
                Total = FirstHalf + SecondHalf // equals 2100
            ],
            [
                Year = 2008,
                FirstHalf = 1200,
                SecondHalf = 1300,
                Total = FirstHalf + SecondHalf // equals 2500
            ]
        },
    #"Total Sales" = Sales{0}[Total] + Sales{1}[Total] // equals 4600
]

Évaluation différée et évaluation hâtive

Les expressions de membre List, Record et Table ainsi que les expressions let (consultez Expressions, valeurs et expression Let), sont évaluées à l’aide de l’évaluation différée. Cela signifie qu’elles sont évaluées uniquement si nécessaire. Toutes les autres expressions sont évaluées à l’aide de l’évaluation hâtive. Cela signifie qu’elles sont évaluées dès lors qu’elles sont rencontrées dans le processus d’évaluation. Pour bien assimiler ces techniques, gardez à l’esprit que l’évaluation d’une expression de liste ou d’enregistrement retourne une valeur de liste ou d’enregistrement qui sait comment ses éléments de liste ou champs d’enregistrement doivent être calculés, quand ils sont demandés (par des opérateurs de recherche ou d’index).