Partager via


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 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 fonctionne, 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 pas délégable 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. Cela signifie que 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. N’utilisez que les 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 que les utilisateurs peuvent obtenir 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 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 traite les données en local si la formule ne peut pas être déléguée.

Nonte

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 ne peut pas être déléguée, Power Fx marque la formule avec un soulignement bleu.

Sources de données délégables

La délégation ne fonctionne qu’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. Par exemple, 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. Toutes ces données sont déjà en mémoire, vous pouvez donc utiliser le langage Power Apps complet.

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 de constante qui sont identiques dans l’ensemble des enregistrements, telles que les variables globales et de contexte.

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 les éléments importants suivants.

Délégation et collections

Lorsque vous utilisez With, UpdateContext ou Set, ils créent des collections en interne. Les collections sont une liste statique d’enregistrements en mémoire et ne participent pas à 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. Mais pour les scénarios hors connexion, un seul niveau de développement de 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'
    )

Mais 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 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 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. Mais 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 être déléguées, 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 vous permet d’utiliser le langage complet de la 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. 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 limite la quantité de données qui peuvent être traitées en local à 500 enregistrements par défaut. Cette limite vous permet d’utiliser complètement de petits ensembles de données et d’affiner votre utilisation des grands ensembles de données en affichant 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 le numéro 501 ou 500 001, la fonction Filter ne le prend pas en compte ni ne le renvoie.

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 ne faites pas attention, un utilisateur peut penser qu’une réponse partielle est complète.

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. Sélectionnez 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 (ou 1 000 ou 1 500) enregistrements suffisent 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 garantir que votre application peut s’adapter à de grands jeux de données, 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 ainsi plus facile de savoir ce qui est délégué et ce qui ne l’est pas.

Les avertissements de délégation s’affichent 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