Begrænsninger i forespørgsler: Grænser for delegering og forespørgsel
Om delegering
Power Apps fungerer bedst med en backend-datakilde, når en Power Fx-forespørgsel kan oversættes fuldt ud til en tilsvarende forespørgsel, der kan køres på datakilde. Power Apps sender en forespørgsel, som datakilden forstår, forespørgslen udføres på den datakilde, og forespørgselsresultaterne returneres til Power Apps. For eksempel kan datakilden udføre arbejdet med at filtrere dataene på datakilde og kun returnere de rækker, der opfylder filterkriterierne. Når dette fungerer korrekt, siger vi, at forespørgslen er uddelegeret til datakilden til at udføre arbejdet i forespørgslen.
Men Power Fx-forespørgsler kan dog ikke altid oversættes til tilsvarende forespørgsler i alle datakilder. F.eks. understøtter Dataverse flere forespørgselsfunktioner end i Excel. Dataverse understøtter forespørgselsoperatoren "i" (membership), og Excel understøtter ikke. Forespørgslen kan ikke uddelegeres, hvis der bruges en funktion i en forespørgsel, som datakilde ikke understøtter. Hvis et forespørgselsudtryk ikke kan uddelegeres, uddelegerer vi som regel ikke nogen del af forespørgslen.
Når en forespørgsel ikke kan uddelegeres, modtager Power Apps kun de første 500 poster fra datakilden og udfører derefter handlingerne i forespørgslen. Denne grænse kan hæves til 2.000 poster Ændring af grænsenPower Apps begrænser resultatstørrelsen til 500 poster for at bevare en god ydeevne i Power Apps. Gennem eksperimenter fandt vi ud af, at resultatsæt, der er større end disse størrelser, medfører problemer med ydeevnen for din app og Power Apps generelt.
Denne begrænsning kan dog være et problem, da forespørgslen kan returnere forkerte resultater, hvis dataene på datakilde overstiger 500/2000 poster. Overvej f.eks. det eksempel, hvor din datakilde har 10 millioner poster, og din forespørgsel skal køre på den sidste del af dataene. (Det kan f.eks. være de familienavne, der starter med 'Z') Forespørgslen har dog en operator, der ikke kan uddelegeres, i den (f.eks. tydelige). I dette tilfælde får du kun de første 500/2000 poster, og du har forkerte resultater.
Opret dine Power Fx-forespørgsler ved hjælp af de tabeller, der kan uddelegeres, for datakilden. Du skal kun bruge forespørgselsfunktioner, der kan uddelegeres. Det er den eneste måde, du kan sikre, at din app kører godt, og at brugerne kan få adgang til alle de oplysninger, de har brug for.
Vær opmærksom på delegeringsadvarsler, der identificerer de steder, hvor delegering ikke er muligt. Hvis du arbejder med små datasæt (færre end 500 poster), kan du bruge enhver datakilde og formel, fordi appen kan behandle data lokalt, hvis formlen ikke kan delegeres.
Bemærk
Delegeringsadvarsler hjælper dig med at administrere din app, så den får korrekte resultater. Hvis dataene i din datakilde overstiger 500 poster, og en funktion ikke kan uddelegeres, markerer Power Fx formlen med en blå understregning.
Delegerbare datakilder
Delegering er kun understøttet for visse datakilder i tabelformat. Hvis en datakilde understøtter delegering, beskriver dens connector-dokumentation denne understøttelse. Disse tabeldatakilder er f.eks. de mest populære, og de understøtter uddelegering:
- Power Apps-delegerbare funktioner og handlinger for Microsoft Dataverse
- Power Apps-delegerbare funktioner og handlinger for SharePoint
- Power Apps-delegerbare funktioner og handlinger for SQL Server
- Power Apps-delegerbare funktioner og handlinger for Salesforce
Importerede Excel-projekter (ved hjælp af datakilden Føj statiske data til din app ), samlinger og tabeller, der er gemt i kontekstafhængige variabler, kræver ikke delegering. Alle disse data er allerede i hukommelsen, og du kan anvende alle dele af Power Apps-sproget.
Funktioner, der kan delegeres
Det næste trin er kun at bruge de formler, som kan delegeres. Det omfatter de formelelementer, der kan delegeres. Hver datakilde er dog forskellig, og det er ikke alle, der understøtter alle disse elementer. Kontrollér, om der er delegeringsadvarsler i din specifikke formel.
Filterfunktioner
Filtrer, Søg, Først og Opslag kan uddelegeres.
Med funktionerne Filter og LookUp kan du bruge følgende med kolonnerne i tabellen for at vælge de relevante poster:
- And (herunder &&), Or (herunder ||), Not (herunder !)
- In
Bemærk
In er kun delegeret til kolonner på grundlæggende datakilde. Hvis f.eks. datakilde er tabellen Firmaer, uddelegerer
Filter(Accounts, Name in ["name1", "name2"])
til datakilde til evaluering. MenFilter(Accounts, PrimaryContact.Fullname in ["name1", "name2"])
uddelegerer dog ikke, da kolonnen Fullname findes på en anden tabel (PrimaryContact) end Firmaer. Udtrykket evalueres lokalt. - =, <>, >=, <=, >, <
- +, -
- TrimEnds
- IsBlank
- StartsWith, EndsWith
- Konstanter er ens på tværs af alle poster, f.eks. egenskaber for kontrolelementer og globale og kontekstafhængige variabler.
Du kan også bruge dele af din formel, der evalueres til en konstant værdi for alle poster. Left( Language(), 2 ), Date( 2019, 3, 31 ) og Today() afhænger f.eks. ikke af nogen kolonner i posten og returnerer derfor samme værdi for alle poster. Disse værdier kan sendes til datakilde som en konstant og kan ikke blokere for delegering.
Den forrige liste omfatter ikke disse nævneværdige elementer:
- If
- *, /, Mod
- Kolonnekonverteringshandlinger Text, Value
- Concatenate (herunder &)
- ExactIn
- Funktioner til manipulering af strenge: Lower, Upper, Left, Mid, Len, ...
- Signaler: Location, Acceleration, Compass, ...
- Flygtige: Rand,...
- Samlinger
Forespørgselsbegrænsninger
Opslagsniveauer
Power Apps understøtter to opslagsniveauer. Det betyder, at et Power Fx-forespørgselsudtryk højst kan have to opslagsfunktioner i det. Denne begrænsning er at bevare ydeevnen. Hvis et forespørgselsudtryk indeholder et opslag, skal du først oprette en Power Apps-forespørgsel for at hente basistabellen. Derefter oprettes der en anden forespørgsel, hvor den første tabel udvides med opslagsoplysninger. Vi understøtter et niveau mere, der ligger ud over maksimumniveauet. I forbindelse med offlinetilstand understøtter vi dog kun ét opslagsniveau.
Evaluering af udtryk – enhedens egenskab skal være på lighedsoperatørens 'LHS' på venstre side
Det er vigtigt at placere egenskaben for en enhed, der skal sammenlignes, i et udtryk på en lignings 'LHS' på venstre side. Det kan vi illustrere i eksemplet nedenfor, hvor enhedsejendommen 'Business unit ID'.Name er en egenskabsværdi, og den skal placeres på LHS for det udtryk, der skal evalueres. Følgende udtryk lykkes:
Filter(
Budgets,
'Business unit ID'.Name = LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name,
DataCardValue37.Selected.'Date Range String'='Date Range String'
)
Men det vil dette udtryk ikke:
Filter(
Budgets,
LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name = 'Business unit ID'.Name,
'Date Range String'=DataCardValue37.Selected.'Date Range String'
)
Sorteringsfunktioner
Sort og SortByColumns kan delegeres.
I Sort kan formlen kun være navnet på en enkelt kolonne, og der kan ikke angives andre operatorer eller funktioner.
Aggregeringsfunktioner
Visse aggregeringsfunktioner kan uddelegeres baseret på back-end-understøttelse. Funktioner som Sum, Average, Min og Max kan delegeres. Optællingsfunktioner som CountRows og Count kan også uddelegeres. Men RemoveIf and UpdateIf har delegeringsbegrænsninger. I øjeblikket er det kun et begrænset antal datakilder, der understøtter delegering for disse funktioner. Du kan finde flere oplysninger under Uddelegeringsliste.
Funktioner, der ikke kan delegeres
Alle andre funktioner understøtter ikke delegering, herunder disse nævneværdige funktioner:
Grænser, hvor der ikke kan delegeres
De formler, der ikke kan delegeres, behandles lokalt. Lokal behandling gør det muligt at bruge alle aspekter af Power Apps-formelsproget. Det har imidlertid sin pris: Alle dataene skal først hentes til enheden, og det kan medføre, at der skal hentes store mængder data via netværket. Det kan tage tid og give indtryk af, at appen er langsom og ser ud til at være gået ned.
Power Apps har en grænse på den mængde data, der kan behandles lokalt, for at undgå det: 500 poster er standard. Vi har valgt dette tal, så du stadig har fuld adgang til små datasæt, og du kan tilpasse brugen af store datasæt ved at få vist delvise resultater.
Man skal naturligvis være omhyggelig med, hvordan man bruger dette, da det kan skabe forvirring hos brugerne. Overvej f.eks. en Filter-funktion med en udvælgelsesformel, der ikke kan delegeres, og som bruges på en datakilde med en million poster. Filtreringen foregår lokalt, og derfor scannes kun de første 500 poster. Hvis den ønskede post har nummer 501 eller 500.001, bliver den ikke taget i betragtning eller returneret af Filter.
Aggregeringsfunktioner kan også skabe forvirring. Du kan f.eks. bruge Average til at finde gennemsnittet for en kolonne i datakilden med en million poster. Gennemsnit kan ikke uddelegeres i dette tilfælde, da udtrykket ikke er uddelegeret (se den tidligere note), så det er kun de første 500 poster der medtages i gennemsnittet. Du skal derfor være omhyggelig med ikke at vise et delvist svar, som brugeren af appen vil opfatte som det rigtige svar.
Ændring af grænsen
500 er standardantallet af poster, men du kan ændre dette antal for en hel app:
- Vælg Indstillinger.
- Under Generelt skal du ændre indstillingen Datarækkegrænse fra 1 til 2000.
I nogle tilfælde ved du, at 2.000 (eller 1.000 eller 1.500) vil opfylde behovene i dit scenarie. Hvis du er omhyggelig, kan du øge dette tal, så det passer til dit scenarie. Efterhånden som du øger dette tal, så kan appens ydeevne reduceres – især i forbindelse med brede tabeller, der har mange kolonner. Det bedste svar er stadig at delegere så meget, du kan.
Hvis du vil sikre dig, at din app kan skaleres efter store datasæt, skal du reducere denne indstilling til 1. Alt det, der ikke kan delegeres, returnerer en enkelt post, hvilket er let at registrere, når du tester din app. Det kan hjælpe dig med at undgå overraskelser, når du prøver at sætte en blåstemplingsapp i produktion.
Delegeringsadvarsler
Power Apps gør det lettere at vide, hvad der kan og ikke kan delegeres, ved at vise en advarsel (gul trekant), når du opretter en formel med indhold, der ikke kan delegeres.
Delegeringsadvarsler vises kun på formler, der fungerer på datakilder, som kan delegeres. Hvis der ikke vises en advarsel, og du mistænker, at din formel ikke delegeres korrekt, skal du kontrollere typen af datakilde i forhold til listen over delegerbare datakilder tidligere i denne artikel.
Eksempler
I dette eksempel skal du automatisk generere en app med tre skærmbilleder baseret på en SQL Server-tabel med navnet [dbo].[Fruit]. Hvis du vil have oplysninger om, hvordan du genererer en app, kan du anvende tilsvarende principper i artiklen om Dataverse til SQL Server.
Galleriets Items-egenskab er angivet som en formel, der indeholder funktionerne SortByColumns og Search, som begge kan delegeres.
Skriv "Apple" i søgefeltet.
Prikker vises et øjeblik nær toppen af skærmen, idet appen kommunikerer med SQL Server for at behandle søgeanmodningen. Alle poster, der opfylder søgekriterierne, vises, selv hvis datakilden indeholder millionvis af poster.
Søgeresultaterne omfatter "Apples" og "Pineapple", fordi funktionen Search søger overalt i en tekstkolonne. Hvis du kun vil søge efter poster, der indeholder søgeordet i starten af frugtnavnet, så kan du bruge en anden delegerbar funktion, Filter, med et mere komplekst søgeudtryk. (Fjern kaldet SortByColumns for overskuelighedens skyld.)
De nye resultater omfatter "Apples", men ikke "Pineapple". Der vises imidlertid en gul trekant ud for galleriet (og i miniaturebilledet af skærmen, hvis den venstre navigationslinje viser miniaturer), og der vises en blå, bølget linje under en del af formlen. Hvert af disse elementer angiver en advarsel. Hvis du peger på den gule trekant ud for galleriet, vises denne meddelelse:
SQL Server er en datakilde, der kan delegeres, og Filter er en funktion, som kan delegeres, men Mid og Len kan ikke delegeres til nogen datakilde.
Men det virkede jo. Gjorde det ikke? På en måde. Og derfor vises denne advarsel og ikke en rød bølgestreg.
- Hvis tabellen indeholder færre end 500 poster, fungerer formlen perfekt. Alle posterne blev hentet til enheden, og Filter blev anvendt lokalt.
- Hvis tabellen indeholder mere end 500 poster, returnerer formlen ikke post 501 eller højere, selvom den svarer til kriterierne.
Se også
Påvirkning af brug af funktioner, der ikke kan uddelegeres, og upassende begrænsninger af ydeevne for datarække
Tip til ydeevne og bedste praksis til at bruge delegering