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. 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. 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. 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 via un réseau cellulaire.

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. 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.

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. 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. 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.

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 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. Soyez attentif aux points bleus qui signalent 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 le traitement peut être effectué en local si la formule ne peut pas être déléguée.

Sources de données transmissibles

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.

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.

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 PowerApps 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. Recherchez les suggestions repérées par des points bleus 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 filtrage

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

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 :

Vous pouvez également utiliser les parties de votre formule qui effectuent une comparaison avec une valeur constante pour tous les enregistrements. 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. Il s’agit en fait d’une constante. 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.

Il manque dans la liste ci-dessus certains éléments importants :

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.

Autres fonctions

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

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. Par exemple :

  • 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. Le résultat de la formule entière sera 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 avec Suppliers peut être trouvée n’importe où dans la source de données, même si elle est volumineuse. 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. 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.

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 PowerApps. 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 bloquée.

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. 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 d’un million d’enregistrements. Étant donné que le filtrage s’effectue localement, seuls les 500 premiers enregistrements du million d’enregistrements seront analysés. 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.

Tout cela peut également prêter à confusion au niveau des fonctions d’agrégation. Prenez la fonction Average sur une colonne de cette même source de données d’un million d’enregistrements. É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. 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.

Points bleus

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é.

Les points bleus s’affichent uniquement sur les formules qui s’exécutent sur des sources de données délégables. 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.

Exemples

Dans cet exemple, nous allons utiliser une table SQL Server qui contient des produits, en particulier des fruits, nommée [dbo].[Products]. Sur le nouvel écran, PowerApps peut créer une application de base à trois écrans connectée à cette source de données :

Notez la formule pour la propriété Items de la galerie. Elle utilise les fonctions SortByColumns et Search, qui peuvent être déléguées.

Nous allons taper « Apple » dans le contrôle d’entrée de texte de la recherche. 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. Ces pointillés indiquent que nous communiquons avec 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.

Vous remarquerez une correspondance pour « Apple » et « Pineapple ». Le fonction Search trouvera un terme de recherche n’importe où dans une colonne de texte. Supposons, au lieu de cela, que nous voulions n'obtenir que le terme de recherche au début du nom du fruit. 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) :

Cela semble fonctionner : seuls les enregistrements Apples s’affichent désormais correctement, et pas Pineapple. 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. Un point bleu s’affiche même dans la miniature de l’écran. Si nous survolons le point bleu en regard de la galerie, nous obtenons ce qui suit :

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. Mid et Len ne peuvent pas être déléguées à une source de données.

Pourtant cela a fonctionné, n’est-ce pas ? En quelque sorte, oui. 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. Si la table [dbo].[Products] contient moins de 500 enregistrements, alors oui, cela a parfaitement fonctionné. Tous les enregistrements ont été importés dans l’appareil et la fonction Filter a été appliquée en local.

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. Si « Apple, Fuji » apparaît sous la forme d’un nom dan l’enregistrement 501 ou 500 001, il sera introuvable.