Présentation des tableaux et enregistrements dans PowerAppsUnderstand tables and records in PowerApps

Vous pouvez créer une application qui accède aux informations dans Microsoft Excel, SharePoint, SQL Server et plusieurs autres sources qui stockent des données dans des tableaux et des enregistrements.You can create an app that accesses information in Microsoft Excel, SharePoint, SQL Server, and several other sources that store data in records and tables. Pour travailler plus efficacement avec ce type de données, passez en revue les concepts qui sont à la base de ces structures.To work most effectively with this kind of data, review the concepts that underlie these structures.

  • Un enregistrement contient une ou plusieurs catégories d’informations sur une personne, un lieu ou une chose.A record contains one or more categories of information about a person, a place, or a thing. Par exemple, un enregistrement peut contenir le nom, l’adresse e-mail et le numéro de téléphone d’un client donné.For example, a record might contain the name, the email address, and the phone number of a single customer. D’autres outils font référence à un enregistrement en tant que « ligne » ou « élément ».Other tools refer to a record as a "row" or an "item."
  • Un tableau contient un ou plusieurs enregistrements qui contiennent les mêmes catégories d’informations.A table holds one or more records that contain the same categories of information. Par exemple, un tableau peut contenir le nom, l’adresse e-mail et le numéro de téléphone de 50 clients.For example, a table might contain the names, the email addresses, and the phone numbers of 50 customers.

Dans votre application, vous allez utiliser des formules pour créer, mettre à jour et manipuler les tableaux et les enregistrements.In your app, you'll use formulas to create, update, and manipulate records and tables. Vous allez probablement lire et écrire des données dans une source de données externe, qui est un tableau étendu.You'll probably read and write data to an external data source, which is an extended table. En outre, vous pouvez créer un ou plusieurs tableaux internes appelés collections.In addition, you might create one or more internal tables, which are called collections.

Vous pouvez créer diverses formules qui prennent le nom d’un tableau en tant qu’argument. Il peut s’agir par exemple d’une formule dans Excel qui prend une ou plusieurs références de cellule en tant qu’arguments.You can build a variety of formulas that take the name of a table as an argument, just as a formula in Excel takes one or more cell references as arguments. Certaines formules dans PowerApps retournent un tableau qui reflète les autres arguments que vous spécifiez.Some formulas in PowerApps return a table that reflects the other arguments that you specify. Par exemple, vous pouvez créer une formule pour les raisons suivantes :For example, you might create a formula:

  • Mettre à jour un enregistrement dans un tableau en spécifiant ce tableau comme étant un des arguments de la fonction Patchto update a record in a table by specifying that table as one of multiple arguments for the Patch function
  • Ajouter, supprimer et renommer les colonnes d’un tableau en spécifiant ce tableau en tant qu’argument de la fonction AddColumns, DropColumns ou RenameColumns.to add, remove, and rename columns in a table by specifying that table as an argument for the AddColumns, DropColumns, or RenameColumns function. Aucune de ces fonctions ne modifie le tableau d’origine.None of those functions modifies the original table. Au lieu de cela, la fonction retourne un autre tableau basé sur les autres arguments que vous spécifiez.Instead, the function returns another table based on the other arguments that you specify.

Éléments d’un tableauElements of a table

EnregistrementsRecords

Chaque enregistrement contient une ou plusieurs catégories d’informations sur une personne, un lieu ou une chose.Each record contains at least one category of information for a person, a place, or a thing. L’exemple ci-dessus montre un enregistrement pour chaque produit (Chocolate, Bread et Water) et une colonne pour chaque catégorie d’informations (Price, Quantity on Hand et Quantity on Order).The example above shows a record for each product (Chocolate, Bread, and Water) and a column for each category of information (Price, Quantity on Hand, and Quantity on Order).

Dans une formule, vous pouvez référencer un enregistrement par lui-même, en dehors du contexte d’un tableau, en utilisant des accolades.In a formula, you can refer to a record by itself, outside of a table's context, by using curly braces. Par exemple, l’enregistrement { Name: "Strawberries", Price: 7.99 } n’est associé à aucun tableau.For example, this record { Name: "Strawberries", Price: 7.99 } isn't associated with a table.

ChampsFields

Un champ est une information dans un enregistrement.A field is an individual piece of information in a record. Vous pouvez visualiser ce type de champ en tant que valeur dans la colonne d’un enregistrement particulier.You can visualize this sort of field as a value in a column for a particular record.

