Comprendre les délégationsUnderstand delegation

PowerApps intègre un puissant ensemble de fonctions de filtrage, de tri et de mise en forme de tables de données, notamment les fonctions Filter, Sort et AddColumns.PowerApps includes a powerful set of functions for filtering, sorting, and shaping tables of data: Filter, Sort, and AddColumns functions to name just a few. Avec ces fonctions, vous pouvez donner aux utilisateurs un accès ciblé aux informations dont ils ont besoin.With these functions, you can provide your users with focused access to the information they need. Si vous connaissez les bases de données, l’utilisation de ces fonctions équivaut à écrire une requête de base de données.For those with a database background, using these functions is the equivalent of writing a database query.

Pour créer des applications efficaces, il est essentiel de réduire la quantité de données qui doivent être transférées vers votre appareil.The key to building efficient apps is to minimize the amount of data that needs to be brought to your device. Seulement quelques enregistrements sont peut-être vraiment indispensables parmi les millions d’enregistrements disponibles, à moins qu’une seule valeur d’agrégation représente plusieurs milliers d’enregistrements.Perhaps only a handful of records from a sea of millions are needed, or a single aggregate value can represent thousands of records. Il est aussi possible de récupérer seulement le premier jeu d’enregistrements et de mettre le reste à disposition de l’utilisateur sous forme de gestes qu’il préfère.Or perhaps only the first set of records can be retrieved, and the rest brought in as the user gestures that they want more. Opter pour une approche ciblée permet de réduire considérablement la puissance de traitement, la mémoire et la bande passante réseau dont a besoin votre application, ce qui améliore les temps de réponse pour vos utilisateurs, même sur des téléphones portables connectés via un réseau cellulaire.Being focused can dramatically reduce the processing power, memory, and network bandwidth needed by your app, resulting in snappier response times for your users, even on phones connected via a cellular network.

La délégation consiste à exprimer les formules PowerApps pour répondre à la nécessité de réduire les données en transit sur le réseau.Delegation is where the expressiveness of PowerApps formulas meets the need to minimize data moving over the network. En bref, cela signifie que PowerApps délègue le traitement des données à la source de données, plutôt que de déplacer les données vers l’application pour les traiter en local.In short, it means that PowerApps will delegate the processing of data to the data source, rather than moving the data to the app for processing locally.

Là où cela devient compliqué, ce pourquoi même cet article a été rédigé, c’est que tout ce qui peut être exprimé dans une formule PowerApps ne peut pas être délégué à chaque source de données.Where this becomes complicated, and the reason this article exists, is because not everything that can be expressed in a PowerApps formula can be delegated to every data source. Le langage PowerApps imite le langage des formules Excel ; il repose sur un accès complet et instantané à un classeur complet en mémoire, qui contient une grande variété de fonctions numériques et de manipulation de texte.The PowerApps language mimics Excel's formula language, designed with complete and instant access to a full workbook in memory, with a wide variety of numerical and text manipulation functions. Par conséquent, le langage PowerApps est beaucoup plus riche que ce que la plupart des données sources peuvent prendre en charge, y compris les puissants moteurs de base de données comme SQL Server.As a result, the PowerApps language is far richer than most data sources can support, including powerful database engines such as SQL Server.

L’utilisation de jeux de données volumineux suppose d’utiliser des sources de données et des formules qui peuvent être déléguées.Working with large data sets requires using data sources and formulas that can be delegated. C’est le seul moyen de préserver le bon fonctionnement de votre application et de s’assurer que les utilisateurs peuvent accéder à toutes les informations dont ils ont besoin.It is the only way to keep your app performing well and ensure users can access all the information they need. Soyez attentif aux points bleus qui signalent les endroits où la délégation n’est pas possible.Take heed of blue-dot suggestions that flag places where delegation is not possible. Si vous travaillez avec des jeux de données de taille modeste (moins de 500 enregistrements), vous pouvez utiliser n’importe quelle source de données et n’importe quelle formule puisque le traitement peut être effectué en local si la formule ne peut pas être déléguée.If you're working with small data sets (less than 500 records), you can use any data source and formula as processing can be done locally if the formula cannot be delegated.

Sources de données transmissiblesDelegable data sources

Consultez la liste de délégation pour obtenir la liste complète des source de données qui prennent en charge la délégation et dans quelle mesure.See the delegation list for the full list of which data sources support delegation and to what extent.

Nous allons continuer à ajouter la prise en charge de la délégation à des sources de données existantes, mais aussi ajouter d’autres sources de données.We are continuing to add delegation support to existing data sources, as well as add more data sources.

