Partager via


Limitations de requêtes : délégation et limites de requêtes

Power Apps fonctionne mieux avec une source de données principale lorsqu’une requête Power Fx est entièrement convertie en une requête équivalente qui s’exécute sur la source de données. Power Apps envoie une requête que la source de données comprend, la source de données exécute la requête et Power Apps obtient les résultats. Par exemple, la source de données filtre les données et renvoie uniquement les lignes qui répondent aux critères de filtrage. Lorsque cela se produit, la requête est déléguée à la source de données.

Mais les requêtes Power Fx ne peuvent pas toujours être converties en requêtes équivalentes sur chaque source 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 « in » (appartenance), contrairement à Excel. Une requête n’est pasdelegable si elle utilise une fonctionnalité que la source de données ne prend pas en charge. Si une partie d’une expression de requête n’est pas déléguable, Power Apps ne délègue aucune partie de la requête.

Lorsqu’une requête n’est pas déléguable, Power Apps obtient les 500 premiers enregistrements de la source de données, puis exécute les actions dans la requête. Vous pouvez augmenter cette limite à 2 000 enregistrements. Modification de la limitePower Apps limite la taille du résultat à 500 enregistrements pour garantir le bon fonctionnement de votre application. Des ensembles de résultats plus volumineux peuvent entraîner des problèmes de performances pour votre application et Power Apps.

Toutefois, cette limitation peut poser problème, car la requête peut renvoyer des résultats incorrects si la source de données contient plus de 500 ou 2 000 enregistrements. Par exemple, si votre source de données contient 10 millions d’enregistrements et que votre requête doit fonctionner sur la dernière partie des données, comme les noms de famille qui commencent par « Z », et que votre requête utilise un opérateur non transmissible comme distinct, vous n’obtenez que les 500 ou 2 000 premiers enregistrements. Vous obtenez donc des résultats incorrects.

Créez vos requêtes Power Fx en utilisant les tables délégables pour votre source de données. N’utilisez que les fonctions de requête qui peuvent être déléguées. Il s’agit de la seule façon de maintenir votre application performante et de s’assurer que les utilisateurs obtiennent toutes les informations dont ils ont besoin.

Accordez une attention particulière aux avertissements de délégation qui s’affichent lorsque la délégation n’est pas possible. Si vous utilisez de petits jeux de données (moins de 500 enregistrements), vous pouvez utiliser n’importe quelle source de données et formule, car l’application traite les données localement si la formule n’est pas déléguée.

Note

Grâce aux avertissements de délégation, vous pouvez gérer votre application pour qu’elle renvoie des résultats corrects. Si les données de votre source de données dépassent 500 enregistrements et qu’une fonction n’est pas déléguée, Power Fx marque la formule avec un soulignement bleu.

Sources de données délégables

La délégation fonctionne uniquement avec certaines sources de données tabulaires. Si une source de données prend en charge la délégation, la documentation de son connecteur explique cette prise en charge. Ces sources de données tabulaires populaires prennent en charge la délégation :

Les classeurs Excel importés (à l’aide de la source de données Ajouter des données statiques à votre application), les collections et les tables stockées dans des variables de contexte n’ont pas besoin de la délégation. Ces données sont déjà en mémoire. Vous utilisez donc la langue Power Apps complète.

Fonctions délégables

N’utilisez que des formules qui peuvent être déléguées. Cet article répertorie les éléments de formule qui peuvent être délégués. Toutes les sources de données sont différentes et ne prennent pas toutes en charge l’ensemble de ces éléments. Vérifiez 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.

Les fonctions Filter et LookUp sont utilisées 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, Filter(Accounts, Name in ["name1", "name2"]) délègue à la source de données pour l’évaluation. Mais Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]) n’est pas délégué car la colonne Nom complet se trouve dans une autre table (PrimaryContact) que Comptes. L’expression est évaluée localement.

  • =, <>, >=, <=, >, <
  • +, -
  • TrimEnds
  • IsBlank
  • StartsWith, EndsWith
  • Valeurs constantes identiques dans tous les enregistrements, telles que les propriétés de contrôle et les variables globales et contextuelles.

Vous pouvez également utiliser des 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épendent d’aucune colonne de l’enregistrement, ils renvoient donc la même valeur pour tous les enregistrements. Ces valeurs sont envoyées à la source de données en tant que constante et ne bloquent pas la délégation.

La liste précédente n’inclut pas ces éléments notables :

Délégation et collections

Lorsque vous utilisez With, UpdateContextou Set, ces fonctions créent des collections en interne. Les collections sont une liste statique d’enregistrements en mémoire et ne peuvent pas participer à la délégation. Aucun avertissement de délégation ne s’affiche.

Limitations de requêtes

Niveaux de recherche et de développement

Power Apps vous permet d’utiliser jusqu’à deux niveaux de recherche. Une expression de requête Power Fx peut inclure un maximum de deux fonctions de recherche pour maintenir les performances. Lorsqu’une expression de requête inclut une recherche, Power Apps interroge d’abord la table de base, puis exécute une deuxième requête pour développer la première table avec les informations de recherche. Un niveau supplémentaire au-delà de ce niveau est pris en charge comme valeur maximale. Pour les scénarios hors connexion, un seul niveau d'extension de la recherche est pris en charge.

Développez ou joignez jusqu’à 20 entités dans une seule requête. Si vous devez joindre plus de 20 tables dans une seule requête, essayez de créer une vue sur le serveur de données si possible.

Evaluation d’expression - la propriété ou l’entité doit être définie sur LHS à gauche de l’opérateur d’égalité