Tout comme avec un contrôle, vous faites référence à un champ d’un enregistrement à l’aide de l’opérateurJust as with a control, you refer to a field of a record by using the . . sur l’enregistrement.operator on the record. Par exemple, First(Products).Name retourne le champ Name pour le premier enregistrement du tableau Products.For example, First(Products).Name returns the Name field for the first record in the Products table.

Un champ peut contenir un autre enregistrement ou une autre table (voir l’exemple de la fonction GroupBy).A field can contain another record or table, as the example for the GroupBy function shows. Vous pouvez imbriquer autant de niveaux d’enregistrements et de tableaux que vous le souhaitez.You can nest as many levels of records and tables as you want.

ColonnesColumns

Une colonne fait référence au même champ correspondant à un ou plusieurs enregistrements d’un tableau.A column refers to the same field for one or more records in a table. Dans l’exemple ci-dessus, chaque produit possède un champ Price et ce prix est indiqué dans la même colonne pour tous les produits.In the above example, each product has a price field, and that price is in the same column for all products. Le tableau ci-dessus comporte quatre colonnes, affichées horizontalement en haut :The above table has four columns, shown horizontally across the top:

  • NameName
  • PricePrice
  • Quantity on HandQuantity on Hand
  • Quantity on OrderQuantity on Order

Le nom de la colonne reflète les champs de cette colonne.The column's name reflects the fields in that column.

Toutes les valeurs d’une colonne ont le même type de données.All values within a column are of the same data type. Dans l’exemple ci-dessus, la colonne « Quantity on Hand » contient toujours un nombre et ne peut pas contenir de chaîne, telle que « 12 unités », pour un même enregistrement.In the above example, the "Quantity on Hand" column always contains a number and can't contain a string, such as "12 units," for one record. La valeur d’un champ peut également être vide.The value of any field may also be blank.

Dans d’autres outils, il se peut que les colonnes soient dénommées « champs ».You may have referred to columns as "fields" in other tools.

Note

Pour des sources de données Excel ou SharePoint contenant des noms de colonne avec des espaces, PowerApps remplace les espaces par « _x0020_ ».For SharePoint and Excel data sources that contain column names with spaces, PowerApps will replace the spaces with "_x0020_". Par exemple, le libellé « Nom de colonne » dans SharePoint ou Excel apparaît sous la forme « Nom_x0020_de_x0020_colonne » dans PowerApps quand il s’affiche dans la mise en page des données ou est utilisé dans une formule.For example, "Column Name" in SharePoint or Excel will appear as "Column_x0020_Name" in PowerApps when displayed in the data layout or used in a formula.

TableauTable

Un tableau comprend un ou plusieurs enregistrements, chacun disposant de plusieurs champs qui ont des noms cohérents entre les enregistrements.A table comprises one or more records, each with multiple fields that have consistent names across the records.

Un tableau stocké dans une source de données ou une collection a un nom, que vous utilisez pour faire référence au tableau et le transmettre à des fonctions qui utilisent des tableaux en tant qu’arguments.Any table that's stored in a data source or a collection has a name, which you use to refer to the table and pass it to functions that take tables as arguments. Les tableaux peuvent également être le résultat d’une fonction ou d’une formule.Tables can also be the result of a function or a formula.

Comme dans l’exemple suivant, vous pouvez faire référence à un tableau dans une formule à l’aide de la fonction Table avec un jeu d’enregistrements, que vous insérez entre des accolades :As in the following example, you can express a table in a formula by using the Table function with a set of records, which you express in curly braces:

Table( { Value: "Strawberry" }, { Value: "Vanilla" } )Table( { Value: "Strawberry" }, { Value: "Vanilla" } )

Vous pouvez également définir un tableau à une seule colonne avec des crochets.You can also define a single-column table with square brackets. Méthode équivalente pour écrire la formule ci-dessus :An equivalent way to write the above:

[ "Strawberry", "Vanilla" ][ "Strawberry", "Vanilla" ]

Formules de tableauTable formulas

Dans Excel et PowerApps, vous utilisez des formules pour manipuler des nombres et des chaînes de texte de la même manière :In Excel and PowerApps, you use formulas to manipulate numbers and strings of text in similar ways:

  • Dans Excel, tapez une valeur, telle que 42, dans la cellule A1, puis tapez une formule, telle que A1+2, dans une autre cellule, pour afficher la valeur 44.In Excel, type a value, such as 42, in cell A1, and then type a formula, such as A1+2, in another cell to show the value of 44.
  • Dans PowerApps, définissez la propriété Default de Slider1 sur 42 et définissez la propriété Text d’une étiquette sur Slider1.Value + 2 pour afficher la valeur 44.In PowerApps, set the Default property of Slider1 to 42, and set the Text property of a label to Slider1.Value + 2 to show the value of 44.

