Home Onze Technologieën Microsoft Power Platform API-koppelingen Diensten · Maatwerk Blogs Over Plan kennismaking

Delegation in Power Apps: waarom je maar 500 rijen ziet

← Alle blogs
Power Apps · Bijgewerkt op · 8 min leestijd

Delegation in Power Apps: waarom je maar 500 rijen ziet

Maarten
Eigenaar Fluentics
Illustratie van delegation in Power Apps: een grote datastapel waarvan maar een deel de app bereikt

Delegation in Power Apps is de verklaring achter een van de vreemdste bugs die je kunt tegenkomen: je app werkt perfect in de test, maar zodra de data groeit “verdwijnen” er rijen. Het echte verhaal: je formule kan niet worden gedelegeerd aan de databron, dus de app haalt maar de eerste 500 rijen op en rekent daarmee verder. In dit artikel leggen we met één voorbeeld uit hoe dat werkt, hoe je het herkent en hoe je het structureel oplost.

Wat is delegation in Power Apps?

Delegeren betekent werk uitbesteden. Een canvas app haalt zijn gegevens uit een databron, zoals een Dataverse-tabel, een SharePoint-lijst of een SQL-database. Bij een delegeerbare formule stuurt de app het werk naar die databron: “geef mij alle klanten uit Zwolle” gaat als vraag naar de bron, en alleen het antwoord komt terug. Snel en compleet, hoeveel rijen er ook zijn.

Kan de databron de bewerking niet uitvoeren, dan draait het om: de app haalt zelf rijen op en rekent lokaal. En daar zit de val. De app haalt standaard alleen de eerste 500 rijen op, in te stellen tot maximaal 2000. Alles daarbuiten bestaat simpelweg niet voor je formule. Geen foutmelding, geen lege app, gewoon stilletjes onvolledige resultaten.

Een beeld dat helpt: de databron is een bibliothecaris met een enorm magazijn. Bij delegation vraag je de bibliothecaris om alle boeken over Zwolle, en je krijgt precies die boeken mee. Zonder delegation neem je zelf de eerste 500 boeken van de plank mee naar huis en zoek je daarin. Staat het boek dat je zoekt op plek 800, dan vind je het nooit.

Delegation in Power Apps: bij een delegeerbare formule filtert de databron alle rijen en komt alleen het resultaat terug; bij een niet-delegeerbare formule haalt de app de eerste 500 rijen op en bestaat de rest niet voor de formule.
Kan de databron je formule niet uitvoeren, dan rekent de app alleen met de eerste 500 rijen, zonder foutmelding.

Het voorbeeld: een klantenlijst met 1.200 rijen

Neem een SharePoint-lijst Klanten met 1.200 klanten. Drie daarvan zitten in Zwolle, op rij 300, 800 en 1.100. In een zoekscherm staat een galerij met deze formule in Items:

Filter(Klanten, "Zwol" in Plaats)

De operator in zoekt midden in een tekst. SharePoint kan dat niet zelf, dus de app haalt de eerste 500 rijen op en zoekt daarin. Resultaat: één klant, die op rij 300. De andere twee ziet niemand. Schrijf je het zo, dan kan SharePoint het wel zelf:

Filter(Klanten, StartsWith(Plaats, "Zwol"))

Nu doet SharePoint het zoekwerk over alle 1.200 rijen en krijg je alle drie de klanten. Het verschil: StartsWith is voor SharePoint delegeerbaar, in niet. De gebruiker moet dan wel het begin van de plaatsnaam typen.

Zo herken je het probleem

  • De blauwe golflijn: Power Apps onderstreept niet-delegeerbare formuledelen met een blauwe golflijn en toont een geel waarschuwingsdriehoekje bij de control. Neem die serieus.
  • Het werkt in de test, niet in productie: testdata blijft onder de 500 rijen, productiedata niet.
  • Zoeken vindt oude records niet: de gezochte rij valt buiten de eerste 500.
  • Totalen kloppen niet: een Sum of CountRows over een niet-delegeerbare set telt alleen de opgehaalde rijen.

Test het met een limiet van 1

Microsoft raadt een handige truc aan om delegation-problemen vroeg te vinden:

  1. Open je app in Power Apps Studio en kies Settings.
  2. Zet onder General de Data row limit op 1.
  3. Speel je app af en loop de schermen langs.

Elke formule die niet delegeert, geeft nu hooguit één rij terug. Dat valt meteen op. Zet de limiet na het testen terug op 500.

Wat is wel en niet delegeerbaar?

Het hangt af van de combinatie databron, functie, operator en kolomtype. Deze tabel geeft de hoofdlijnen voor de twee bronnen die we het vaakst zien, volgens de actuele lijsten op Microsoft Learn:

OnderdeelDataverseSharePoint
Filter en LookUp met =JaJa
<, >, <=, >= op getallen en datumsJaJa
<> op tekstJaNee
StartsWith op tekstJaJa
Search of in (zoeken midden in tekst)JaNee
in met een lijst waarden, zoals Status in ["Open", "Nieuw"]JaNee
IsBlankJa, behalve bij keuzekolommenNee, gebruik Kolom = Blank()
NotJaNee
Sum, Min, Max, AverageJa, tot 50.000 rijenNee
Sort en SortByColumns op gewone kolommenJaJa
Rekenen met een kolom in de voorwaarde, zoals Budget * 2 > 1000NeeNee

Nooit delegeerbaar, bij geen enkele bron: FirstN, Last, LastN, GroupBy, Concat, Choices, Collect en ClearCollect. De volledige matrix per bron staat in het delegation-overzicht op Microsoft Learn, met doorverwijzingen naar Dataverse en SharePoint. SharePoint is dus aanzienlijk beperkter dan Dataverse of SQL.

