Expressions, valeurs et expression let

Une requête de langage de formule M Power Query est composée d’étapes d’expression de formule qui créent une requête hybride. Une expression de formule peut être évaluée (calculée) et produire une valeur. L’expression let encapsule un ensemble de valeurs à calculer, auxquelles des noms sont affectés, puis qui sont utilisées dans une expression ultérieure qui suit l’instruction in. Par exemple, une expression let peut contenir une variable Source qui est égale à la valeur de Text.Proper() et qui génère une valeur texte dans la casse appropriée.

Expression let

let
    Source = Text.Proper("hello world")
in
    Source

Dans l’exemple ci-dessus, Text.Proper("hello world") est évalué à « Hello World ».

Les sections suivantes décrivent les types des valeurs dans le langage.

Valeur primitive

Une valeur primitive est une valeur en une seule partie, comme un nombre, une valeur logique, du texte ou une valeur Null. Une valeur Null peut être utilisée pour indiquer l’absence de données.

Type Valeur d'exemple
Binary 00 00 00 02 // nombre de points (2)
Date 5/23/2015
DateTime 5/23/2015 12:00:00 AM
DateTimeZone 5/23/2015 12:00:00 AM -08:00
Duration 15:35:00
Logical true et false
Null null
Nombre 0, 1, -1, 1,5 et 2,3e-5
Texte "abc"
Temps 12:34:12 PM

Valeur de fonction

Une fonction est une valeur qui, quand elle est appelée avec des arguments, génère une nouvelle valeur. Les fonctions sont écrites en listant les paramètres de la fonction dans des parenthèses, suivis du symbole de destination =>, suivi de l’expression définissant la fonction. Par exemple, pour créer une fonction appelée « MyFunction » qui a deux paramètres et effectue un calcul sur parameter1 et parameter2 :

let
    MyFunction = (parameter1, parameter2) => (parameter1 + parameter2) / 2
in
    MyFunction

L’appel de MyFunction() retourne le résultat :

let
    Source = MyFunction(2, 4)
in
    Source

Ce code produit la valeur 3.

Valeurs de données structurées

Le langage M prend en charge les valeurs de données structurées suivantes :

Notes

Les données structurées peuvent contenir n’importe quelle valeur M. Pour voir quelques exemples, consultez Exemples supplémentaires de données structurées.

List

Une liste est une séquence ordonnée de base zéro de valeurs entourées d’accolades { }. Les caractères d’accolade { } sont également utilisés pour récupérer un élément d’une liste par position d’index. Consultez [Valeur de liste](#_List_value).

Notes

Power Query M prend en charge une taille de liste infinie, mais si une liste est écrite en tant que littéral, la liste a une longueur fixe. Par exemple, {1, 2, 3} a une longueur fixe de 3.

Voici quelques exemples de liste.

Valeur Type
{123, true, "A"} Liste contenant un nombre, une valeur logique et une valeur texte.
{1, 2, 3} Liste de nombres
{
    {1, 2, 3},
    {4, 5, 6}
}
Liste de listes de nombres
{
    [CustomerID = 1, Name = "Bob", Phone = "123-4567"],
    [CustomerID = 2, Name = "Jim", Phone = "987-6543"]
}
Liste d’enregistrements
{123, true, "A"}{0} Obtient la valeur du premier élément d’une liste. Cette expression retourne la valeur 123.
{
    {1, 2, 3},
    {4, 5, 6}
}{0}{1}
Obtient la valeur du deuxième élément à partir du premier élément de la liste. Cette expression retourne la valeur 2.

Enregistrement

Un enregistrement est un ensemble de champs. Un champ est une paire nom/valeur, où le nom est une valeur texte qui est unique dans l’enregistrement du champ. La syntaxe des valeurs d’enregistrement permet d’écrire des noms sans guillemets, une forme également appelée identificateurs. Un identificateur peut prendre les deux formes suivantes :

  • nom_identificateur, comme OrderID.

  • #"nom identificateur", par exemple #"Les données du jour sont : ".

Voici un enregistrement contenant des champs nommés « OrderID », « CustomerID », « Item » et « Price », avec les valeurs 1, 1, « Fishing rod » et 100.00. Les crochets [ ] indiquent le début et la fin d’une expression d’enregistrement, et ils sont utilisés pour obtenir la valeur d’un champ dans un enregistrement. Les exemples suivants montrent un enregistrement et comment obtenir la valeur du champ Item.

Voici un exemple d’enregistrement :

let Source =
        [
              OrderID = 1,
              CustomerID = 1,
              Item = "Fishing rod",
              Price = 100.00
        ]
in Source

Pour obtenir la valeur d’un élément Item, vous utilisez des crochets comme dans Source[Item] :

let Source =
    [
          OrderID = 1,
          CustomerID = 1,
          Item = "Fishing rod",
          Price = 100.00
    ]
in Source[Item] //equals "Fishing rod"

Table de charge de travail

Une table est un ensemble de valeurs organisées en colonnes nommées et en lignes. Le type de colonne peut être implicite ou explicite. Vous pouvez utiliser #table pour créer une liste de noms de colonnes et une liste de lignes. Une table de valeurs est une liste dans une liste. Les caractères d’accolades { } sont également utilisés pour récupérer une ligne d’une table par position d’index (accédez à l’Exemple 3 : Obtenir une ligne d’une table par position d’index).

Exemple 1 : Créer une table avec des types de colonnes implicites

let
  Source = #table(
    {"OrderID", "CustomerID", "Item", "Price"},
      {
          {1, 1, "Fishing rod", 100.00},
          {2, 1, "1 lb. worms", 5.00}
      })