Dans les deux cas, la valeur calculée change automatiquement si vous modifiez les valeurs des arguments (par exemple, le nombre indiqué dans la cellule A1 ou la valeur de Slider1).In both cases, the calculated value changes automatically if you change the values of the arguments (for example, the number in cell A1 or the value of Slider1).

De même, vous pouvez utiliser des formules pour atteindre et manipuler des données dans des tableaux et des enregistrements.Similarly, you can use formulas to access and manipulate data in tables and records. Vous pouvez utiliser des noms de tableaux en tant qu’arguments dans des formules, comme Min(Catalog, Price) pour afficher la valeur la plus petite dans la colonne Price du tableau Catalog.You can use names of tables as arguments in some formulas, such as Min(Catalog, Price) to show the lowest value in the Price column of the Catalog table. D’autres formules fournissent des tableaux entiers comme valeurs de retour, tels que RenameColumns(Catalog, "Price", "Cost"), qui retourne tous les enregistrements du tableau Catalog, mais remplace le nom de la colonne Price par Cost.Other formulas provide whole tables as return values, such as RenameColumns(Catalog, "Price", "Cost"), which returns all the records from the Catalog table but changes the name of the Price column to Cost.

Tout comme avec des nombres, les formules qui impliquent des tableaux et des enregistrements sont recalculées automatiquement à mesure que le tableau ou l’enregistrement sous-jacent change.Just as with numbers, formulas that involve tables and records are automatically recalculated as the underlying table or record changes. Si la valeur de coût d’un produit du tableau Catalog passe en dessous du minimum précédent, la valeur de retour de la formule Min change automatiquement.If the cost of a product in the Catalog table is lowered below the previous minimum, the return value of the Min formula will automatically change to match it.

Examinons quelques exemples simples.Let's walk through some simple examples.

  1. Ajoutez un contrôle Galerie de texte et définissez sa propriété Items sur le nom d’un tableau.Add a Text gallery control, and set its Items property to the name of a table.

    Par défaut, la galerie affiche l’espace réservé au format texte d’un tableau nommé TextualGallerySample.By default, the gallery shows placeholder text from a table named TextualGallerySample. La propriétéItems de la galerie est automatiquement définie sur ce tableau.The Items property of the gallery is automatically set to that table.

    Note

    Certains contrôles ont été réorganisés et agrandis aux fins d’illustration.Some controls have been rearranged and enlarged for illustration purposes.

  2. Au lieu de définir la propriété Items sur le nom d’un tableau, définissez-la sur une formule qui inclut le nom du tableau en tant qu’argument, comme dans l’exemple ci-dessous :Instead of setting the Items property to the name of a table, set it to a formula that includes the name of the table as an argument, as in this example:
    Sort(TextualGallerySample, Heading, Descending)Sort(TextualGallerySample, Heading, Descending)

    Cette formule intègre la fonction Sort, qui prend le nom d’un tableau en tant que premier argument et le nom d’une colonne de ce tableau en tant que deuxième argument.This formula incorporates the Sort function, which takes the name of a table as its first argument and the name of a column in that table as its second argument. La fonction prend également en charge un troisième argument facultatif qui stipule que vous souhaitez trier les données dans l’ordre décroissant.The function also supports an optional third argument, which stipulates that you want to sort the data in descending order.

  3. Définissez la propriété Items sur une formule qui utilise la formule de l’étape précédente en tant qu’argument et retourne un tableau, comme dans cet exemple :Set the Items property to a formula that takes the formula from the previous step as an argument and returns a table, as in this example:
    FirstN(Sort(TextualGallerySample, Heading, Descending), 2)FirstN(Sort(TextualGallerySample, Heading, Descending), 2)

    Dans cette formule, vous utilisez la fonction FirstN pour afficher un certain nombre d’enregistrements dans un tableau.In this formula, you use the FirstN function to show a particular number of records in a table. Vous utilisez la fonction Sort en tant que premier argument de FirstN et un nombre (dans ce cas, 2) en tant que deuxième argument, qui spécifie le nombre d’enregistrements à afficher.You use the Sort function as the first argument to FirstN and a number (in this case, 2) as the second argument, which specifies how many records to show.

    L’intégralité de la formule retourne un tableau qui contient les deux premiers enregistrements du tableau TextualGallerySample, triés par la colonne Heading dans l’ordre décroissant.The entire formula returns a table that contains the first two records of the TextualGallerySample table, sorted by the Heading column in descending order.

Fonctions de tableau et propriétés de contrôleTable functions and control properties

