Informatie over delegeren in een canvas-app
Power Apps bevat een krachtige set functies voor het filteren, sorteren en structureren van gegevenstabellen in een canvas-app: Filter, Sort en AddColumns om er maar een paar te noemen. Met behulp van deze functies kunt u uw gebruikers gerichte toegang bieden tot de informatie die zij nodig hebben. Voor lezers met een databaseachtergrond is het gebruiken van deze functies vergelijkbaar met het schrijven van een databasequery.
Het geheim voor het maken van efficiënte apps is het minimaliseren van de hoeveelheid gegevens die moet worden overgebracht naar een apparaat. Misschien zijn er slechts enkele records uit de totale hoeveelheid van miljoenen records nodig of kan één cumulatieve waarde duizenden records vertegenwoordigen. Het kan ook voldoende zijn om alleen de eerste set records op te halen en de rest pas als de gebruiker daar om vraagt. Een goede focus kan betekenen dat uw app aanzienlijk minder verwerkingskracht, geheugen en netwerkbandbreedte nodig heeft. Het resultaat hiervan is dat de responstijden voor uw gebruikers laag zijn, zelfs op telefoons die zijn verbonden via een mobiel netwerk.
In Delegering komen de expressiviteit van Power Apps-formules en de behoefte om zo min mogelijk gegevens via het netwerk te verplaatsen bij elkaar. Kortom, Power Apps delegeert de verwerking van gegevens aan de gegevensbron, in plaats van de gegevens voor lokale verwerking naar de app te verplaatsen.
Waar het ingewikkeld wordt, en wat de bestaansreden is voor dit artikel, is dat niet alles dat kan worden uitgedrukt in een Power Apps-formule aan iedere gegevensbron kan worden gedelegeerd. De Power Apps-taal imiteert de formuletaal van Excel, die is ontworpen op basis van volledige en directe toegang tot een complete werkmap in het geheugen, met een grote verscheidenheid aan functies voor het manipuleren van numerieke waarden en tekst. Als gevolg hiervan is de Power Apps-taal veel uitgebreider dan de meeste gegevensbronnen aankunnen, met inbegrip van krachtige database-engines zoals SQL Server.
Het werken met grote gegevenssets vereist gegevensbronnen en formules die kunnen worden gedelegeerd. Dit is de enige manier om ervoor te zorgen dat uw app goed blijft presteren en gebruikers toegang hebben tot alle informatie die zij nodig hebben. Neem de delegeringswaarschuwingen in acht die aangeven waar delegering niet mogelijk is. Als u werkt met kleine gegevenssets (minder dan 500 records), kunt u elke gegevensbron en formule gebruiken aangezien de app gegevens lokaal kan verwerken als de formule niet kan worden gedelegeerd.
Notitie
Delegeringswaarschuwingen werden eerder in Power Apps gemarkeerd als ‘blauwe stip’-suggesties, maar delegeringssuggesties zijn nu opnieuw geclassificeerd als waarschuwingen. Als de gegevens in uw gegevensbron meer dan 500 records beslaan en een functie niet kan worden gedelegeerd, kan Power Apps mogelijk niet alle gegevens ophalen en heeft uw app mogelijk onjuiste resultaten. Delegeringswaarschuwingen helpen u bij het beheren van uw app, zodat deze de juiste resultaten heeft.
Overdraagbare gegevensbronnen
Delegering wordt alleen ondersteund voor bepaalde tabelgegevensbronnen. Als een gegevensbron delegeren ondersteunt, wordt dit beschreven in de documentatie bij de connector. Deze gegevensbronnen in tabelvorm zijn bijvoorbeeld het populairst en ondersteunen delegatie:
- Door Power Apps overdraagbare functies en bewerkingen voor Microsoft Dataverse
- Door Power Apps overdraagbare functies en bewerkingen voor SharePoint
- Door Power Apps overdraagbare functies en bewerkingen voor SQL Server
- Door Power Apps overdraagbare functies en bewerkingen voor Salesforce
Er is geen delegering nodig voor geïmporteerde Excel-werkmappen (via de gegevensbron Statische gegevens toevoegen aan uw app), verzamelingen en tabellen die zijn opgeslagen in contextvariabelen. Al deze gegevens zijn al aanwezig in het geheugen en de Power Apps-taal kan maximaal worden toegepast.
Delegeerbare functies
De volgende stap is om alleen de formules te gebruiken die kunnen worden gedelegeerd. Hier worden alle formule-elementen beschreven die kunnen worden gedelegeerd. Elke gegevensbron is echter anders en niet alle gegevensbronnen ondersteunen al deze elementen. Controleer op delegeringswaarschuwingen in uw specifieke formule.
Deze lijsten worden trouwens regelmatig bijgewerkt. We zijn bezig om voor meer functies en operatoren ondersteuning voor delegering aan te bieden.
Filterfuncties
Filter, Search en LookUp kunnen worden gedelegeerd.
Binnen de functies Filter en LookUp kunt u deze gebruiken met kolommen van de tabel om de juiste records te selecteren:
- And (inclusief &&), Or (inclusief ||), Not (inclusief !)
- In
- =, <>, >=, <=, >, <
- +, -
- TrimEnds
- IsBlank
- StartsWith, EndsWith
- Constante waarden die hetzelfde zijn voor alle records, zoals de eigenschappen van besturingselementen en globale en contextvariabelen.
U kunt ook elementen van uw formule gebruiken die evalueren tot een constante waarde voor alle records. Left( Language(), 2 ), Date( 2019, 3, 31 ) en Today() zijn bijvoorbeeld niet afhankelijk van een kolom van de record en retourneren dus voor alle records dezelfde waarde. Deze waarden kunnen als constante naar de gegevensbron worden verzonden en zullen delegatie niet blokkeren.
De vorige lijst bevat deze belangrijke items niet:
- If
- *, /, Mod
- Concatenate (inclusief &)
- ExactIn
- Functies voor tekenreeksmanipulatie: Lower, Upper, Left, Mid, Len, ...
- Signalen: Location, Acceleration, Compass, ...
- Vluchtige functies: Rand, ...
- Collections
Sorteerfuncties
Sort en SortByColumns kunnen worden gedelegeerd.
Bij Sort kan de formule alleen bestaan uit de naam van één kolom. Bovendien kan de formule geen andere operatoren of functies bevatten.
Statistische functies
Sum, Average, Min en Max kunnen worden gedelegeerd. Op dit moment wordt deze delegering maar door een beperkt aantal gegevensbronnen ondersteund. Bekijk de delegeringslijst voor informatie.
Notitie
Als een expressie niet wordt gedelegeerd, werkt deze alleen voor de eerste 500 records (configureerbaar tot 2000, zie De limiet wijzigen) opgehaald uit de gegevensbron in plaats van de verwerking van alle gegevens te delegeren aan de gegevensbron.
Optelfuncties, zoals CountRows, CountA en Count, kunnen niet worden gedelegeerd.
Andere statistische functies, zoals StdevP en VarP, kunnen niet worden gedelegeerd.
Functies voor het maken van tabellen
AddColumns, DropColumns, RenameColumns en ShowColumns ondersteunen gedeeltelijk delegering. Formules in hun argumenten kunnen worden gedelegeerd. De uitvoer van deze functies is echter onderworpen aan de recordlimiet voor niet-delegatie.
Een veelgebruikte methode van makers is om AddColumns en LookUp te gebruiken om gegevens uit de ene tabel samen te voegen in een andere tabel, iets wat in databasejargon een 'join' wordt genoemd:
AddColumns( Products,
"Supplier Name",
LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name
)
Hoewel Producten en Leveranciers delegeerbare gegevensbronnen kunnen zijn en LookUp een delegeerbare functie is, geldt dat niet voor de resultaten van de functie AddColumns. Het resultaat van de gehele formule wordt beperkt tot het eerste deel van de gegevensbron Producten. Omdat de functie LookUp en de bijbehorende gegevensbron delegeerbaar zijn, kan er overal in de gegevensbron een overeenkomst worden gevonden voor Leveranciers, zelfs als het een grote gegevensbron is.
Als u AddColumns op deze manier gebruikt, moet LookUp afzonderlijk aanroepen doen naar de gegevensbron voor elk van die eerste records in Producten, wat veel netwerkverkeer veroorzaakt. Als Leveranciers klein is en niet vaak verandert, kunt u met de functie Verzamelen functie in OnStart de gegevensbron in uw app cachen wanneer deze start. Als alternatief kunt u uw app zo herstructureren dat u de gerelateerde records alleen binnenhaalt wanneer de gebruiker erom vraagt.
Niet-delegeerbare functies
Alle andere functies bieden geen ondersteuning voor delegeringen, waaronder deze belangrijke functies:
- First, FirstN, Last, LastN
- Choices
- Concat
- Collect, ClearCollect
- CountIf, RemoveIf, UpdateIf
- GroupBy, Ungroup
Niet-delegeerbare limieten
Formules die kunnen niet worden gedelegeerd, worden lokaal verwerkt. Op deze manier is het mogelijk om alle functionaliteit van de formuletaal van Power Apps te benutten. Hier zit echter wel een nadeel aan, namelijk dat alle gegevens eerst moeten worden overgebracht naar het apparaat. Dit kan betekenen dat er een grote hoeveelheid gegevens via het netwerk moet worden opgehaald. Dat kan even duren, waardoor het kan lijken dat uw app traag is of misschien zelfs is vastgelopen.
Om dit te voorkomen, is er in Power Apps standaard een limiet ingesteld voor de hoeveelheid gegevens die lokaal kan worden verwerkt: 500 records. We hebben dit aantal gekozen omdat u dan nog steeds volledige toegang hebt tot kleine gegevenssets, terwijl u het gebruik van grote gegevenssets kunt verfijnen door deelresultaten weer te geven.
Uiteraard moet hier voorzichtig mee worden omgegaan, omdat het verwarrend kan zijn voor gebruikers. Laten we als voorbeeld de functie Filter nemen met een selectieformule die niet kan worden gedelegeerd, met een gegevensbron die een miljoen records bevat. Omdat het filteren lokaal plaatsvindt, worden alleen de eerste 500 records gescand. Als de gewenste record 501 is, of 500.001, wordt de record niet geretourneerd door Filter.
Statistische functies kunnen ook leiden tot verwarring. Stel dat Average wordt toegepast op een kolom uit diezelfde gegevensbron met een miljoen records. Gemiddeld kan in dit geval niet worden gedelegeerd omdat de expressie niet wordt gedelegeerd (zie de eerdere opmerking:), dus kunnen alleen de eerste 500 records worden gemiddeld. Als u niet voorzichtig bent, kan een deelresultaat onterecht als een volledig resultaat worden geïnterpreteerd door een gebruiker van uw app.
De limiet wijzigen
500 is het standaard aantal records, maar u kunt dit aantal wijzigen voor een volledige app:
- Selecteer Instellingen op het tabblad Bestand.
- Onder Algemeen wijzigt u de instelling van Gegevensrijlimiet van 1 tot 2000.
In sommige gevallen weet u dat 2000 (of 1000 of 1500) voldoende is voor uw scenario. U kunt dit aantal vergroten voor uw scenario. Doe dit wel altijd zorgvuldig. Als u dit aantal vergroot, kunnen de prestaties van de app verslechteren, vooral bij brede tabellen met veel kolommen. U kunt het beste zo veel mogelijk delegeren.
Als u er zeker van wilt zijn dat uw app naar grote gegevenssets kan schalen, stelt u de instelling in op 1. Voor alles wat niet kan worden gedelegeerd, wordt één record geretourneerd. Dit kunt u eenvoudig detecteren tijdens het testen van uw app. Op die manier komt u niet voor verrassingen te staan wanneer u een concept-app in productie wilt nemen.
Delegeringswaarschuwingen
Om het eenvoudiger te maken om te zien wat wel en wat niet wordt gedelegeerd, geeft Power Apps een waarschuwing (gele driehoek) wanneer u een formule maakt die iets bevat wat niet kan worden gedelegeerd.
Delegeringswaarschuwingen worden alleen weergegeven in formules die worden toegepast op delegeerbare gegevensbronnen. Als u geen waarschuwing ziet en u denkt dat de formule niet correct wordt gedelegeerd, controleert u het type van de gegevensbron in de lijst met delegeerbare gegevensbronnen eerder in dit onderwerp.
Voorbeelden
In dit voorbeeld genereert u automatisch een app met drie schermen op basis van een SQL Server-tabel met de naam [dbo].[Fruit]. Voor informatie over het genereren van de app, kunt u vergelijkbare principes in het onderwerp over Dataverse toepassen op SQL Server.

