Présentation de la délégation dans une application canevas

Power Apps comprend un puissant ensemble de fonctions qui permettent de filtrer, trier et mettre en forme des tables de données dans une application canevas. Il s’agit notamment des fonctions Filter, Sort et AddColumns, pour n’en citer que quelques-unes. Avec ces fonctions, vous pouvez donner aux utilisateurs un accès ciblé aux informations dont ils ont besoin. Si vous connaissez les bases de données, l’utilisation de ces fonctions équivaut à écrire une requête de base de données.

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. Seuls 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. 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. 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 par le biais d’un réseau cellulaire.

La délégation consiste à exprimer les formules Power Apps pour répondre à la nécessité de réduire les données en transit sur le réseau. En bref, au lieu de déplacer les données vers l’application pour les traiter en local, Power Apps délègue le traitement des données à la source de données.

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 Power Apps ne peut pas être délégué à chaque source de données. Le langage Power Apps imite le langage de formule d’Excel, conçu avec un accès complet et instantané à un classeur complet en mémoire, avec une grande variété de fonctions de manipulation numérique et de texte. En conséquence, le langage Power Apps est bien plus riche que ce que la plupart des sources de données peuvent prendre en charge, y compris les puissants moteurs de base de données tels que 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. C’est le seul moyen d’assurer le bon fonctionnement de votre application et de garantir aux utilisateurs l’accès à toutes les informations dont ils ont besoin. Tenez compte des avertissements de délégation qui identifient les endroits où la délégation n’est pas 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 l’application peut traiter les données en local si la formule ne peut pas être déléguée.

Notes

Les avertissements de délégation étaient précédemment marqués dans Power Apps au moyen de « points bleus » signalant des suggestions, mais celles-ci ont été depuis reclassées en avertissements. Si votre source de données comprend plus de 500 enregistrements et qu’une fonction ne peut pas être déléguée, Power Apps peut ne pas être en mesure de récupérer toutes les données et votre application peut avoir des résultats incorrects. Grâce aux avertissements de délégation, vous pouvez gérer votre application pour qu’elle dispose de résultats corrects.

Sources de données délégables

La délégation est prise en charge uniquement pour certaines sources de données tabulaires. Si une source de données prend en charge la délégation, la documentation de son connecteur décrit cette prise en charge. Par exemple, ces sources de données tabulaires sont les plus populaires et prennent en charge la délégation :

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. Toutes ces données sont déjà en mémoire, et le langage Power Apps complet peut être appliqué.

Fonctions délégables

L’étape suivante consiste à n’utiliser que les formules qui peuvent être déléguées. Vous trouverez ici sont les éléments de formule qui peuvent être délégués. Toutes les sources de données sont cependant différentes et ne prennent pas toutes en charge l’ensemble de ces éléments. Examinez la présence d’avertissements de délégation dans votre formule.

Ces listes évolueront au fil du temps. Nous nous attachons à ajouter d’autres fonctions et opérateurs prenant en charge la délégation.

Fonctions de filtre

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

Dans les fonctions Filter et LookUp, vous pouvez les utiliser avec des colonnes de la table pour sélectionner les enregistrements appropriés :

  • And (y compris &&), Or (y compris ||), Not (y compris !)
  • In

    Notes

    In n’est délégué que pour les colonnes sur la source de données de base. Par exemple, si la source de données est la table Comptes alors Filter(Accounts, Name in ["name1", "name2"]) délègue à la source de données pour évaluation. Cependant, Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]) ne délègue car la colonne Fullname est sur une autre table (PrimaryContact) que Comptes. L’expression est évaluée localement.

  • =, <>, >=, <=, >, <
  • +, -
  • TrimEnds
  • IsBlank
  • StartsWith, EndsWith
  • Valeurs de constante qui sont identiques dans l’ensemble des enregistrements, telles que les variables globales et de contexte.