De nombreuses fonctions dans PowerApps prennent le nom d’un tableau en tant qu’argument, créent une seconde table qui contient les mêmes données, manipulent le nouveau tableau en fonction des autres arguments, puis retournent le résultat.Many functions in PowerApps take the name of a table as an argument, create a second table that contains the same data, manipulate the new table based the other arguments, and then return the result. Ces fonctions ne modifient pas le tableau d’origine, même s’il s’agit d’une source de données.These functions don't modify the original table, even if it's a data source.

  • Sort, Filter - Trie et filtre les enregistrements.Sort, Filter - Sorts and filters records.
  • FirstN, LastN - Retourne les N premiers ou derniers enregistrements du tableau.FirstN, LastN - Returns the first N or last N records of the table.
  • Abs, Sqrt, Round, RoundUp, RoundDown - Opérations arithmétiques sur chaque enregistrement d’un tableau à une seule colonne, qui génèrent un tableau de résultats constitué d’une seule colonne.Abs, Sqrt, Round, RoundUp, RoundDown - Arithmetic operations on each record of a single-column table, resulting in a single-column table of results.
  • Left, Mid, Right, Replace, Substitute, Trim, Lower, Upper, Proper - Manipulations de chaîne sur chaque enregistrement d’un tableau à une seule colonne, qui génèrent un tableau de chaînes constitué d’une seule colonne.Left, Mid, Right, Replace, Substitute, Trim, Lower, Upper, Proper - String manipulations on each record of a single-column table, resulting in a single-column table of strings.
  • Len - Pour une colonne de chaînes, retourne un tableau à une seule colonne qui contient la longueur de chaque chaîne.Len - For a column of strings, returns a single-column table that contains the length of each string.
  • Concatenate - Concatène plusieurs colonnes de chaînes et retourne un tableau de chaînes à une seule colonne.Concatenate - Concatenates multiple columns of strings, resulting in a single-column table of strings.
  • AddColumns, DropColumns, RenameColumns, ShowColumns - Manipulation de colonne du tableau, ce qui entraîne un nouveau tableau avec différentes colonnes.AddColumns, DropColumns, RenameColumns, ShowColumns - Column manipulation of the table, resulting in a new table with different columns.
  • Distinct - Supprime les doublons d’enregistrements.Distinct - Removes duplicates records.
  • Shuffle - Mélange les enregistrements dans un ordre aléatoire.Shuffle - Shuffles records into a random order.
  • HashTags - Recherche des hashtags dans une chaîne.HashTags - Searches for hashtags in a string.
  • Errors - Fournit des informations sur les erreurs lorsque vous utilisez une source de données.Errors - Provides error information when you work with a data source.

Vous pouvez exécuter une fonction sur un tableau qui contient plusieurs colonnes, même si la fonction requiert une seule colonne en tant qu’argument.You can run a function on a table that contains multiple columns, even if the function requires a single column as an argument. Pour extraire une seule colonne d’un tableau à plusieurs colonnes, utilisez la fonction ShowColumns en tant qu’argument pour la fonction que vous souhaitez utiliser, comme dans cet exemple :To extract a single column from a multi-column table, use the ShowColumns function as an argument for the function that you want to use, as in this example:
Lower( ShowColumns( Products, "Name" ) )Lower( ShowColumns( Products, "Name" ) )

Cette formule crée un tableau à une seule colonne qui contient toutes les données de la colonne Name du tableau Products, mais convertit les lettres majuscules en minuscules.This formula creates a single-column table that contains all the data from the Name column of the Products table but converts any uppercase letters to lowercase letters. Si vous spécifiez ce tableau en tant qu’argument de la fonction AddColumns, RenameColumns ou DropColumns, vous pouvez entièrement recréer le tableau à votre convenance.If you specify a table as an argument for the AddColumns, RenameColumns, or DropColumns function, you can completely reshape that table however you want.

Si vous spécifiez une source de données en tant qu’argument pour l’une de ces fonctions, cette dernière modifie les enregistrements de la source de données et, en règle générale, retourne la nouvelle valeur de la source de données sous forme de tableau.If you specify a data source as an argument for one of these functions, it will modify the records of that data source and, in general, return the data source's new value as a table.

  • Collect, Clear, ClearCollect - Crée, efface et ajoute à une collection.Collect, Clear, ClearCollect - Creates, clears, and adds to a collection.
  • Update, UpdateIf - Met à jour les enregistrements qui correspondent à un ou plusieurs critères que vous spécifiez.Update, UpdateIf - Updates records that match one or more criteria that you specify.
  • Remove, RemoveIf - Supprime les enregistrements qui correspondent à un ou plusieurs critères que vous spécifiez.Remove, RemoveIf - Deletes records that match one or more criteria that you specify.