Placez la propriété d’une entité à comparer sur le membre gauche (LHS) d’une équation. Par exemple, dans l’expression suivante, la propriété d’entité 'Business unit ID'.Name se trouve sur LHS et l’expression fonctionne :

Filter(
        Budgets,
        'Business unit ID'.Name = LookUp(
            Users,
            'Primary Email' = User().Email,
            'Business Unit'
        ).Name,
        DataCardValue37.Selected.'Date Range String'='Date Range String'
    )

Toutefois, cette expression ne fonctionne 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 fonction 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 n’inclut pas d’autres opérateurs ou fonctions.

Fonctions d’agrégation

Certaines fonctions d’agrégation 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 peuvent également être déléguées. Toutefois, RemoveIf et UpdateIf ont des restrictions de délégation. Seul un nombre limité de sources de données prend en charge la délégation pour ces fonctions. Pour plus d’informations, consultez la Liste de délégation.

Fonctions non délégables

Toutes les autres fonctions ne peuvent pas déléguer. Les fonctions notables sont les 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 vous permet d’utiliser le langage complet de la formule Power Apps. Mais il existe un compromis : toutes les données viennent d’abord à l’appareil, ce qui peut entraîner l'obtention d'une grande quantité de données via le réseau. Ce processus peut prendre du temps et donner l’impression que votre application est lente ou ne répond pas.

Pour éviter ce problème, Power Apps impose une limite sur la quantité de données qui peuvent être traitées en local, à savoir jusqu'à 500 enregistrements par défaut. Cette limite vous permet d’utiliser complètement de petits jeux de données et d’utiliser des jeux de données volumineux en voyant des résultats partiels.

Soyez prudent lorsque vous utilisez cette fonctionnalité car elle peut dérouter les utilisateurs. Par exemple, si vous utilisez la fonction Filter avec une formule de sélection qui ne peut pas être déléguée sur une source de données comportant un million d’enregistrements, seuls les 500 premiers enregistrements sont analysés. Si l’enregistrement souhaité est 501 ou 500 001, Le filtre ne trouve pas ou ne le retourne pas.

Les fonctions d’agrégation peuvent également prêter à confusion. Par exemple, si vous utilisez Average sur une colonne de cette même source de données d’un million d’enregistrements, Average ne peut pas être délégué, car l’expression n’est pas déléguée (voir la note précédente). Seuls les 500 premiers enregistrements font l’objet d’une moyenne. Si vous n’êtes pas prudent, un utilisateur peut penser qu’une réponse partielle est la réponse complète.

Modification de la limite

Le nombre d’enregistrements par défaut est 500, mais vous pouvez modifier ce numéro pour votre application :

  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, 2 000, 1 000 ou 1 500 enregistrements sont suffisants pour votre scénario. Vous pouvez augmenter ce nombre en fonction de vos besoins, mais à mesure que vous le faites, les performances de votre application peuvent se dégrader, en particulier pour les grandes tables avec de nombreuses colonnes. Il est toujours préférable de déléguer autant que possible.

Pour vous assurer que votre application est mise à l’échelle vers des jeux de données volumineux, définissez cette valeur sur 1. Tout ce qui ne peut pas être délégué renvoie un seul enregistrement, qui est facile à détecter lorsque vous testez votre application. Cela vous aide à éviter de mauvaises surprises quand vous envoyez une application « preuve de concept » en production.

Avertissements de délégation

Power Apps affiche un avertissement (triangle jaune) lorsque vous créez une formule qui ne peut pas être déléguée. Il est plus facile de savoir ce qui est et n’est pas délégué.

Les avertissements de délégation apparaissent uniquement sur les formules qui utilisent des sources de données délégables. Si vous ne voyez pas d’avertissement mais vous pensez que votre formule n’est pas déléguée, vérifiez le type de votre source de données par rapport à la liste des sources de données délégables figurant plus haut dans cet article.

Examples

Dans cet exemple, vous générez automatiquement une application à trois écrans basée sur une table SQL Server nommée [dbo].[Fruit]. Pour savoir comment générer l’application, appliquez des principes similaires à ceux de l’article sur Dataverse à SQL Server.

Application à trois écrans.

La propriété Items de la galerie utilise une formule avec les fonctions SortByColumns et Search, qui peuvent être déléguées toutes les deux.

Dans la zone de recherche, entrez "Apple".

Des pointillés apparaissent brièvement 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 correspondant aux critères de recherche s’affichent, même si la source de données a des millions d’enregistrements.

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

La recherche retourne les résultats "Apples" et "Pineapple" car la fonction Search explore tout dans une colonne de texte. Pour 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 spécifique. Par souci de simplicité, supprimez l’appel SortByColumns.

Supprimer l’appel SortByColumns.

La nouvelle recherche retourne "Apples", mais pas "Pineapple". Un triangle jaune apparaît à côté de la galerie et dans la vignette de l’écran si la barre de navigation de gauche affiche des vignettes. Une ligne bleue ondulée apparaît sous une partie de la formule. Chacun de ces éléments indique un avertissement. Lorsque 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 et Filter est une fonction délégable. Cependant, Mid et Len ne peuvent être déléguées à aucune source de données.

Mais ça marche, n’est-ce pas ? En quelque sorte. C’est pourquoi un avertissement est généré, et non une ligne rouge ondulée.

  • Si la table a 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 a plus de 500 enregistrements, la formule ne renvoie pas ceux venant après 501, même s’ils correspondent aux critères.

Voir aussi