Vous pouvez également utiliser les parties de votre formule qui correspondent à une valeur constante pour tous les enregistrements. Par exemple, Left( Language(), 2 ), Date( 2019, 3, 31 ) et Today() ne dépend pas des colonnes de l’enregistrement et, par conséquent, retourne la même valeur pour tous les enregistrements. Ces valeurs peuvent être envoyées à la source de données en tant que constante et ne bloqueront pas la délégation.

La liste précédente n’inclut pas les éléments importants suivants :

Fonctions de tri

Les fonctions Sort et SortByColumns peuvent être déléguées.

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.

Fonctions d’agrégation

Les fonctions Sum, Average, Min et Max peuvent être déléguées. 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.

Notes

Si une expression n’est pas déléguée, elle ne fonctionnera que sur les 500 premiers enregistrements (configurable jusqu’à 2000, voir Modification de la limite) extrait de la source de données plutôt que de déléguer le traitement de toutes les données à la source de données.

Les fonctions de comptage telles que CountRows, CountA et Count ne peuvent pas être déléguées.

Les autres fonctions d’agrégation telles que StdevP et VarP ne peuvent pas être déléguées.

Fonctions de mise en forme de table

AddColumns, DropColumns, RenameColumns et ShowColumns prennent partiellement en charge la délégation. Les formules dans leurs arguments peuvent être déléguées. Toutefois, la sortie de ces fonctions est soumise à la limite d’enregistrement de non-délégation.

Comme dans cet exemple, les créateurs utilisent souvent AddColumns et LookUp pour fusionner des informations d’une table dans une autre. Cette opération est communément appelée « jointure » dans le jargon des bases de données :

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 que LookUp est une fonction délégable, la sortie de la fonction AddColumns n’est pas délégable. Le résultat de la formule entière est limité à la première partie de la source de données Products. Étant donné que la fonction LookUp et sa source de données sont délégables, une correspondance pour Suppliers peut se trouver n’importe où dans la source de données, même si elle est volumineuse.

Si tu utilises AddColumns de cette façon, LookUp doit effectuer des appels séparés vers le source de données pour chacun de ces premiers enregistrements dans Products, ce qui provoque beaucoup de bavardages sur le réseau. Si Suppliers est assez petit et ne change pas souvent, vous pouvez appeler la fonction Collect dans OnStart pour mettre en cache le source de données dans votre application au démarrage. Comme alternative, vous pouvez restructurer votre application de manière à extraire les enregistrements associés uniquement lorsque l’utilisateur les demande.

Fonctions non délégables

Toutes les autres fonctions ne gèrent pas la délégation, notamment les fonctions importantes suivantes :

Limites non délégables

Les formules qui ne peuvent pas être déléguées sont traitées en local. Cela permet d’utiliser toute l’étendue du langage de formule Power Apps. 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. Cette opération peut être longue et donner l’impression que votre application est lente ou potentiellement plantée.

Pour éviter ce problème, Power Apps impose une limite sur la quantité de données qui peuvent être traitées en local, à savoir 500 enregistrements par défaut. 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.

Bien évidemment, l’utilisation de cette fonctionnalité exige un minimum de vigilance, car elle peut être déroutante pour les utilisateurs. 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 contenant un million d’enregistrements. Le filtrage étant effectué localement, seuls les 500 premiers enregistrements sont analysés. Si l’enregistrement souhaité est le numéro 501 ou 500 001, il n’est ni pris en compte ni retourné par Filter.

Les fonctions d’agrégation peuvent également prêter à confusion. Prenez la fonction Average sur une colonne de cette même source de données d’un million d’enregistrements. Moyenne ne peut pas être délégué dans ce cas car l’expression n’est pas déléguée (voir la note précédente), de sorte que seuls les 500 premiers enregistrements sont calculés en moyenne. Si vous ne faites pas attention, vous pouvez interpréter à tort une réponse partielle comme une réponse complète d’un utilisateur de votre application.

Modification de la limite