Les contrôles suivants ont des propriétés qui sont des tableaux :The following controls have properties that are tables:

  • Items - S’applique aux galeries et zones de liste.Items - Applies to galleries and list boxes. Tableau à afficher dans la galerie.Table to display in the gallery.
  • SelectedItems - S’applique à des zones de liste.SelectedItems - Applies to list boxes. Tableau d’éléments que l’utilisateur a sélectionnés.Table of items that the user has selected.

Formules d’enregistrementRecord formulas

Vous pouvez également créer une formule qui calcule les données d’un enregistrement spécifique, prend un enregistrement donné en tant qu’argument et fournit un enregistrement individuel comme valeur de retour.You can also build a formula that calculates data for an individual record, takes an individual record as an argument, and provides an individual record as a return value. Revenons à l’exemple de la galerie ci-dessus et utilisons la propriété Gallery1.Selected pour afficher des informations à partir d’un enregistrement que l’utilisateur sélectionne dans cette galerie.Returning to our gallery example above, let's use the Gallery1.Selected property to display information from whatever record the user selects in that gallery.

  1. Ajoutez un bouton, puis définissez sa propriété OnSelect sur la formule suivante :Add a button, and set its OnSelect property to this formula:
    Collect( SelectedRecord, Gallery1.Selected )Collect( SelectedRecord, Gallery1.Selected )

  2. Si le bouton n’est pas sélectionné, cliquez dessus pour le sélectionner, puis cliquez à nouveau dessus pour exécuter la formule.If the button isn't selected, click it to select it, and then click it again to run the formula.

  3. Dans le menu Fichier, sélectionnez Collections.In the File menu, select Collections.

Cette formule retourne un enregistrement qui inclut non seulement les données de l’enregistrement actuellement sélectionné dans la galerie, mais également chaque contrôle dans cette galerie.This formula returns a record that includes not only the data from the record that's currently selected in the gallery but also each control in that gallery. Par exemple, l’enregistrement contient à la fois une colonne Body, qui correspond à la colonne Body de la table d’origine et une colonne Body1, qui représente l’étiquette qui affiche les données de cette colonne.For example, the record contains both a Body column, which matches the Body column in the original table, and a Body1 column, which represents the label that shows the data from that column. Sélectionnez l’icône de tableau dans la colonne Body1 pour accéder aux données détaillées.Select the table icon in the Body1 column to drill into that data.

Maintenant que vous avez sélectionné l’enregistrement, vous pouvez extraire des champs individuels à partir de celui-ci avec l’opérateur .Now that you have the selected record, you can extract individual fields from it with the . .operator.

  1. Appuyez sur Échap pour revenir à l’espace de travail par défaut, puis ajoutez une étiquette en dessous de la galerie.Press Esc to return to the default workspace, and then add a label below the gallery.

  2. Définissez la propriété Text de l’étiquette sur la formule suivante :Set the Text property of the label to this formula:
    Gallery.Selected.HeadingGallery.Selected.Heading

Vous avez pris la propriété Selected, qui est un enregistrement, puis extrait la propriété Heading à partir de celle-ci.You've taken the Selected property, which is a record, and extracted the Heading property from it.

Vous pouvez également utiliser un enregistrement en tant que conteneur à usage général pour les valeurs nommées associées.You can also use a record as a general-purpose container for related named values.

  • Si vous créez une formule autour des fonctions UpdateContext et Navigate, utilisez un enregistrement pour rassembler les variables de contexte que vous souhaitez mettre à jour.If you build a formula around the UpdateContext and Navigate functions, use a record to gather the context variables that you want to update.
  • Utilisez la propriété Updates sur un contrôle Modifier le formulaire pour rassembler les modifications qui ont été apportées par l’utilisateur dans un formulaire.Use the Updates property on an Edit form control to gather the changes that have been made by the user in a form.
  • Utilisez la fonction Patch pour mettre à jour une source de données ou fusionner des enregistrements.Use the Patch function to update a data source but also to merge records.

Dans ce cas, l’enregistrement n’a jamais fait partie d’un tableau.In these cases, the record was never a part of a table.

Fonctions d’enregistrement et propriétés de contrôleRecord functions and control properties

Fonctions qui retournent des enregistrements :Functions that return records:

  • FirstN, LastN - Retourne le ou les premiers ou derniers enregistrements du tableau.FirstN, LastN - Returns the first or last record or records of the table.
  • Lookup - Retourne le premier enregistrement du tableau qui correspond à un ou plusieurs critères.Lookup - Returns the first record from a table that matches one or more criteria.
  • Patch - Met à jour une source de données ou fusionne des enregistrements.Patch - Updates a data source or merges records.
  • Defaults - Retourne les valeurs par défaut pour une source de données.Defaults - Returns the default values for a data source.

