Spørringsbegrensninger: Delegerings- og spørringsbegrensninger
Forstå delegering
Power Apps fungerer best med en datakilde i serverdelen når en Power Fx-spørring kan oversettes fullstendig til en tilsvarende spørring som kan kjøres på datakilden. Power Apps sender en spørring som datakilden forstår, spørringen utføres på datakilde, og spørringsresultatene returneres til Power Apps. Eksempelvis kan datakilden gjøre arbeidet med å filtrere dataene på datakilde og bare returnere radene som oppfyller filtervilkårene. Når dette fungerer riktig, sier vi at spørringen er delegert til datakilden for å utføre søket.
Power Fx-spørringer kan imidlertid ikke alltid oversettes til tilsvarende spørringer for alle datakilder. Dataverse støtter for eksempel flere spørringsfunksjoner enn Excel. Dataverse støtter spørringsoperatoren "in" (medlemskap), og Excel gjør det ikke. Vi sier at spørringen er ikke-delegerbar hvis en spørring bruker en funksjon som datakilden ikke støtter. Hvis hvilken som helst del av et spørringsuttrykk ikke kan delegeres, delegeres vi generelt sett ikke noen deler av spørringen.
Når en spørring ikke kan delegeres, henter Power Apps bare de første 500 oppføringene fra datakilden og utfører deretter handlingene i spørringen. Denne grensen kan økes til 2000 oppføringer. Se Endre grensen. Power Apps begrenser resultatstørrelsen til 500 oppføringer for å beholde god ytelse for Power Apps. Vi har funnet gjennom eksperimentering at resultatsett som er større enn dette, fører til ytelsesproblemer for appen din og Power Apps generelt.
Denne begrensningen kan imidlertid være et problem fordi spørringen kan returnere feil resultater hvis dataene på datakilden overskrider 500/2000 oppføringer. Vurder for eksempel eksemplet der datakilde har 10 millioner oppføringer, og spørringen må operere på den siste delen av dataene. (For eksempel serienavnene som starter med 'Z') Spørringen har imidlertid en operator som ikke kan delegeres (for eksempel distinkt). I dette tilfellet får du bare de første 500/2000-oppføringene, og du har feil resultater.
Opprett Power Fx-spørringene ved hjelp av de delegerbare tabellene for datakilde. Du bør bare bruke spørringsfunksjoner som kan delegeres. Dette er den eneste måten å sikre at appen fungerer bra, og at brukere får tilgang til informasjonen de trenger.
Vær oppmerksom på delegeringsadvarsler som identifiserer steder der delegering ikke er mulig. Hvis du arbeider med små datasett (færre enn 500 poster), kan du bruke alle datakilder og formler siden appen kan behandle data lokalt hvis formelen ikke kan delegeres.
Merk
Delegeringsadvarsler hjelper deg med å behandle appen slik at den har riktige resultater. Hvis dataene i datakilden din overskrider 500 oppføringer, og en funksjon ikke kan delegeres, merker Power Fx formelen med en blå understreking.
Datakilder som kan delegeres
Delegering støttes bare for bestemte tabelldatakilder. Hvis en datakilde støtter delegering, skisserer dens koblingsdokumentasjon denne støtten. Disse tabelldatakildene er for eksempel de mest populære, og de støtter delegering:
- Power Apps-funksjoner og -operasjoner for Microsoft Dataverse som kan delegeres
- Power Apps-funksjoner og -operasjoner for SharePoint som kan delegeres
- Power Apps-funksjoner og -operasjoner for SQL Server som kan delegeres
- Power Apps-funksjoner og -operasjoner for Salesforce som kan delegeres
Importerte Excel-arbeidsbøker (som bruker datakilden Legg til statiske data i appen), samlinger og tabeller som er lagret i kontekstvariabler, krever ikke delegering. Alle disse dataene ligger allerede i minnet, og det fullstendige Power Apps-språket kan brukes.
Funksjoner som kan delegeres
Neste trinn er å bruke bare de formlene som kan delegeres. Formelelementene som kan delegeres er inkludert her. Alle datakilder er imidlertid forskjellige, og det er ikke alle som støtter alle disse elementene. Se etter delegeringsadvarsler i en bestemt formel.
Filterfunksjoner
Filter, Search, First og LookUp kan delegeres.
Du kan bruke disse med kolonner i tabellen for å velge riktige poster i funksjonene Filter og LookUp:
- And (inkludert &&), Or (inkludert ||), Not (inkludert !)
- In
Merk
In delegeres bare for kolonner på basis datakilde. Hvis for eksempel datakilden er Forretningsforbindelser-tabellen, delegerer
Filter(Accounts, Name in ["name1", "name2"])
deretter datakilden for evaluering. KolonnenFilter(Accounts, PrimaryContact.Fullname in ["name1", "name2"])
delgerer ikke siden Fullname er imidlertid i en annen tabell (PrimaryContact) enn Forretningsforbindelser. Uttrykket evalueres lokalt. - =, <>, >=, <=, >, <
- +, -
- TrimEnds
- IsBlank
- StartsWith, EndsWith
- Konstante verdier som er de samme i alle postene, for eksempel kontrollegenskaper og globale variabler og kontekstvariabler.
Du kan også bruke deler av formelen som evalueres som en konstant verdi for alle poster. Left( Language(), 2 ), Date( 2019, 3, 31 ) og Today() avhenger for eksempel ikke av andre kolonner i posten, og returner derfor samme verdi for alle poster. Disse verdiene kan sendes til datakilden som en konstant og vil ikke blokkere delegering.
Den forrige listen inkluderer ikke disse viktige elementene:
- If
- *, /, Mod
- Kolonnekonverteringsoperasjoner Text, Value
- Concatenate (inkludert &)
- ExactIn
- Funksjoner for strengmanipulering: Lower, Upper, Left, Mid, Len,...
- Signaler: Plassering, Akselerasjon, Kompass, ...
- Flyktige: Rand, ...
- Samlinger
Spørringsbegrensninger
Oppslagsnivåer
Power Apps støtter to oppslagsnivåer. Dette betyr at et Power Fx-spørringsuttrykk kan ha maksimalt to oppslagsfunksjoner. Denne begrensningen er for å beholde ytelsen. Hvis et spørringsuttrykk inkluderer et oppslag, gjør Power Apps først en spørring for å hente basistabellen. Deretter gjør den en ny spørring som utvider den første tabellen med oppslagsinformasjonen. Vi støtter ett nivå til utover det, maksimalt. For frakoblet modus støtter vi imidlertid bare ett oppslagsnivå.
Uttrykksevaluering - egenskapen til enheten må være på venstre side 'LHS' av likhetsoperatøren
Det er viktig å plassere egenskapen til en enhet som skal sammenlignes i et uttrykk, på venstre side 'LHS' av en ligning. For å illustrere, i eksemplet nedenfor er enhetsegenskapen 'Business Unit ID'.Name en egenskapsverdi og må plasseres på LHS for uttrykket som skal evalueres. Følgende uttrykk vil lykkes:
Filter(
Budgets,
'Business unit ID'.Name = LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name,
DataCardValue37.Selected.'Date Range String'='Date Range String'
)
Dette uttrykket vil imidlertid ikke lykkes:
Filter(
Budgets,
LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name = 'Business unit ID'.Name,
'Date Range String'=DataCardValue37.Selected.'Date Range String'
)
Sorteringsfunksjoner
Sort og SortByColumns kan delegeres.
I Sort kan formelen bare inneholde navnet til en enkeltkolonne og kan ikke inneholde andre operatorer eller funksjoner.
Mengdefunksjoner
Visse aggregerte funksjoner kan delegeres basert på serverdelstøtte. Funksjoner som Sum, Average, Min og Max kan delegeres. Tellingsfunksjoner som CountRows og Count kan også delegeres. RemoveIf og UpdateIf har imidlertid delegeringsbegrensninger. Det er for øyeblikket bare et begrenset antall datakilder som støtter delegering for disse funksjonene. Hvis du vil ha mer informasjon, kan du se Delegeringslisten.
funksjoner som ikke kan delegeres
Ingen andre funksjoner støtter delegering, herunder disse viktige funksjonene:
ikke-delegerbare grenser
Formler som ikke kan delegeres, behandles lokalt. Lokal behandling gjør det mulig å bruke hele formelspråket til Power Apps. Dette har likevel sin pris. Alle dataene må sendes til enheten først, noe som innebærer å hente en stor mengde data over nettverket. Dette kan ta tid, noe som kan gi inntrykk av at appen er treg eller har krasjet.
For å unngå dette har Power Apps satt en grense for hvor mye data som kan behandles lokalt, på 500 poster. Vi har valgt dette antallet slik at du fremdeles har full tilgang til små datasett, og du har mulighet til å finjustere bruken av store datasett, slik at du kan se delvise resultater.
Du må naturligvis være forsiktig når du bruker denne funksjonen, ettersom det kan være forvirrende for brukerne. Overvei for eksempel en Filter-funksjon med en Selection-formel som ikke kan delegeres, i stedet for en datakilde med over en million poster. Siden filtreringen utføres lokalt, skannes bare de 500 første postene. Hvis ønsket post er post 501 eller 500.001, regnes den ikke med, og det returneres ikke av Filter.
Mengdefunksjoner kan også føre til forvirring. Ta Gjennomsnitt over en kolonne for den samme datakilden med en million poster. Gjennomsnitt kan ikke delegeres i dette tilfellet fordi uttrykket ikke er delegert (se det forrige notatet), så bare de første 500 oppføringene er gjennomsnitt. Du må være forsiktig så ikke et delvis svar feilaktig forstås som et fullstendig svar av en av brukerne av appen.
Å endre grensen
500 er standardantallet poster, men du kan endre dette nummeret i hele appen:
- Velg Innstillinger.
- Endre innstillingen for Dataradgrense fra 1 til 2 000 under Generelt.
I enkelte tilfeller vet du at 2000 (eller 1000 eller 1500) er nok i ditt scenario. Du kan med forsiktighet øke dette antallet for å passe med ditt scenario. Mens du øker dette antallet, kan det hende at appytelsen forringes, spesielt for brede tabeller med mange kolonner. Det beste svaret er fremdeles å delegere så mye du kan.
Hvis du vil forsikre deg om at appen kan skalerer til store datasett, reduserer du denne innstillingen ned til 1. Alt som ikke kan delegeres returnerer én enkelt post, og det bør være enkelt å oppdage når du tester appen. Dette kan føre til at du ikke får noen overraskelser når du skal ta appkonseptet ditt videre til produksjon.
Delegeringsadvarsler
For at det skal bli enklere å vite hva som blir og ikke blir delegert, gir Power Apps en advarsel (gul trekant) når du oppretter en formel som inneholder noe som ikke kan delegeres.
Delegeringsadvarsler vises bare på formler som opererer på datakilder som kan delegeres. Hvis ikke du ser en advarsel, og du tror formelen ikke delegeres riktig, kan du sammenligne datakildetypen med listen over datakilder som kan delegeres tidligere i denne artikkelen.
Eksempler
I dette eksemplet skal du automatisk generere en app med tre skjermer basert på en SQL Server-tabell med navn [dbo].[Fruit]. Hvis du vil ha informasjon om hvordan du genererer en app, kan du ta i bruk lignende prinsipper i artikkelen om Dataverse til SQL Server.
Elementer-egenskapen til galleriet er angitt til en formel som inneholder funksjonene SortByColumns og Search, og begge kan delegeres.
Skriv inn Eple i søkeboksen.
Bevegelige prikker vises kjapt nær toppen av skjermen mens appen kommuniserer med SQL Server for å behandle søkeforespørselen. Alle postene som oppfyller søkekriteriene vises, selv om datakilden inneholder flere millioner poster.
Søkeresultatene inkluderer Epler og Ananas fordi Søk-funksjonen søker over alt i en tekstkolonne. Hvis du ønsket å finne poster som bare inneholdt søkeordet i starten av navnet på frukten, kan du bruke en annen delegerbar funksjon, Filter, med mer kompliserte søkeord. (Fjern for enkelhets skyld SortByColumns-kallet.)
De nye resultatene inneholder nå Epler, men ikke Ananas. En gul trekant vises imidlertid ved siden av galleriet (og i miniatyrbildet for skjermen hvis navigasjonsfeltet til venstre viser miniatyrbilder) og en blå, bølgete linje vises under en del av formelen. Hver av disse elementene angir en advarsel. Hvis du beveger pekeren over den gule trekanten ved siden av galleriet, vises denne meldingen:
SQL Server er en delegerbar datakilde og Filter er en delegerbar funksjon. Mid og Len kan imidlertid ikke delegeres til en datakilde.
Likevel virket det, ikke sant? Jo, på en måte. Og det er grunnen til at dette er en advarsel og ikke en rød, bølgete krusedull.
- Hvis tabellen inneholder færre enn 500 poster, fungerer formelen perfekt. Alle poster ble sendt til enheten, og Filter ble brukt lokalt.
- Hvis tabellen inneholder mer enn 500 poster, returnerer ikke formelen 501 eller høyere, selv om den samsvarer med vilkårene.
Se også
Innvirkningen bruken av ikke-delegerbare funksjoner og feil dataradgrense har på ytelsen
Tips og anbefalte fremgangsmåter for ytelse ved bruk av delegering