Décode l'informatique

Délégation dans Power Apps

Power Apps Opérateurs Fonctions délégables SQL Server

Limite des 2000 lignes

Vous savez que Power Apps ne peut récupérer que 2000 éléments au maximum, même s’il est possible de contourner cette limite (déconseillé).

Vous pouvez modifier cette valeur dans le menu Fichier puis le lien Paramètres et ensuite le lien Paramètres avancés et enfin dans la zone Limite de lignes de données pour les requêtes non délégables. Toutefois, vous ne pourrez pas indiquer une valeur supérieur à 2000.

Power Apps Limite 2000 lignes maximum
Power Apps Limite 2000 lignes maximum

Concrètement, s’il y a 2100 enregistrements qui devraient être renvoyés par une fonction de filtre, vous recevrez les 2000 premiers enregistrements et 100 enregistrements ne seront pas renvoyé. Ce qui peut fausser vos calculs ou affichages.

Ceci vrai pour toutes les sources de données et toutes les licences.

Scénario sympa

Dans ce scénario, on suppose que la valeur maximum de la limite de lignes de données pour les requêtes non délégables est au maximum (2000).

Une application Power Apps utilise une formule avec deux filtres imbriqués. Le premier filtre est basé sur une fonction FILTER() ou SEARCH() : peu importe. Le second filtre, qui récupère le résultat du premier filtre, ne garde que 10% des résultats du premier filtre.

Donc, si le premier filtre renvoie 300 éléments au maximum, le second va renvoyer 30 éléments (10 % du premier jeu).

Tout va bien. Pour l’instant.

Scénario B

Ici aussi, on suppose que la valeur maximum de la limite de lignes de données pour les requêtes non délégables est au maximum.

Il y a aussi une formule avec deux filtres imbriqués qui fonctionne exactement comme dans le scénario sympa ci-dessus.

Lors de l’exécution de l’application, le premier filtre cherche à renvoyer 3000 éléments. Toutefois, Power Apps n’en recevra que 2000. Dans ces conditions, le second filtre renverra une table de 200 lignes (10% de 2000). Le résultat attendu était d’avoir 300 lignes (10% de 3000) et non pas seulement 200.

Ca ne va pas.

C’est maintenant qu’il faut comprendre le rôle et l’intérêt de la délégation dans Power Apps.

Intérêt de la délégation dans Power Apps

SharePoint, Dataverse et SQL Server supportent la délégation avec Power Apps. Cela signifie que Power Apps délègue le traitement des données à ces sources de données, plutôt que de traiter les données localement dans l’application elle-même.

Concrètement, dans le cas des deux scénarios précédents et grâce à la délégation, les filtres s’exécutent directement sur ces sources de données avant de renvoyer les résultats.

Le scénario sympa renvoie donc 30 lignes. Il n’y a pas de changement particulier.

En revanche, le scénario B renvoie bien 300 lignes. En effet, la limite des 2000 maximum s’applique au nombre de lignes renvoyées par Power Apps et non pas à la source de données. Donc avec le premier FILTER(), la source de données filtre les 3000 enregistrements. Ces 3000 enregistrements sont filtrés avec le second FILTER(). Ce qui donne 300 lignes.

Comment ça marche ?

La formule qui utilise la fonction Power Apps FILTER() est traduite dans le langage de manipulations de données que comprend la source de données délégable.

Pour prendre un exemple simpliste :

Filter(Table;Title = 42)

donne quelque chose qui doit ressembler à :

Select * From Table Where Title=42

Sauf que c’est plus compliqué que ça.

Une délégation variable

La délégation dépend à la fois : 1) de la fonction appelée ou de l’opérateur concerné, 2) de la nature des données (texte, booléen, etc.), 3) de la source de données.

En effet, toutes les sources de données délégables n’acceptent pas toutes les fonctions ou tous les types de données.

Les 3 liens ci-dessous indiquent les capacités de délégation par connecteurs :

  • https://docs.microsoft.com/en-us/connectors/sharepointonline/
  • https://docs.microsoft.com/en-us/connectors/commondataservice/
  • https://docs.microsoft.com/en-us/connectors/sql/
Power Apps Opérateurs Fonctions délégables SharePoint
Power Apps Opérateurs Fonctions délégables SharePoint

De ces 3 tableaux, il ressort que globalement SQL Server accepte la délégation pour plus de fonctions / types de données que SharePoint ou Common Data Service (Microsoft Dataverse).

Toutefois, dans la pratique, c’est encore un peu plus compliqué que ça.

Persistance de la délégation

Il est relativement “facile” de faire sauter la délégation, même en utilisant une fonction délégable.

Pour cela, il suffit d’utiliser une fonction non-délégable dans une fonction délégable.

Sur sa page Understand delegation in a canvas app, Microsoft donne un exemple avec une fonction non délégable à l’intérieur d’une fonction FILTER().

Filter('Fruit';Left(Name;Len(TextSearchBox1.Text))=TextSearchBox1.Text)

Comme les fonctions LEFT() et LEN() ne sont pas délégables, la formule ne peut pas s’exécuter sur le serveur, malgré la présence de la fonction FILTER() qui est délégable.

Elle doit s’exécuter localement.

Microsoft365 Addict

Ajouter un commentaire