Le nombre par défaut d’enregistrements est de 500, mais vous pouvez changer ce nombre pour une application entière :

  1. Cliquez sur Paramètres.
  2. En dessous de Général, changer le paramètre Limite de lignes de données de 1 à 2 000.

Dans certains cas, vous savez que la valeur 2 000 (ou 1 000 ou 1 500) répond aux besoins de votre scénario. Vous pouvez augmenter ce nombre avec précaution pour l’adapter à votre scénario. L’augmentation de ce nombre peut entraîner une baisse des performances de votre application, en particulier pour des tableaux larges avec de nombreuses colonnes. La meilleure solution reste encore de déléguer autant que possible.

Pour être sûr que votre application peut s’adapter à de grands jeux de données, réduisez ce paramètre à 1. Tout ce qui ne peut pas être délégué retourne un seul enregistrement que vous devez pouvoir détecter facilement en testant votre application. Cela peut vous éviter de mauvaises surprises quand vous tentez de déployer une application « preuve de concept » en production.

Avertissements de délégation

Pour savoir plus facilement ce qui est ou non délégué, Power Apps génère des avertissements (sous forme de triangles jaunes) quand vous créez une formule qui contient un élément non délégable.

Les avertissements de délégation s’affichent uniquement sur les formules qui s’exécutent sur des sources de données délégables. Si vous ne voyez pas d’avertissement 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 figurant plus haut dans cette rubrique.

Exemples

Pour cet exemple, vous allez générer automatiquement une application à trois écrans basée sur une table SQL Server nommée [dbo].[Fruit]. Pour générer l’application, appliquez des principes similaires à ceux décrits dans la rubrique sur Dataverse à SQL Server.

Application à trois écrans.

La propriété Items de la galerie est définie avec une formule qui contient les fonctions délégables SortByColumns et Search.

Dans la zone de recherche, tapez "Apple".

Des pointillés apparaissent momentanément dans la partie supérieure de l’écran quand l’application communique avec SQL Server pour traiter la requête de recherche. Tous les enregistrements qui répondent aux critères de recherche s’affichent, même si la source de données contient des millions d’enregistrements.

Contrôle d’entrée de texte de la recherche.

La recherche retourne les résultats "Apples", "Crab apples" et "Pineapple", car la fonction Search explore tout dans une colonne de texte. Si vous souhaitez trouver uniquement les enregistrements contenant le terme de la recherche au début du nom du fruit, utilisez une autre fonction délégable, Filter, avec un terme de recherche plus complexe. (Par souci de simplicité, supprimez l’appel SortByColumns.)

Supprimer l’appel SortByColumns.

La nouvelle recherche retourne "Apples", mais pas "Crab apples" ni "Pineapple". Toutefois, un triangle jaune s’affiche en regard de la galerie (et dans la miniature de l’écran si la barre de navigation gauche affiche les miniatures), et une ligne bleue ondulée apparaît sous une partie de la formule. Chacun de ces éléments indique un avertissement. Si vous pointez sur le triangle jaune à côté de la galerie, le message suivant s’affiche :

Pointer sur l’avertissement de délégation.

SQL Server est une source de données délégable, de même que la fonction Filter. Toutefois, les fonctions Mid et Len ne peuvent pas être déléguées à n’importe quelle source de données.

Pourtant cela a fonctionné, n’est-ce pas ? En quelque sorte, oui. Et c’est pourquoi un avertissement est généré, et non une ligne rouge ondulée.

  • Si la table contient moins de 500 enregistrements, la formule fonctionne parfaitement. Tous les enregistrements sont importés dans l’appareil, et la fonction Filter est appliquée localement.
  • Si la table contient plus de 500 enregistrements, la formule ne retourne pas ceux venant après 501, même s’ils correspondent aux critères.

Voir aussi

Impact de l’utilisation de fonctions non délégables et limites de ligne de données inappropriées sur la performance
Conseils sur les performances et pratiques recommandées pour la délégation

Notes

Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)

Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).