Propriétés qui retournent des enregistrements :Properties that return records:

  • Selected - S’applique aux galeries et zones de liste.Selected - Applies to galleries and list boxes. Retourne l’enregistrement actuellement sélectionné.Returns the currently selected record.
  • Updates - S’applique aux galeries.Updates - Applies to galleries. Rassemble toutes les modifications qu’un utilisateur effectue dans un formulaire de saisie de données.Pulls together all the changes that a user makes in a data-entry form.
  • Update - S’applique aux contrôles d’entrée tels que des curseurs et contrôles de saisie de texte.Update - Applies to input controls such as text-input controls and sliders. Définit les propriétés individuelles de la galerie à rassembler.Sets up individual properties for the gallery to pull together.

Étendue de l’enregistrementRecord scope

Certaines fonctions opèrent en évaluant une formule dans tous les enregistrements d’un tableau de façon individuelle.Some functions operate by evaluating a formula across all the records of a table individually. Le résultat de la formule est utilisé de différentes manières :The formula's result is used in various ways:

  • Filter, Lookup - La formule détermine si l’enregistrement doit être inclus dans la sortie.Filter, Lookup - Formula determines if the record should be included in the output.
  • Sort - La formule fournit la valeur sur laquelle trier les enregistrements.Sort - Formula provides the value to sort the records on.
  • Concat - La formule détermine les chaînes à concaténer.Concat - Formula determines the strings to concatenate together.
  • ForAll - La formule peut retourner une valeur, éventuellement avec un effet secondaire.ForAll - Formula can return any value, potentially with a side effect.
  • Distinct - La formule retourne une valeur, utilisée pour identifier les enregistrements en double.Distinct - Formula returns a value, used to identify duplicate records.
  • AddColumns - La formule fournit la valeur du champ ajouté.AddColumns - Formula provides the value of the added field.
  • Average, Max, Min, Sum, StdevP, VarP - La formule fournit les valeurs à agréger.Average, Max, Min, Sum, StdevP, VarP - Formula provides the value to aggregate.

À l’intérieur de ces formules, vous pouvez référencer les champs de l’enregistrement qui est en cours de traitement.Inside these formulas, you can reference the fields of the record being processed. Chacune de ces fonctions crée une « étendue d’enregistrement » dans laquelle la formule est évaluée et où les champs de l’enregistrement sont disponibles en tant qu’identificateurs de niveau supérieur.Each of these functions creates a "record scope" in which the formula is evaluated, where the fields of the record are available as top-level identifiers. Vous pouvez également référencer les propriétés de contrôle et d’autres valeurs à partir de votre application.You can also reference control properties and other values from throughout your app.

Par exemple, prenez un tableau de produits :For example, take a table of Products:

Pour déterminer si le nombre de produits demandés est supérieur au nombre de produits disponibles :To determine if any of any of these products had more requested than is available:

Filter( Products, 'Quantity Requested' > 'Quantity Available' )Filter( Products, 'Quantity Requested' > 'Quantity Available' )

Le premier argument à filtrer (Filter) est le tableau d’enregistrements à utiliser et le deuxième argument est une formule.The first argument to Filter is the table of records to operate on, and the second argument is a formula. Le filtre crée une étendue d’enregistrement pour l’évaluation de cette formule où les champs de chaque enregistrement sont disponibles, dans ce cas Product, Quantity Requested et Quantity Available.Filter creates a record scope for evaluating this formula in which the fields of each record are available, in this case Product, Quantity Requested, and Quantity Available. Le résultat de la comparaison détermine si chaque enregistrement doit être inclus dans le résultat de la fonction :The result of the comparison determines if each record should be included in the result of the function:

Continuez avec cet exemple et calculez la quantité de chaque produit à commander :Adding to this example, we can calculate how much of each product to order:

AddColumns( Filter( Products, 'Quantity Requested' > 'Quantity Available' ), "Quantity To Order", 'Quantity Requested' - 'Quantity Available' )AddColumns( Filter( Products, 'Quantity Requested' > 'Quantity Available' ), "Quantity To Order", 'Quantity Requested' - 'Quantity Available' )

Ici, ajoutez une colonne calculée au résultat.Here we are adding a calculated column to the result. AddColumns a sa propre étendue d’enregistrement qu’elle utilise pour calculer la différence entre ce qui a été demandé et ce qui est disponible.AddColumns has its own record scope that it uses to calculate the difference between what has been requested and what is available.

