Limitations de requêtes : délégation et limites de requêtes
Comprendre la délégation
Power Apps fonctionne mieux avec une source de données back-end lorsqu’une requête Power Fx peut être entièrement traduite en requête équivalente qui peut être exécutée sur la source de données. Power Apps envoie une requête que la source de données comprend, la requête est exécutée sur la source de données et les résultats de la requête sont renvoyés à Power Apps. Par exemple, la source de données peut effectuer le travail de filtrage des données sur la source de données et renvoyer uniquement les lignes qui répondent aux critères de filtre. Lorsque cela fonctionne correctement, on dit que la requête est déléguée à la source de données pour effectuer le travail de la requête.
Cependant, les requêtes Power Fx ne peuvent pas toujours être traduites en requêtes équivalentes sur toutes les sources de données. Par exemple, Dataverse prend en charge plus de fonctionnalités de requête qu’Excel. Dataverse prend en charge l’opérateur de requête « dans » (appartenance), contrairement à Excel. On dit que la requête est non délégable si une requête utilise une fonctionnalité que la source de données ne prend pas en charge. En général, si une partie d’une expression de requête n’est pas délégable, nous ne déléguons aucune partie de la requête.
Lorsqu’une requête n’est pas délégable, Power Apps récupère uniquement les 500 premiers enregistrements de la source de données, puis exécute les actions de la requête. Cette limite peut être revue à la hausse jusqu’à 2 000 enregistrements Changer la limitePower Apps limite la taille du résultat à 500 enregistrements pour préserver les bonnes performances de Power Apps. Par expérimentation, nous avons trouvé que les jeux de résultats supérieurs à ces tailles introduisent des problèmes de performance pour votre application et Power Apps en général.
Cependant, cette limitation peut être un problème car la requête peut renvoyer des résultats incorrects si les données de la source de données dépassent 500/2 000 enregistrements. Par exemple, prenons l’exemple où votre source de données contient 10 millions d’enregistrements et votre requête doit opérer sur la dernière partie des données. (Par exemple, les noms de famille qui commencent par « Z ») Cependant, votre requête contient un opérateur non délégable (par exemple, distinct.) Dans ce cas, vous récupérez uniquement les 500/2 000 premiers enregistrements et vous obtenez des résultats incorrects.
Créez vos requêtes Power Fx en utilisant les tables délégables pour votre source de données. Vous ne devez utiliser que des fonctions de requête 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.
Note
Grâce aux avertissements de délégation, vous pouvez gérer votre application pour qu’elle dispose de résultats corrects. Si les données de votre source de données dépassent 500 enregistrements et qu’une fonction ne peut pas être déléguée, Power Fx marquera la formule avec un soulignement bleu.
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 :
- Fonctions et opérations délégables Power Apps pour Microsoft Dataverse
- Fonctions et opérations délégables Power Apps pour SharePoint
- Fonctions et opérations délégables Power Apps pour SQL Server
- Fonctions et opérations délégables Power Apps pour Salesforce
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.
Fonctions de filtre
Les fonctions Filter, Search, First 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
Note
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 :
- If
- *, /, Mod
- Opérations de transtypage de colonne Texte, Valeur
- Concatenate (y compris &)
- ExactIn
- Fonctions de manipulation de chaînes : Lower, Upper, Left, Mid, Len, ...
- Signaux : Location, Acceleration, Compass, ...
- Volatils : Rand, ...
- Regroupements
Limitations de requêtes
Niveaux de recherche
Power Apps prend en charge deux niveaux de recherche. Cela signifie qu’une expression de requête Power Fx peut contenir, au maximum, deux fonctions de recherche. Cette limitation vise à préserver les performances. Si une expression de requête inclut une recherche, Power Apps crée d’abord une requête pour obtenir la table de base. Ensuite, il crée une deuxième requête qui développe la première table avec les informations de recherche. Nous prenons en charge au maximum un niveau supplémentaire au-delà de celui-ci. Cependant, pour le mode hors connexion, nous ne prenons en charge qu’un seul niveau d’extension de recherche.
Evaluation d’expression - la propriété ou l’entité doit être définie sur LHS à gauche de l’opérateur d’égalité
Il est important de placer la propriété d’une entité à comparer dans une expression du côté gauche LHS d’une équation. Pour illustrer cela, dans l’exemple ci-dessous, la propriété d’entité ID de division .Name est une valeur de propriété et elle doit être placée sur le LHS de l’expression à évaluer. L’expression suivante réussit :
Filter(
Budgets,
'Business unit ID'.Name = LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name,
DataCardValue37.Selected.'Date Range String'='Date Range String'
)
Cependant, cette expression ne réussira pas :
Filter(
Budgets,
LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name = 'Business unit ID'.Name,
'Date Range String'=DataCardValue37.Selected.'Date Range String'
)
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
Certaines fonctions agrégées peuvent être déléguées en fonction du support back-end. Des fonctions telles que Sum, Average, Min et Max peuvent être déléguées. Les fonctions de comptage telles que CountRows et Count ne peuvent pas être déléguées non plus. However RemoveIf et UpdateIf ont des restrictions en matière de délégation. Actuellement, seul un nombre limité de sources de données prend en charge la délégation pour ces fonctions. Pour en savoir plus, consultez la Liste des délégations.
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. Le traitement local 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 :
- Cliquez sur Paramètres.
- 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 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 plus haut dans cet article.
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 plus d’informations sur la génération de l’application, vous pouvez appliquer à SQL Server des principes similaires à ceux décrits dans l’article sur Dataverse.
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.
La recherche retourne les résultats "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.)
La nouvelle recherche retourne "Apples", mais pas "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 :
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