Vier structurele oplossingen

  1. Herschrijf de formule delegeerbaar: vaak kan dezelfde logica met andere operatoren, zoals StartsWith in plaats van in in het voorbeeld hierboven. Zet de kolom links en de waarde rechts, en reken niet met de kolom zelf. Schrijf dus Budget > 500 in plaats van Budget * 2 > 1000.
  2. Verplaats logica naar de bron: een view in Dataverse, een berekende kolom of een flow die een hulpwaarde vult, maakt een niet-delegeerbare formule overbodig.
  3. Kies de juiste databron: groeit een SharePoint-lijst structureel boven de duizenden rijen, dan is dat het moment om naar Dataverse te kijken; lees ook ons artikel over Dataverse vs SQL.
  4. Documenteer bewuste uitzonderingen: blijft een lijst gegarandeerd klein (zoals een keuzelijst met 30 rijen), dan mag je de waarschuwing accepteren. Leg dat vast, zodat niemand er later over struikelt.

Workaround: eerst grof, dan fijn

Lukt geen van de vier oplossingen, dan gebruiken veel makers een tussenoplossing: laat de databron eerst delegeerbaar voorselecteren, bijvoorbeeld op status of datum, en doe de fijne bewerking daarna in de app. Stel dat je in de klantenlijst midden in de naam wilt zoeken, maar alleen onder de actieve klanten in Zwolle:

Filter(
    Filter(Klanten, Status = "Actief", StartsWith(Plaats, "Zwol")),
    txtZoek.Text in Naam
)
Delegation oplossen in Power Apps met eerst grof, dan fijn: de databron selecteert eerst delegeerbaar voor op status of datum, daarna doet de app de fijne bewerking op de kleinere set.
Een workaround, geen officiële oplossing: de fijne stap werkt alleen op een voorselectie die klein genoeg blijft.

Het idee: het binnenste Filter gaat naar SharePoint en levert bijvoorbeeld 40 klanten op, en het buitenste Filter zoekt daarna lokaal in die 40.

Een eerlijke kanttekening. Microsoft documenteert dit geneste patroon niet. De documentatie over delegation zegt juist dat Power Apps niets van een query delegeert zodra één deel ervan niet delegeerbaar is. Power Apps blijft bij deze formule dan ook een waarschuwing tonen. Gebruik het daarom alleen als de voorselectie gegarandeerd klein blijft: het buitenste filter werkt lokaal en ziet hooguit de eerste 500 rijen van de voorselectie (of maximaal 2000 met de Data row limit onder Settings). Controleer met Live monitor onder Advanced tools welke query Power Apps echt naar de databron stuurt. Zie je het filter op status en plaats in die query terug, dan wordt dat deel gedelegeerd. Zie je het niet, of kan de voorselectie groeien tot boven je rijlimiet, kies dan een van de vier structurele oplossingen.

Veelgemaakte misverstanden

  • “Ik zet de limiet op 2000, dan is het opgelost.” Dat verschuift het probleem alleen. Rij 2001 verdwijnt nog steeds, en de app wordt trager.
  • “Geen waarschuwing, dus geen probleem.” Werk je met een collectie, of met een tabel in Set of With, dan zie je geen waarschuwing. Die data staat al in het geheugen, maar kan bij het vullen al zijn afgekapt.
  • “Ik laad alles in OnStart met ClearCollect.” ClearCollect delegeert niet en haalt dus hooguit 500 of 2000 rijen op.
  • “CountRows op Dataverse is altijd exact.” Dataverse geeft bij CountRows een waarde uit de cache. Voor een exact aantal tot 50.000 rijen gebruik je CountIf(Tabel, true).
  • “Wat in Dataverse werkt, werkt ook in SharePoint.” Nee, zie de tabel hierboven. Test een formule altijd tegen de bron waar hij in productie op draait.

Checklist

  • Zie je nergens een blauwe golflijn bij een bron die kan groeien?
  • Heb je getest met de Data row limit op 1?
  • Staat de kolom links in je voorwaarde, zonder berekening erop?
  • Zijn bewuste uitzonderingen vastgelegd?

Veelgestelde vragen

Kan ik de limiet van 500 rijen niet gewoon verhogen?

Je kunt hem in de app-instellingen onder General ophogen tot 2000, maar dat verschuift het probleem alleen. Rij 2001 verdwijnt nog steeds, en de app wordt trager omdat hij meer data lokaal verwerkt.

Geldt delegation in Power Apps ook voor model-driven apps?

Nee, dit is een canvas app-onderwerp. Model-driven apps bevragen Dataverse altijd server-side. Binnen custom pages (canvas-techniek) geldt het wel weer.

Waarom geeft Power Apps geen foutmelding?

Omdat het resultaat technisch geldig is: de eerste 500 rijen. De blauwe waarschuwing in de editor ís de foutmelding; in de draaiende app merkt de gebruiker niets. Daarom is het zo’n sluipend probleem.

Is delegation erg bij kleine lijsten?

Nee. Bij een lijst die aantoonbaar klein blijft is een niet-delegeerbare formule prima. Het wordt pas een bug wanneer data groeit; en data groeit bijna altijd.

Verder lezen

Meer formulewerk? Bekijk de Power Apps functies gids voor alle belangrijke functies met voorbeelden.

Heeft jouw app last van verdwijnende rijen? Neem contact met ons op, vaak is het in een dagdeel structureel opgelost.

Vragen over dit onderwerp?

Plan een kennismaking →