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 heves til 2 000 Endre grensen Power Apps endrer resultatstørrelsen til 500 oppføringer, for å få å gi god Power Apps-ytelse. Gjennom eksperimentering fant vi ut at resultatsettene som er større enn disse størrelsene, introduserer ytelsesproblemer for appen 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.

Obs!

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:

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

    Obs!

    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. Kolonnen Filter(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:

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

Noen mengdefunksjoner kan delegeres avhengig av støtte i serverdelen. Sum, Average, Min, and Max kan delegeres. Tellingsfunksjoner som CountRows og Count kan også delegeres. Bare et begrenset antall datakilder støtter disse funksjonene for delegering på dette tidspunktet. Hvis du vil ha mer informasjon, kan du se Delegeringsliste.

Delegeringsstøtte for RemoveIf og UpdateIf er eksperimentell og deaktivert som standard.

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:

  1. Velg Innstillinger.
  2. 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.

App med tre skjermer.

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.

Kontroll for innskriving av søketekst.

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.)

Fjern SortByColumns-kall.

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:

Beveg pekeren over en delegeringsadvarsel.

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

Obs!

Kan du fortelle oss om språkinnstillingene for dokumentasjonen? Ta en kort undersøkelse. (vær oppmerksom på at denne undersøkelsen er på engelsk)

Undersøkelsen tar rundt sju minutter. Det blir ikke samlet inn noen personopplysninger (personvernerklæring).