Les classeurs Excel importés (à l’aide de la source de données « Add static data to your app »), les collections et les tables stockées dans des variables de contexte ne nécessitent pas de délégation.Imported Excel workbooks (using the "Add static data to your app" data source), collections, and tables stored in context variables don't require delegation. Toutes ces données sont déjà en mémoire, et le langage PowerApps complet peut être appliqué.All of this data is already in memory, and the full PowerApps language can be applied.

Fonctions délégablesDelegable functions

L’étape suivante consiste à n'utiliser que les formules qui peuvent être déléguées.The next step is to use only those formulas that can be delegated. Vous trouverez ici sont les éléments de formule qui peuvent être délégués.Included here are the formula elements that could be delegated. Toutes les sources de données sont cependant différentes et ne prennent pas toutes en charge l’ensemble de ces éléments.However, every data source is different, and not all of them support all of these elements. Recherchez les suggestions repérées par des points bleus dans votre formule.Check for blue-dot suggestions in your particular formula.

Ces listes évolueront au fil du temps.These lists will change over time. Nous nous attachons à ajouter d’autres fonctions et opérateurs prenant en charge la délégation.We're working to support more functions and operators with delegation.

Fonctions de filtrageFilter functions

Les fonctions Filter, Search, et LookUp peuvent être déléguées.Filter, Search, and LookUp can be delegated.

Dans les fonctions Filter et LookUp, les éléments suivants peuvent être utilisés avec des colonnes de la table pour sélectionner les enregistrements appropriés :Within the Filter and LookUp functions, the following can be used with columns of the table to select the appropriate records:

Vous pouvez également utiliser les parties de votre formule qui effectuent une comparaison avec une valeur constante pour tous les enregistrements.Portions of your formula that evaluate to a constant value for all records can also be used. Par exemple, Left( Language(), 2 ) ne dépend pas des colonnes de l’enregistrement et, par conséquent, retourne la même valeur pour tous les enregistrements.For example, Left( Language(), 2 ) does not depend on any columns of the record and therefore returns the same value for all records. Il s’agit en fait d’une constante.It is effectively a constant. L’utilisation de variables de contexte, de collections et de signaux peut ne pas être constante et empêcher ainsi la délégation des fonctions Filter et LookUp.Use of context variables, collections, and signals may not be constant and therefore will prevent Filter and LookUp from being delegated.

Il manque dans la liste ci-dessus certains éléments importants :Some notable items missing from the above list:

Fonctions de triSorting functions

Les fonctions Sort et SortByColumns peuvent être déléguées.Sort and SortByColumns can be delegated.

Dans la fonction Sort, la formule ne peut être que le nom d’une colonne unique et ne peut pas inclure d’autres opérateurs ou fonctions.In Sort, the formula can only be the name of a single column and can't include other operators or functions.

Fonctions d’agrégationAggregate functions

Les fonctions Sum, Average, Min et Max peuvent être déléguées.Sum, Average, Min, and Max can be delegated. Seul un nombre limité de sources de données prend en charge cette délégation à l’heure actuelle. Pour plus d’informations, consultez la liste de délégation.Only a limited number of data sources support this delegation at this time, check the delegation list for more details.

Les fonctions de comptage telles que CountRows, CountA et Count ne peuvent pas être déléguées.Counting functions such as CountRows, CountA, and Count cannot be delegated.

Les autres fonctions d’agrégation telles que StdevP et VarP ne peuvent pas être déléguées.Other aggregate functions such as StdevP and VarP cannot be delegated.

Autres fonctionsOther functions

Toutes les autres fonctions ne gèrent pas la délégation, notamment ces fonctions importantes :All other functions do not support delegation, including these notable functions:

Il est courant d’utiliser les fonctions AddColumns et LookUp pour fusionner les informations d’une table dans une autre, ce que l’on appelle communément une jointure dans le jargon des bases de données.A common pattern is to use AddColumns and LookUp to merge information from one table into another, commonly referred to as a Join in database parlance. Par exemple :For example:

  • AddColumns( Products, "Supplier Name", LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name )AddColumns( Products, "Supplier Name", LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name )

Même si Products et Suppliers peuvent être des sources de données délégables et si LookUp est une fonction délégable, la fonction AddColumns n’est pas délégable.Even though Products and Suppliers may be delegable data sources and LookUp is a delegable function, the AddColumns function is not delegable. Le résultat de la formule entière sera limité à la première partie de la source de données Products.The result of the entire formula will be limited to the first portion of the Products data source.

