Querybeperkingen: delegerings- en querylimieten

Delegering begrijpen

Power Apps werkt het beste met een back-end gegevensbron wanneer een Power Fx-query volledig kan worden vertaald in een gelijkwaardige query die kan worden uitgevoerd op de gegevensbron. Power Apps verzendt een query die de gegevensbron begrijpt, de query wordt uitgevoerd op de gegevensbron en de queryresultaten worden geretourneerd naar Power Apps. De gegevensbron kan bijvoorbeeld het werk doen door de gegevens op de gegevensbron te filteren en alleen de rijen te retourneren die aan de filtercriteria voldoen. Als dit correct werkt, zeggen we dat de query is gedelegeerd naar de gegevensbron om het werk van de query uit te voeren.

Power Fx-zoekopdrachten kunnen echter niet altijd in gelijkwaardige zoekopdrachten voor alle gegevensbronnen worden vertaald. Zo ondersteunt Dataverse meer queryfuncties dan Excel. Dataverse ondersteunt de queryoperator 'in' (lidmaatschap) en Excel niet. Wij zeggen dat de query niet-delegeerbaar is als een query een functie gebruikt die de gegevensbron niet ondersteunt. Als een deel van een query-expressie niet delegeerbaar is, delegeren we over het algemeen geen enkel deel van de query.

Wanneer een query niet-delegeerbaar is, haalt Power Apps alleen de eerste 500 records op van de gegevensbron en voert vervolgens de acties in de query uit. Deze limiet kan worden verhoogd tot 2.000 records De limiet wijzigen Power Apps beperkt de resultaatgrootte tot 500 records zodat Power Apps goed blijft presteren. Door middel van experimenten hebben we ontdekt dat resultaatsets die groter zijn dan deze formaten prestatieproblemen voor uw app en Power Apps in het algemeen veroorzaken.

Deze beperking kan echter een probleem zijn, omdat de query mogelijk onjuiste resultaten oplevert als de gegevens op de gegevensbron meer dan 500/2000 records bevatten. Neem bijvoorbeeld het voorbeeld waarin uw gegevensbron 10 miljoen records heeft en uw query moet werken op het laatste deel van de gegevens. (bijvoorbeeld de familienamen die beginnen met 'Z') Uw zoekopdracht bevat echter een niet-delegeerbare operator (bijvoorbeeld distinct). In dit geval krijgt u alleen de eerste 500/2000 records en zijn uw resultaten onjuist.

Maak uw Power Fx-query's door gebruik te maken van de delegeerbare tabellen voor uw gegevensbron. Gebruik alleen queryfuncties 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 helpen u bij het beheren van uw app, zodat deze de juiste resultaten heeft. Als de gegevens in uw gegevensbron meer dan 500 records bevatten en een functie niet kan worden gedelegeerd, markeert Power Fx de formule met een blauwe onderstreping.

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 delegering:

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.

Filterfuncties

Filter, Search, First 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

    Notitie

    In is only delegated for columns on the base data source. Als bijvoorbeeld de gegevensbron de tabel Accounts is, wordt Filter(Accounts, Name in ["name1", "name2"]) gedelegeerd naar de gegevensbron voor evaluatie. Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]) wordt echter niet gedelegeerd omdat de kolom Fullname in een andere tabel (PrimaryContact) staat dan Accounts. De expressie wordt lokaal geëvalueerd.

  • =, <>, >=, <=, >, <
  • +, -
  • 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:

Querybeperkingen

Opzoekniveaus

Power Apps ondersteunt twee opzoekniveaus. Dit betekent dat een Power Fx-query-expressie kan maximaal twee opzoekfuncties bevatten. Deze beperking is bedoeld om de prestaties te behouden. Als een query-expressie een zoekopdracht bevat, voert Power Apps eerst een query uit om de basistabel op te halen. Vervolgens voert het een tweede query uit die de eerste tabel uitbreidt met de opzoekinformatie. Wij zijn voorstander van nog een niveau daarboven als maximum. Voor offline ondersteunen we echter slechts één niveau van opzoekuitbreidingen.

Expressie-evaluatie: de eigenschap van de entiteit moet zich aan de linkerkant 'LHS' van de gelijkheidsoperator bevinden

Het is belangrijk om de eigenschap van een entiteit die moet worden vergeleken in een uitdrukking aan de linkerkant 'LHS' van een vergelijking te plaatsen. Ter illustratie is in het onderstaande voorbeeld de entiteitseigenschap 'Business unit ID'.Name een eigenschapswaarde, en het moet op de LHS van de te evalueren uitdrukking worden geplaatst. De volgende expressie werkt:

Filter(
        Budgets,
        'Business unit ID'.Name = LookUp(
            Users,
            'Primary Email' = User().Email,
            'Business Unit'
        ).Name,
        DataCardValue37.Selected.'Date Range String'='Date Range String'
    )

Deze expressie echter niet:

 Filter(
        Budgets,
        LookUp(
            Users,
            'Primary Email' = User().Email,
            'Business Unit'
        ).Name = 'Business unit ID'.Name,
        'Date Range String'=DataCardValue37.Selected.'Date Range String'
    )

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

Sommige geaggregeerde functies kunnen worden gedelegeerd, afhankelijk van de ondersteuning in de back-end. Sum, Average, Min en Max kunnen worden gedelegeerd. Optelfuncties, zoals CountRows en Count, kunnen eveneens worden gedelegeerd. Op dit moment worden deze functies voor delegering maar door een beperkt aantal gegevensbronnen ondersteund. Zie Overdrachtlijst voor meer informatie.

RemoveIf en UpdateIf ondersteuning voor delegering zijn experimenteel en standaard uitgeschakeld.

niet-delegeerbare functies

Alle andere functies bieden geen ondersteuning voor delegeringen, waaronder deze belangrijke functies:

niet-delegeerbare limieten

Formules die kunnen niet worden gedelegeerd, worden lokaal verwerkt. Via lokale verwerking 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:

  1. Selecteer Instellingen.
  2. 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 artikel.

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 artikel over Dataverse toepassen op SQL Server.

App met drie schermen.

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.

Besturingselement voor invoer van zoektekst.

De zoekresultaten bevatten "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 aanroep SortByColumns verwijderen.

De nieuwe resultaten bevatten "Apples", maar niet "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. Elk van deze elementen geeft een waarschuwing aan. Als u de muisaanwijzer op de gele driehoek naast de galerie plaatst, wordt dit bericht weergegeven:

Beweeg de muisaanwijzer over de delegeringswaarschuwing.

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

Notitie

Laat ons uw taalvoorkeuren voor documentatie weten! Beantwoord een korte enquête. (houd er rekening mee dat deze in het Engels is)

De enquête duurt ongeveer zeven minuten. Er worden geen persoonlijke gegevens verzameld (privacyverklaring).