Enfin, vous pouvez réduire le tableau de résultats aux colonnes dont vous avez besoin :Finally, we can reduce the result table to just the columns that we desire:

ShowColumns( AddColumns( Filter( Products, 'Quantity Requested' > 'Quantity Available' ), "Quantity To Order", 'Quantity Requested' - 'Quantity Available' ), "Product", "Quantity To Order" )ShowColumns( AddColumns( Filter( Products, 'Quantity Requested' > 'Quantity Available' ), "Quantity To Order", 'Quantity Requested' - 'Quantity Available' ), "Product", "Quantity To Order" )

Notez que dans l’exemple ci-dessus, nous avons utilisé des guillemets doubles (") dans certains endroits et des guillemets simples (') ailleurs.Note that in the above, we used double quotes (") in some places and single quotes (') in other places. Les guillemets simples sont requis lorsque vous référencez la valeur d’un objet, comme un champ ou un tableau, où le nom de l’objet contient un espace.Single quotes are required when referencing the value of an object, such as a field or table, in which the name of the object contains a space. Des guillemets doubles sont utilisés non pas pour faire référence à la valeur d’un objet, mais plutôt pour en parler, en particulier dans les situations où l’objet n’existe pas encore, comme dans le cas de AddColumns.Double quotes are used when we are not referencing the value of an object but instead talking about it, especially in situations in which the object does not yet exist, as in the case of AddColumns.

Lever les ambiguïtésDisambiguation

Les noms de champs ajoutés avec l’étendue d’enregistrement remplacent ces mêmes noms ailleurs dans l’application.Field names added with the record scope override the same names from elsewhere in the app. Dans ce cas, vous pouvez toujours accéder aux valeurs en dehors de l’étendue d’enregistrement avec l’opérateur @ disambiguation (levée d’ambiguïtés) :When this happens, you can still access values from outside the record scope with the @ disambiguation operator:

  • Pour accéder aux valeurs des étendues d’enregistrements imbriquées, utilisez l’opérateur @ avec le nom du tableau qui est utilisé actuellement à l’aide du modèle Table[@FieldName].To access values from nested record scopes, use the **@ operator with the name of the table being operated upon using the pattern Table[@FieldName].
  • Pour accéder à des valeurs globales, telles que les sources de données, les collections et les variables de contexte, utilisez le modèle [@ObjectName]** (sans désignation du tableau).To access global values, such as data sources, collections, and context variables, use the pattern [@ObjectName] (without a table designation).

Si le tableau actuellement utilisé est une expression, comme Filtrer( table,...), l’opérateur de levée d’ambiguïté ne peut pas être utilisé.If the table being operated upon is an expression, such as Filter( table, ... ), then the disambiguation operator cannot be used. Seule l’étendue d’enregistrement la plus profonde permet d’accéder aux champs de cette expression de tableau, sans utiliser l’opérateur de levée d’ambiguïté (disambiguation).Only the innermost record scope can access fields from this table expression, by not using the disambiguation operator.

Par exemple, imaginez que vous avez une collection X :For example, imagine having a collection X:

Vous pouvez créer cette collection avec ClearCollect( X, [1, 2] ).You can create this collection with ClearCollect( X, [1, 2] ).

Et une autre collection Y :And another collection Y:

Vous pouvez créer cette collection avec ClearCollect( Y, ["A", "B"] ).You can create this collection with ClearCollect( Y, ["A", "B"] ).

En outre, définissez une variable de contexte nommée Value avec cette formule : UpdateContext( {Value: "!"} )In addition, define a context variable named Value with this formula: UpdateContext( {Value: "!"} )

Résumons.Let's put it all together. Dans ce contexte, la formule suivante :In this context, the following formula:

  • Ungroup( ForAll( X, ForAll( Y, Y[@Value] & Text( X[@Value] ) & [@Value] ) ), "Value" )Ungroup( ForAll( X, ForAll( Y, Y[@Value] & Text( X[@Value] ) & [@Value] ) ), "Value" )

génère ce tableau :produces this table:

Que se passe-t-il ici ?What is going on here? La fonction ForAll la plus extérieure définit une étendue d’enregistrement pour X, en permettant d’accéder au champ Value de chaque enregistrement à mesure qu’il est traité.The outermost ForAll function defines a record scope for X, allowing access to the Value field of each record as it is processed. Celui-ci est accessible en utilisant simplement le mot Value ou à l’aide de X[@Value].It can be accessed by simply using the word Value or by using X[@Value].

La fonction ForAll la plus intérieure définit une autre étendue d’enregistrement pour Y. Étant donné que ce tableau possède également un champ Value défini, utiliser Value ici fait référence au champ de l’enregistrement de Y et non à celui provenant de X. Ici, pour accéder au champ Value de X, vous devez utiliser la version la plus longue avec l’opérateur de levée d’ambiguïté.The innermost ForAll function defines another record scope for Y. Since this table also has a Value field defined, using Value here refers to the field in Y's record and no longer the one from X. Here, to access X's Value field, we must use the longer version with the disambiguation operator.

Étant donné que Y est l’étendue d’enregistrement la plus intérieure, l’accès aux champs de ce tableau ne nécessite pas de levée d’ambiguïté, ce qui vous permet d’utiliser la formule suivante avec le même résultat :Since Y is the innermost record scope, accessing fields of this table do not require disambiguation, allowing us to use this formula with the same result:

  • Ungroup( ForAll( X, ForAll( Y, Value & Text( X[@Value] ) & [@Value] ) ), "Value" )Ungroup( ForAll( X, ForAll( Y, Value & Text( X[@Value] ) & [@Value] ) ), "Value" )

Toutes les étendues d’enregistrement ForAll remplacent l’étendue globale.All the ForAll record scopes override the global scope. La variable contextuelle Value que vous avez définie n’est pas disponible par son nom sans l’opérateur de levée d’ambiguïté.The Value context variable we defined is not available by name without the disambiguation operator. Pour accéder à cette valeur, vous devez utiliser [@Value].To access this value we must use [@Value].

Ungroup aplatit le résultat, étant donné que les fonctions ForAll imbriquées entraînent un tableau de résultats imbriqué.Ungroup flattens the result, since nested ForAll functions will result in a nested result table.

Syntaxe inlineInline syntax

EnregistrementsRecords

Vous faites référence à des enregistrements en utilisant des accolades qui contiennent des valeurs de champ nommées.You express records by using curly braces that contain named field values. Par exemple, vous pouvez faire référence au premier enregistrement du tableau présenté au début de cette rubrique à l’aide de la formule suivante :For example, you can express the first record in the table at the start of this topic by using this formula:

{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }

Vous pouvez également incorporer des formules dans d’autres formules, comme le montre cet exemple :You can also embed formulas within other formulas, as this example shows:

{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }

Vous pouvez imbriquer des enregistrements en imbriquant des accolades, comme le montre cet exemple :You can nest records by nesting curly braces, as this example shows:

{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }

Placez chaque nom de colonne qui contient un caractère spécial, un espace ou un signe deux-points entre des guillemets simples.Enclose each column name that contains a special character, such as a space or a colon, in single quotes. Pour utiliser un seul guillemet dans un nom de colonne, double-cliquez dessus.To use a single quote within a column name, double it.

Notez que la valeur de la colonne Price n’inclut pas de symbole monétaire, comme le signe dollar.Note that the value in the Price column doesn't include a currency symbol, such as a dollar sign. Cette mise en forme est appliquée lorsque la valeur est affichée.That formatting will be applied when the value is displayed.

TableauxTables

Vous pouvez créer un tableau à l’aide de la fonction Table et d’un jeu d’enregistrements.You can create a table by using the Table function and a set of records. Vous pouvez exprimer le tableau présenté au début de cette rubrique à l’aide de la formule suivante :You can express the table at the start of this topic by using this formula:

Table( { Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 },
            { Name: "Bread", Price: 4.95, 'Quantity on Hand': 34, 'Quantity on Order': 0 },
            { Name: "Water", Price: 4.95, 'Quantity on Hand': 10, 'Quantity on Order': 0 } )
Table( { Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 },
            { Name: "Bread", Price: 4.95, 'Quantity on Hand': 34, 'Quantity on Order': 0 },
            { Name: "Water", Price: 4.95, 'Quantity on Hand': 10, 'Quantity on Order': 0 } )

Vous pouvez également imbriquer des tableaux :You can also nest tables:

Table( { Name: "Chocolate",
            'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
                        { Quarter: "Q2", OnHand: 18, OnOrder: 0 } ) } )
Table( { Name: "Chocolate",
            'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
                        { Quarter: "Q2", OnHand: 18, OnOrder: 0 } ) } )

Tableaux de valeursValue tables

Vous pouvez créer des tableaux à une seule colonne en spécifiant des valeurs entre crochets.You can create single-column tables by specifying values in square brackets. Le tableau qui en résulte a une seule colonne nommée Value.The resulting table has a single column, named Value.

Par exemple, [ 1, 2, 3, 4 ] est l’équivalent de Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) et retourne le tableau suivant :For example, [ 1, 2, 3, 4 ] is equivalent to Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) and returns this table: