Délégation Power Apps : comprendre et corriger l'avertissement

Délégation Power Apps : pourquoi l'avertissement apparaît, ce que changent les limites 500 et 2 000, et comment écrire des formules qui tiennent la charge.

La délégation, dans Power Apps, c’est le fait d’envoyer une requête à la source de données (SharePoint, Dataverse, SQL Server…) pour qu’elle fasse elle-même le filtrage, le tri ou le calcul, et ne renvoie que le résultat. Quand une formule n’est pas délégable, Power Apps rapatrie seulement les 500 premiers enregistrements (limite réglable jusqu’à 2 000) et applique la formule en local : au-delà, les données sont tout simplement ignorées, sans erreur. L’avertissement de délégation (triangle jaune et soulignement bleu dans la formule) vous signale ce risque de résultats incomplets.

Qu’est-ce que la délégation dans Power Apps ?

Une application canvas affiche des données qui vivent ailleurs. Deux scénarios sont possibles :

  • La formule est délégable : Power Apps la traduit en requête que la source comprend. La source filtre ses millions de lignes et renvoie uniquement celles qui correspondent. Votre galerie charge ensuite les résultats par pages, au fil du défilement.
  • La formule n’est pas délégable : Power Apps ne sait pas la traduire. Il télécharge alors un lot limité de lignes et applique la formule sur l’appareil.

Point essentiel : si une seule partie d’une expression n’est pas délégable, aucune partie de la requête n’est déléguée. Une condition maladroite suffit à faire basculer tout un filtre en traitement local.

Pourquoi 500 lignes, et comment passer à 2 000 ?

La limite par défaut est de 500 enregistrements. Elle se modifie dans Paramètres > Général > Limite de lignes de données (« Data row limit »), avec une valeur comprise entre 1 et 2 000.

Augmenter la limite n’est pas une solution, seulement un sursis :

  • au-delà de 2 000 lignes, le problème revient à l’identique ;
  • les performances se dégradent, surtout sur des tables larges ;
  • l’erreur est silencieuse : un Filter qui cherche l’enregistrement n° 2 500 ne le trouve pas, et un Average calcule une moyenne sur une partie des données en la présentant comme complète.

Astuce de test recommandée par Microsoft : réglez temporairement la limite sur 1. Toute formule non déléguée ne renvoie alors qu’une seule ligne, ce qui saute aux yeux pendant les tests, bien avant la mise en production.

Quelles fonctions sont délégables ?

De manière générale, peuvent être délégués : Filter, Search, LookUp, First, Sort, SortByColumns, ainsi que les agrégats Sum, Average, Min, Max, CountRows — à condition que la source les prenne en charge. À l’intérieur d’un Filter ou d’un LookUp, on peut utiliser les opérateurs de comparaison, And, Or, Not, in, StartsWith, EndsWith, IsBlank, et des valeurs constantes comme Today() ou une variable.

Ne sont jamais délégables : FirstN, Last, LastN, Choices, Concat, Collect, ClearCollect, GroupBy, Ungroup, et dans un filtre : If, la multiplication et la division, Text(), Value(), la concaténation &, Len, Left, Mid, Lower, Upper…

Quelle différence entre SharePoint, Dataverse et SQL Server ?

C’est là que tout se joue : chaque connecteur a sa propre liste. Voici les points qui piègent le plus souvent (documentation Microsoft Learn de chaque connecteur).

Opération SharePoint Dataverse SQL Server
= sur texte, nombre, date Oui Oui Oui
<, >, <=, >= sur texte Non Oui Non
StartsWith sur texte Oui Oui Oui
Search Non Oui (texte) Oui (texte)
in (recherche de sous-chaîne) Non Oui Oui
IsBlank(colonne) Non Oui Non
Sum, Average, Min, Max Non Oui (nombres) Oui (nombres)
Not Non Oui Oui

Quelques subtilités propres à SharePoint :

  • la colonne ID n’accepte que l’égalité = ; un filtre ID > 100 n’est pas délégué ;
  • pour une colonne Personne, seuls Email et DisplayName sont délégables ;
  • StartsWith n’est pas délégué sur les sous-champs d’une colonne de choix ou de recherche ;
  • les champs système (Name, Path, ContentType, VersionNumber…) ne sont en général pas délégables.

Côté Dataverse, les agrégats sont délégués mais plafonnés à 50 000 lignes, et CountRows renvoie une valeur mise en cache.

Comment corriger un avertissement de délégation ?

Les formules ci-dessous sont écrites avec les séparateurs français : le point-virgule sépare les arguments (une virgule si votre navigateur est réglé sur une langue qui utilise le point décimal, comme l’anglais).

1. Réécrire la condition avec une fonction délégable

C’est la correction la plus fréquente. Sur une liste SharePoint de demandes :

// Non délégable sur SharePoint : Search
Search(Demandes; txtRecherche.Text; Title)

// Délégable : StartsWith sur une colonne texte
Filter(Demandes; StartsWith(Title; txtRecherche.Text))

Vous perdez la recherche « contient », mais vous gardez un résultat exact sur toute la liste. Dans la majorité des usages métier (nom de client, référence de dossier), la recherche par début de mot suffit.

Autre cas typique, le test de valeur vide :

// Non délégable sur SharePoint
Filter(Demandes; IsBlank(Responsable))

