Power Apps
Évitez CountRows sur les grandes listes
CountRows n'est pas délégable avec SharePoint ou SQL Server. Power Apps comptera silencieusement uniquement les 500 premiers enregistrements.
Le problème
CountRows() n'est pas délégable lorsqu'il est utilisé avec SharePoint, SQL Server ou Dataverse (dans certaines expressions). Power Apps applique la limite de délégation (par défaut : 500 lignes) et ne compte que ce qu'il récupère, sans aucun avertissement à l'exécution.
Si votre liste contient 2 000 éléments, CountRows(Filter(Orders, Status = "Pending")) retournera un nombre entre 0 et 500. Le résultat semble correct. Il ne l'est pas.
Mauvaise approche
// This silently caps at 500 rows
Set(varOrderCount, CountRows(Filter(Orders, Status = "Pending")));
// Displayed in a label -- looks fine, is wrong
Label.Text = varOrderCount
La formule compile sans erreur. L'application s'exécute sans avertissement. Votre comptage est simplement... faux.
Bonne approche
Option A - Colonne de comptage pré-calculée (recommandée pour SharePoint) :
Créez une liste "Counters" séparée avec une ligne par statut. Utilisez un flux Power Automate déclenché à la création/modification d'un élément pour incrémenter ou décrémenter le comptage.
// Read a single, always-accurate row
Set(
varOrderCount,
LookUp(Counters, Category = "PendingOrders").Count
);
Option B - API REST SharePoint via Power Automate :
// Flow HTTP action
GET _api/web/lists/getbytitle('Orders')/ItemCount
// Or with a filter (uses server-side count)
GET _api/web/lists/getbytitle('Orders')/items?$filter=Status eq 'Pending'&$top=5000&$select=Id
Puis stockez le résultat dans une collection ou variable via une réponse de flux.
Point clé
Ne faites jamais confiance à CountRows() sur des sources de données externes volumineuses. Pré-calculez les comptages côté serveur ou utilisez des appels API qui supportent l'agrégation côté serveur.