Étant donné que la fonction LookUp et sa source de données sont délégables, une correspondance avec Suppliers peut être trouvée n’importe où dans la source de données, même si elle est volumineuse.Since the LookUp and its data source are delegable, a match for Suppliers can be found anywhere in the data source, even if it is large. L’inconvénient est que la fonction LookUp effectuera des appels distincts à la source de données pour chacun de ces premiers enregistrements dans Products, ce qui aura pour effet d’encombrer le réseau.A potential downside is that LookUp will made separate calls to the data source for each of those first records in Products, causing a lot of chatter on the network. Si la source de données Suppliers est suffisamment petite et qu’elle ne change pas souvent, vous pouvez mettre en cache la source de données dans votre application avec un appel Collect lors du démarrage de l’application (à l’aide de OnVisible sur l’écran d’ouverture) et y appliquer la fonction LookUp à la place.If Suppliers is small enough and does not change often, you could cache the data source in your app with a Collect call when the app starts (using OnVisible on the opening screen) and do the LookUp to it instead.

Limites non délégablesNon-delegable limits

Les formules qui ne peuvent pas être déléguées sont traitées en local.Formulas that cannot be delegated will be processed locally. Cela permet d’utiliser toute l’étendue du langage de formule PowerApps.This allows for the full breadth of the PowerApps formula language to be used. Mais cela a un prix : toutes les données doivent être d’abord transférées vers l’appareil, ce qui peut impliquer la récupération d’une grande quantité de données sur le réseau.But at a price: all the data must be brought to the device first, which could involve retrieving a large amount of data over the network. Cette opération peut être longue et donner l’impression que votre application est lente ou potentiellement bloquée.That can take time, giving the impression that your app is slow or possibly hung.

Pour éviter ce problème, PowerApps impose une limite sur la quantité de données qui peuvent être traitées en local, à savoir 500 enregistrements.To avoid this, PowerApps imposes a limit on the amount of data that can be processed locally: 500 records. Nous avons choisi ce nombre afin que vous puissiez conserver un accès complet aux jeux de données peu volumineux et affiner votre utilisation des jeux de données volumineux en visualisant des résultats partiels.We chose this number so that you would still have complete access to small data sets and you would be able to refine your use of large data sets by seeing partial results.

Bien évidemment, l’utilisation de cette fonctionnalité exige un minimum de vigilance, car elle peut être déroutante pour les utilisateurs.Obviously care must be taken when using this facility as it can be confusing for users. Par exemple, considérez une fonction Filter avec une formule de sélection qui ne peut pas être déléguée, appliquée sur une source de données d’un million d’enregistrements.For example, consider a Filter function with a selection formula that cannot be delegated, over a million record data source. Étant donné que le filtrage s’effectue localement, seuls les 500 premiers enregistrements du million d’enregistrements seront analysés.Since the filtering will be done locally, only the first 500 records of the million records will be scanned. Si l’enregistrement souhaité est le numéro 501 ou 500 001, il ne sera pas pris en compte ou retourné par la fonction Filter.If the desired record is record 501, or 500,001, it will not be considered or returned by Filter.

Tout cela peut également prêter à confusion au niveau des fonctions d’agrégation.Another place where this can be confusing is aggregate functions. Prenez la fonction Average sur une colonne de cette même source de données d’un million d’enregistrements.Take Average over a column of that same million record data source. Étant donné que la fonction Average ne peut pas encore être déléguée, la moyenne sera calculée uniquement pour les 500 premiers enregistrements.Since Average cannot yet be delegated, only the first 500 records will be averaged. Il convient d’être vigilant pour ne pas interpréter à tort une réponse partielle comme une réponse complète d’un utilisateur de votre application.Care must be taken or a partial answer could be misconstrued as a complete answer by a user of your app.

Points bleusBlue dot suggestions

Pour savoir plus facilement ce qui est ou non délégué, l’expérience de création propose des suggestions sous forme de points bleus lorsqu’une formule contient un élément qui ne peut pas être délégué.To make it easier to know what is and is not being delegated, the authoring experience provides blue dot suggestions when a formula contains something that cannot be delegated.

Les points bleus s’affichent uniquement sur les formules qui s’exécutent sur des sources de données délégables.Blue dots are only shown on formulas that operate on delegable data sources. Si vous ne voyez pas de point bleu et que vous pensez que votre formule n’est pas correctement déléguée, vérifiez le type de source de données par rapport à la liste des sources de données délégables ci-dessus.If you don't see a blue dot and you believe your formula is not being properly delegated, check the type of data source against the list of delegable data sources above.

