Forstå delegering i en lærredapp

Power Apps indeholder en række effektive funktioner til filtrering, sortering og formning af datatabeller i en lærredapp, herunder funktionerne: Filter, Sort og AddColumns blot for at nævne et par få. Med disse funktioner kan du give brugerne adgang til lige præcis de oplysninger, de har brug for. For dem, der har erfaring med at arbejde med databaser, svarer brugen af disse funktioner til at skrive en databaseforespørgsel.

Nøglen til at bygge effektive apps er at minimere den mængde data, der skal sendes til din enhed. Du har måske kun brug for en håndfuld poster ud af flere millioner poster, eller det kan være en enkelt aggregeret værdi, der repræsenterer tusindvis af poster. Eller måske kan du kun hente den første post og derefter hente resten, når brugeren angiver, at der skal hentes flere poster. Hvis der fokuseres på det mest nødvendige, kan det reducere forbruget af processorkraft, hukommelse og netværksbåndbredde drastisk for din app, og det vil give brugerne hurtigere svartider – også på de telefoner, der bruger mobildata.

Delegering er der, hvor de udtryksfulde Power Apps-formler møder behovet for at minimere den mængde data, der flyttes over netværket.. Det vil kort sagt sige, at Power Apps delegerer behandlingen af data til datakilden i stedet for at flytte dataene til appen for at behandle dem lokalt.

Der, hvor det bliver kompliceret, og som er baggrunden for, at denne artikel er skrevet, er, at det ikke er alt, hvad der kan udtrykkes i en Power Apps-formel, som kan delegeres til alle typer datakilder. Power Apps-sproget minder om det sprog, der bruges til formler i Excel, og de giver fuld adgang til en komplet projektmappe i hukommelsen med en masse funktioner til manipulation af tal og tekst. Det betyder, at Power Apps-sproget er langt mere detaljeret, end hvad de fleste typer datakilder kan understøtte, herunder datasystemer som SQL Server.

Når der arbejdes med store datasæt, skal der bruges datakilder og formler, som kan delegeres. 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 blev tidligere markeret i Power Apps som "blå prik"-forslag, men delegeringsforslag er siden blevet omklassificeret som advarsler. Hvis dataene i din datakilde overstiger 500 poster, og en funktion ikke kan delegeres, så kan Power Apps muligvis ikke hente alle dataene, og din app kan få de forkerte resultater. Delegeringsadvarsler hjælper dig med at administrere din app, så den får korrekte resultater.

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:

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.

Disse lister ændres med tiden. Vi arbejder på at understøtte flere funktioner og operatorer med delegering.

Filterfunktioner

Filtrér, Søg og LookUp kan delegeres.

Med funktionerne Filtér og LookUp kan du bruge følgende med kolonnerne i tabellen for at vælge de relevante poster:

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:

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

Sum, Average, Min og Max kan delegeres. Det er kun et begrænset antal datakilder, der understøtter denne delegering på nuværende tidspunkt. På delegeringslisten finder du flere oplysninger.

Bemærk

Hvis et udtryk ikke er uddelegeret, fungerer det kun for de første 500 poster (kan konfigureres til op til 2000, se Ændring af grænsen), som hentes fra datakilden fremfor at uddelegere behandlingen af alle data på datakilden.

Optællingsfunktioner som CountRows, CountA og Count kan ikke delegeres.

Andre aggregeringsfunktioner som StdevP og VarP kan ikke delegeres.

Funktioner til tabelinddeling

AddColumns, DropColumns, RenameColumns og ShowColumns understøtter delvis delegering. Formler i deres argumenter kan uddelegeres. Output fra disse funktioner er dog underlagt grænser for ikke-delegeringsposter.

Som i dette eksempel bruger designere ofte AddColumns og LookUp til at flette oplysninger fra én tabel til en anden. I databasesprog kaldes det en Join-forbindelse.

AddColumns( Products, 
    "Supplier Name", 
    LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name 
)

Selv om Products og Suppliers kan være datakilder, der kan delegeres, og LookUp er en funktion, som kan delegeres, kan outputtet af funktionen AddColumns ikke delegeres. Resultatet af den samlede formel er begrænset til den første del af datakilden Products. Da funktionen LookUp og den tilhørende datakilde kan delegeres, kan der findes et match til Suppliers overalt i datakilden, selv hvis den er stor.

Hvis du bruger AddColumns på denne måde, skal LookUp foretage separate kald til datakilden for hver af de første poster i Products, hvilket medfører meget netværkskontaktprel. Hvis Leverandører er lille nok og ikke ændrer sig selv, kan du kalde funktionen Collect i OnStart for at cachelagre datakilde i appen, når den startes. Du kan også bruge denne mulighed for at omstrukturere din app, så du kun trækker de relaterede poster ind, når brugeren beder om det.

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. Det 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:

  1. I fanen Filer skal du vælge Indstillinger.
  2. 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 dette emne.

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 emnet om Dataverse til SQL Server.

Treskærmsapp.

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øg efter kontrolelement for tekstinput.

Søgeresultaterne omfatter "Apples", "Crab 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.)

Fjern SortByColumns-kaldet.

De nye resultater omfatter "Apples", men ikke "Crab apples" eller "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:

Hold markøren over delegeringsadvarsel.

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