De eigenschap Items van de galerie is ingesteld op een formule die de functies SortByColumns en Search bevat, die beide kunnen worden gedelegeerd.
Typ Apple in het zoekvak.
Bewegende stippen worden tijdelijk weergegeven aan de bovenkant van het scherm als de app communiceert met SQL Server om de zoekopdracht te verwerken. Alle records die voldoen aan de zoekcriteria worden weergegeven, zelfs als de gegevensbron miljoenen records bevat.

De zoekresultaten bevatten Apples, Crab apples en Pineapple omdat de functie Zoeken overal in een tekstkolom zoekt. Als u alleen records wilt vinden die de zoekterm aan het begin van de naam van de vrucht bevatten, kunt u een andere delegeerbare functie, Filter, gebruiken met een complexere zoekterm. (Verwijder omwille van de eenvoud de aanroep SortByColumns.)

De nieuwe resultaten bevatten Apples , maar niet Crab apples of Pineapple. Er wordt echter een gele driehoek weergegeven naast de galerie (en in de schermminiatuur als op de linkernavigatiebalk miniaturen worden weergegeven). Er wordt ook een blauwe golvende lijn weergegeven onder een deel van de formule. Al deze elementen geven een waarschuwing aan. Als u de muisaanwijzer op de gele driehoek naast de galerie plaatst, wordt dit bericht weergegeven:

SQL Server is een delegeerbare gegevensbron en Filter is een delegeerbare functie. Mid en Len kunnen echter niet worden gedelegeerd naar een gegevensbron.
Maar het heeft wel gewerkt, toch? In zekere zin wel. En daarom is dit een waarschuwing, en geen rode, golvende lijn.
- Als de tabel minder dan 500 records bevat, werkte de formule perfect. Alle records zijn dan overgebracht naar het apparaat en Filter is lokaal toegepast.
- Als de tabel meer dan 500 records bevat, geeft de formule niet als resultaat record 501 of hoger, ook niet als deze voldoet aan de criteria.
Zie ook
Impact van gebruik van niet-delegeerbare functies en onjuiste limieten voor gegevensrijen op prestaties
Prestatietips en best practices voor gebruik delegatie