// Délégable sur SharePoint (n'assimile pas la chaîne "" à une valeur vide)
Filter(Demandes; Responsable = Blank())

2. Sortir les calculs de la colonne

Toute transformation appliquée à la colonne casse la délégation. Calculez plutôt la valeur de comparaison une fois pour toutes, à droite de l’opérateur :

// Non délégable : la colonne est transformée
Filter(Commandes; Year(DateCommande) = 2026)

// Délégable : la colonne reste brute, les bornes sont constantes
Filter(
    Commandes;
    DateCommande >= Date(2026; 1; 1) && DateCommande < Date(2027; 1; 1)
)

Même logique pour Lower(Title) = "dupont" : stockez une colonne normalisée, ou comparez directement sur la valeur saisie.

3. Filtrer d’abord, enrichir ensuite

Les fonctions non délégables ne posent pas de problème si elles s’appliquent après un filtre délégable qui ramène peu de lignes :

AddColumns(
    Filter(Demandes; Statut.Value = "En cours" && Demandeur.Email = User().Email);
    DelaiJours; DateDiff(DateCreation; Today())
)

Le filtre est délégué ; AddColumns travaille ensuite sur un petit volume. Attention : le résultat d’AddColumns reste soumis à la limite de lignes. Vérifiez donc que le sous-ensemble filtré reste bien en dessous.

4. Préparer la source plutôt que l’application

Les contournements les plus propres se font souvent côté données :

  • Indexer les colonnes filtrées dans SharePoint. Au-delà du seuil d’affichage de 5 000 éléments d’une liste, filtrer sur une colonne non indexée devient fragile ; les colonnes de vos filtres principaux doivent être indexées.
  • Ajouter une colonne dédiée : plutôt qu’un calcul dans Power Apps, stockez l’année, le mois ou un statut simplifié dans une colonne (alimentée par un flux Power Automate ou à la saisie) et filtrez dessus.
  • Créer une vue côté SQL qui fait le travail complexe (jointures, agrégats), puis l’exposer à l’application.
  • Passer à Dataverse quand le volume et la complexité augmentent : plus d’opérateurs délégables, des agrégats délégués, une sécurité par rôle. Nous détaillons ce choix dans SharePoint ou Dataverse : quelle base de données ?.

Les erreurs à éviter

  • Augmenter la limite à 2 000 et considérer le problème réglé. Votre application fonctionnera en recette, puis donnera des résultats faux le jour où la liste dépassera ce volume.
  • Charger toute la table dans une collection. ClearCollect(colDemandes; Demandes) ne récupère que 500 ou 2 000 lignes, et les collections ne participent jamais à la délégation. Pire : vous ne verrez plus aucun avertissement.
  • Ignorer les triangles jaunes parce que « ça marche ». Ça marche tant que la source compte moins de lignes que la limite.
  • Utiliser CountRows sur une source SharePoint pour afficher un total. Il ne compte que les lignes rapatriées. Pour un vrai compteur, passez par une source qui délègue l’agrégat ou par un calcul en amont.
  • Mettre la colonne à droite de l’égalité dans des expressions complexes. Microsoft recommande de placer la propriété de la table à gauche de l’opérateur pour que la requête soit correctement traduite.

Faut-il toujours viser 100 % de délégation ?

Non. Sur une petite liste de référence (une vingtaine de sites, quelques dizaines de catégories) qui ne grossira jamais, un avertissement est sans conséquence. La règle pratique : toute table susceptible de dépasser quelques centaines de lignes doit être interrogée par des formules délégables. Les listes de paramètres, elles, peuvent être chargées une fois au démarrage dans une collection.

Ces réflexes font la différence entre une application de démonstration et une application qui tient en production. Si vos équipes découvrent les applications canvas, la formation Power Apps — Créer des applications Canvas pose les bonnes pratiques de requêtage dès le départ. Pour Dataverse, les performances et l’ALM, voyez Power Apps — Perfectionnement. Et si vous hésitez encore sur l’outil adapté à votre besoin, lisez Power Apps ou Power Automate et notre guide pour personnaliser un formulaire SharePoint avec Power Apps.

Questions fréquentes

Quelle est la limite de délégation dans Power Apps ?

Par défaut, une formule non délégable ne traite que les 500 premiers enregistrements de la source. Vous pouvez porter cette limite jusqu’à 2 000 dans Paramètres > Général. Il n’est pas possible d’aller au-delà : la seule vraie solution est d’écrire des formules délégables.

Pourquoi Search déclenche-t-il un avertissement sur SharePoint ?

Parce que le connecteur SharePoint ne délègue pas la fonction Search, ni l’opérateur in utilisé comme recherche de texte. Remplacez-les par Filter(...; StartsWith(Colonne; texte)), qui est délégable, ou basculez vers Dataverse si la recherche « contient » est indispensable.

Une collection permet-elle de contourner la délégation ?

Non. Collect et ClearCollect ne sont pas délégables : ils ne récupèrent que le nombre de lignes autorisé par la limite. Les collections sont utiles pour de petites tables de référence, pas pour contourner la délégation sur une grosse liste.

Comment repérer les formules non déléguées avant la mise en production ?

Réglez la limite de lignes de données sur 1 pendant vos tests : toute formule non déléguée ne renverra qu’un enregistrement, ce qui se voit immédiatement. Surveillez aussi les triangles jaunes dans l’arborescence des écrans et le soulignement bleu dans la barre de formule.