in
    Source

Exemple 2 : Créer une table avec des types de colonnes explicites

let
    Source = #table(
    type table [OrderID = number, CustomerID = number, Item = text, Price = number],
        {
                {1, 1, "Fishing rod", 100.00},
             {2, 1, "1 lb. worms", 5.00}
        }
    )
in
    Source

Les deux exemples ci-dessus créent une table de la forme suivante :

OrderID CustomerID Élément Prix
1 1 Fishing rod 100,00
2 1 1 lb. worms 5,00

Exemple 3 : Obtenir une ligne d’une table par position d’index

let
    Source = #table(
    type table [OrderID = number, CustomerID = number, Item = text, Price = number],
        {
              {1, 1, "Fishing rod", 100.00},
              {2, 1, "1 lb. worms", 5.00}
         }
    )
in
    Source{1}

Cette expression retourne l’enregistrement suivant :

Champ Valeur
OrderID 2
CustomerID 1
Item 1 lb. worms
Price 5

Exemples supplémentaires de données structurées

Les données structurées peuvent contenir n’importe quelle valeur M. Voici quelques exemples :

Exemple 1 : Liste avec des valeurs [Primitive](#_Primitive_value_1), [Function](#_Function_value) et [Record](#_Record_value)

let
    Source =
{
   1,
   "Bob",
   DateTime.ToText(DateTime.LocalNow(), "yyyy-MM-dd"),
   [OrderID = 1, CustomerID = 1, Item = "Fishing rod", Price = 100.0]
}
in
    Source

L’évaluation de cette expression peut être visualisée comme suit :

List Example 1

Exemple 2 : Enregistrement contenant des valeurs primitives et des enregistrements imbriqués

let
    Source = [CustomerID = 1, Name = "Bob", Phone = "123-4567", Orders =
        {
              [OrderID = 1, CustomerID = 1, Item = "Fishing rod", Price = 100.0],
            [OrderID = 2, CustomerID = 1, Item = "1 lb. worms", Price = 5.0]
        }]
in
    Source

L’évaluation de cette expression peut être visualisée comme suit :

List Example 2

Remarque

Bien que de nombreuses valeurs puissent être écrites littéralement sous la forme d’une expression, une valeur n’est pas une expression. Par exemple, l’expression 1 s’évalue à la valeur 1 ; l’expression 1+1 s’évalue à la valeur 2. Cette distinction est subtile mais importante. Les expressions sont des recettes pour l’évaluation ; les valeurs sont les résultats de l’évaluation.

Expression if

L’expression if sélectionne entre deux expressions en fonction d’une condition logique. Par exemple :

if 2 > 1 then
    2 + 2
else
    1 + 1

La première expression (2 + 2) est sélectionnée si l’expression logique (2 > 1) a la valeur true, et la deuxième expression (1 + 1) est sélectionnée si sa valeur est false. L’expression sélectionnée (dans ce cas 2 + 2) est évaluée et devient le résultat de l’expression if (4).