ExemplesExamples

Dans cet exemple, nous allons utiliser une table SQL Server qui contient des produits, en particulier des fruits, nommée [dbo].[Products].In this example, we will use a SQL Server table that contains products, in particular fruits, names [dbo].[Products]. Sur le nouvel écran, PowerApps peut créer une application de base à trois écrans connectée à cette source de données :On the New screen, PowerApps can create a basic three screen app connected to this data source:

Notez la formule pour la propriété Items de la galerie.Note the formula for the Gallery's Items property. Elle utilise les fonctions SortByColumns et Search, qui peuvent être déléguées.It is using SortByColumns and Search functions, both of which can be delegated.

Nous allons taper « Apple » dans le contrôle d’entrée de texte de la recherche.Let's type "Apple" into the search text-input control. Si nous sommes très attentifs, nous allons voir momentanément des pointillés en haut de l’écran pendant le traitement de la nouvelle entrée dans la nouvelle recherche.If we are very observant, we will momentarily see marching dots on the top of the screen while the new entry in the new search is processed. Ces pointillés indiquent que nous communiquons avec SQL Server :The marching dots indicate that we are communicating with the SQL Server:

Comme il s’agit toutes de fonctions délégables, même si la table [dbo].[Products] contient des millions d’enregistrements, nous les retrouverons toujours ; nous allons naviguer dans la galerie à mesure que l’utilisateur fait défiler les résultats.Because this is all delegable, even if the [dbo].[Products] table contains millions of records, we will still find them all, paging through them in the gallery as the user scrolls through the results.

Vous remarquerez une correspondance pour « Apple » et « Pineapple ».You will notice that we are seeing a match for both "Apple" and "Pineapple". Le fonction Search trouvera un terme de recherche n’importe où dans une colonne de texte.The Search function will find a search term anywhere in a text column. Supposons, au lieu de cela, que nous voulions n'obtenir que le terme de recherche au début du nom du fruit.If instead, let's say we wanted to only find the search term at the beginning of the fruit's name. Nous pouvons utiliser une autre fonction délégable, Filter, avec un terme de recherche plus complexe (par souci de simplicité, nous allons supprimer l’appel SortByColumns) :We can use another delegable function, Filter, with a more complicated search term (for simplicity we'll remove the SortByColumns call):

Cela semble fonctionner : seuls les enregistrements Apples s’affichent désormais correctement, et pas Pineapple.This appears to be working, only "Apples" is correctly showing now and "Pineapple" is not. Un point bleu s’affiche cependant en regard de la galerie et une ligne bleue ondulée apparaît sous une partie de la formule.However, there is a blue dot showing next to the gallery and there is a blue wavy line under a portion of the formula. Un point bleu s’affiche même dans la miniature de l’écran.There is even a blue dot showing in the screen thumbnail. Si nous survolons le point bleu en regard de la galerie, nous obtenons ce qui suit :If we hover over the blue dot next to the gallery, we see the following:

Bien que nous utilisions la fonction délégable Filter avec SQL Server, qui est une source de données délégable, la formule que nous avons utilisée dans Filter n’est pas délégable.Although we are using Filter which is a delegable function, with SQL Server which is a delegable data source, the formula we used within Filter is not delegable. Mid et Len ne peuvent pas être déléguées à une source de données.Mid and Len cannot be delegated to any data source.

Pourtant cela a fonctionné, n’est-ce pas ?But it worked, didn't it? En quelque sorte, oui.Well, kind of. C’est pourquoi on voit un point bleu plutôt qu’une icône jaune de danger et une ligne rouge ondulée indiquant une erreur.And that is why this is a blue dot instead of a yellow hazard icon and red wavy error. Si la table [dbo].[Products] contient moins de 500 enregistrements, alors oui, cela a parfaitement fonctionné.If the [dbo].[Products] table contains less than 500 records, then yes, this worked perfectly. Tous les enregistrements ont été importés dans l’appareil et la fonction Filter a été appliquée en local.All records were brought to the device and the Filter was applied locally.

Si, au lieu de cela, cette table contient plus de 500 enregistrements, seuls les fruits qui commencent par Apple dans les 500 premiers enregistrements de la table apparaissent dans la galerie.If instead this table contains more than 500 records, then only fruit which begin with "Apple" in the first 500 records of the table will be displayed in the gallery. Si « Apple, Fuji » apparaît sous la forme d’un nom dan l’enregistrement 501 ou 500 001, il sera introuvable.If "Apple, Fuji" appears as a name in record 501 or 500,001 it will not be found.