Partajați prin


Limitări de interogare: limite de delegare și de interogare

Înțelegerea delegației

Power Apps funcționează cel mai bine cu un back-end sursă de date când o Power Fx interogare poate fi tradusă complet într-o interogare echivalentă care poate fi rulată pe sursă de date. Power Apps trimite o interogare pe care sursă de date o înțelege, interogarea este efectuată pe sursă de date, iar rezultatele interogării sunt returnate Power Apps. De exemplu, sursă de date ar putea face munca de filtrare a datelor pe sursă de date și poate returna numai rândurile care îndeplinesc criteriile de filtrare. Când aceasta funcționează corect, spunem că interogarea este delegată la sursă de date pentru a face munca interogării.

Cu toate acestea, Power Fx interogările nu pot fi întotdeauna traduse în interogări echivalente din toate sursele de date. De exemplu, Dataverse accepta mai multe funcții de interogare decât Excel. Dataverse acceptă operatorul de interogare „în” (de membru), iar Excel nu. Spunem că interogarea este nedelegabilă dacă o interogare folosește o caracteristică pe care sursă de date nu o acceptă. În general, dacă orice parte a unei expresii de interogare este nedelegabilă, nu delegăm nicio parte a interogării.

Când o interogare nu poate fi delegată, Power Apps obține doar primele 500 de înregistrări din sursă de date și apoi efectuează acțiunile din interogare. Această limită poate fi crescută la 2.000 de înregistrări Modificarea limiteiPower Apps limitează dimensiunea rezultatului la 500 de înregistrări pentru a păstra performanța bună a Power Apps. . a16>Am descoperit prin experimente că seturile de rezultate mai mari decât aceste dimensiuni introduc probleme de performanță pentru aplicația dvs. și Power Apps în general.

Cu toate acestea, această limitare poate fi o problemă, deoarece interogarea poate returna rezultate incorecte dacă datele din sursă de date depășesc 500/2000 de înregistrări. De exemplu, luați în considerare exemplul în care sursă de date are 10 milioane de înregistrări și interogarea trebuie să opereze pe ultima parte a datelor. (De exemplu, numele de familie care încep cu „Z”). Cu toate acestea, interogarea dvs. are un operator nedelegabil în ea (de exemplu, distinct.) În acest caz, obțineți doar primele 500/2000 de înregistrări și aveți incorecte rezultate.

Creați Power Fx interogările dvs. utilizând tabelele delegabile pentru sursă de date. Ar trebui să utilizați numai funcții de interogare care pot fi delegate. Este singura modalitate de a vă menține aplicația să funcționeze bine și de a vă asigura că utilizatorii pot accesa toate informațiile de care au nevoie.

Atenție la avertismentele delegării care identifică locurile în care delegarea nu este posibilă. Dacă lucrați cu seturi de date mici (mai puțin de 500 de înregistrări), puteți utiliza orice sursă de date și formulă, deoarece aplicația poate procesa date local dacă formula nu poate fi delegată.

Notă

Avertismentele de delegare vă ajută să gestionați aplicația, astfel încât să aibă rezultate corecte. Dacă datele din sursă de date depășesc 500 de înregistrări și o funcție nu poate fi delegată, Power Fx va marca formula cu o subliniere albastră.

Surse de date prin delegare

Delegarea este acceptată numai pentru anumite surse de date tabulare. Dacă un sursă de date acceptă delegarea, documentația sa privind conectorul subliniază acest suport. De exemplu, aceste surse de date tabulare sunt cele mai populare și sprijină delegarea:

Registrele de lucru Excel importate (folosind Adăugați date statice în aplicație sursă de date), colecțiile și tabelele stocate în variabile de context nu necesită delegare. Toate aceste date sunt deja în memorie și poate fi aplicat limbajul complet Power Apps.

Funcții ce pot fi delegate

Următorul pas este să utilizați doar acele formule care pot fi delegate. Aici sunt incluse elementele de formulă care ar putea fi delegate. Cu toate acestea, fiecare sursă de date este diferită și nu toate susțin toate aceste elemente. Verificați dacă există avertismente de delegare în formula dvs. particulară.

Funcții de filtrare

Filtru, Căutare, Mai întâi și Căutare poate fi delegat.

În cadrul funcțiilor Filter și LookUp , le puteți folosi cu coloanele din tabel pentru a selecta înregistrările corespunzătoare:

  • Și (inclusiv &&), Sau (inclusiv ||), Nu (inclusiv !)
  • În

    Notă

    În este delegat numai pentru coloanele de pe baza sursă de date. De exemplu, dacă sursă de date este Conturi tabel, atunci Filter(Accounts, Name in ["name1", "name2"]) delegați la sursă de date pentru evaluare. Cu toate acestea, Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]) nu delegează, deoarece coloana Nume complet se află pe un alt tabel (Contact principal) decât Conturi. Expresia este evaluată local.

  • =, <>, >=, <=, >, <
  • +, -
  • TrimEnds
  • IsBlank
  • StartsWith, EndsWith
  • Valori constante care sunt aceleași în toate înregistrările, cum ar fi proprietățile de control și variabilele globale și de context.

Puteți utiliza, de asemenea, porțiuni din formula dvs. care se evaluează la o valoare constantă pentru toate înregistrările. De exemplu, Left( Language(), 2 ), Date( 2019, 3, 31 ) și Astăzi() nu depind de nicio coloană a înregistrării și, prin urmare, returnează aceeași valoare pentru toate înregistrările. Aceste valori pot fi trimise la sursa de date ca o constantă și nu vor bloca delegarea.

Lista anterioară nu include aceste elemente notabile:

Limitări de interogare

Niveluri de căutare

Power Apps acceptă două niveluri de căutare. Aceasta înseamnă că o Power Fx expresie de interogare poate avea - cel mult - două funcții de căutare în ea. Această limitare este de a păstra performanța. Dacă o expresie de interogare include o căutare, Power Apps mai întâi face o interogare pentru a obține tabelul de bază. Apoi, efectuează o a doua interogare care extinde primul tabel cu informațiile de căutare. Susținem încă un nivel dincolo de acesta ca maxim. Pentru offline, totuși, acceptăm doar un singur nivel de extindere a căutării.

Evaluarea expresiei - proprietatea entității trebuie să fie în partea stângă „LHS” a operatorului de egalitate

Este important să plasați proprietatea unei entități de comparat într-o expresie în partea stângă „LHS” a unei ecuații. Pentru a ilustra, în exemplul de mai jos, proprietatea entității 'ID unitate de afaceri'. Nume este o valoare a proprietății și trebuie plasată pe LHS-ul expresiei care urmează să fie evaluată. Următoarea expresie reușește:

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

Cu toate acestea, această expresie nu va:

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

Funcții de sortare

Sortarea și SortByColumns pot fi delegate.

În Sort, formula poate fi doar numele unei singure coloane și nu poate include alți operatori sau funcții.

Funcții agregate

Anumite funcții agregate pot fi delegate pe baza suportului back-end. Funcții precum Suma, Medie, Min, și Max pot fi delegate. Funcțiile de numărare, cum ar fi CountRows și Count, pot fi, de asemenea, delegate. Cu toate acestea, RemoveIf și UpdateIf au restricții de delegare. În prezent, doar un număr limitat de surse de date acceptă delegarea pentru aceste funcții. Pentru mai multe detalii, consultați Lista de delegare.

Funcții nedelegabile

Toate celelalte funcții nu acceptă delegarea, inclusiv aceste funcții notabile:

Limite nedelegabile

Formulele care nu pot fi delegate vor fi procesate local. Procesarea locală permite utilizarea întregii lărgimi a Power Apps limbii formulei. Dar cu un preț: toate datele trebuie aduse mai întâi pe dispozitiv, ceea ce ar putea implica preluarea unei cantități mari de date din rețea. Acest lucru poate dura timp, dând impresia că aplicația dvs. este lentă sau posibil blocată.

Pentru a evita acest lucru, Power Apps impune o limită pentru cantitatea de date care pot fi procesate la nivel local: 500 de înregistrări în mod implicit. Am ales acest număr astfel încât să aveți totuși acces complet la seturi de date mici și să puteți perfecționa utilizarea seturilor de date mari, văzând rezultate parțiale.

Evident, trebuie să aveți grijă atunci când utilizați această facilitate, deoarece poate încurca utilizatorii. De exemplu, luați în considerare o funcție Filter cu o formulă de selecție care nu poate fi delegată, peste un sursă de date care conține un milion de înregistrări. Deoarece filtrarea se face local, doar primele 500 de înregistrări sunt scanate. Dacă înregistrarea dorită este înregistrarea 501 sau 500.001, nu este considerată sau returnată de Filtru.

Funcțiile agregate pot provoca, de asemenea, confuzie. Luați Medie peste o coloană din aceeași înregistrare de milioane de sursă de date. Media nu poate fi delegată în acest caz, deoarece expresia nu este delegată (a se vedea nota anterioară), deci numai primele 500 de înregistrări sunt mediate. Dacă nu sunteți atent, un răspuns parțial ar putea fi interpretat greșit ca un răspuns complet de către un utilizator al aplicației dvs.

Modificarea limitei

500 este numărul implicit de înregistrări, dar puteți modifica acest număr pentru o întreagă aplicație:

  1. Selectați Setări.
  2. Sub General, modificați setarea Limita rândurilor de date de la 1 la 2000.

În unele cazuri, știți că 2.000 (sau 1.000 sau 1.500) vor satisface nevoile scenariului dvs. Cu grijă, puteți crește acest număr pentru a se potrivi scenariului. Pe măsură ce creșteți acest număr, performanțele aplicației dvs. se pot reduce, în special pentru tabele largi, cu o mulțime de coloane. Totuși, cel mai bun răspuns este să delegați cât de mult puteți.

Pentru a vă asigura că aplicația dvs. se poate scala la seturi mari de date, reduceți această setare la 1. Orice lucru care nu poate fi delegat returnează o singură înregistrare, care ar trebui să fie ușor de detectat atunci când testați aplicația. Acest lucru poate ajuta la evitarea surprizelor atunci când încercați să duceți o aplicație de la faza de validare a conceptului la producție.

Avertismente delegare

Pentru a facilita cunoașterea a ceea ce este și nu este delegat, Power Apps oferă avertizare (triunghi galben) atunci când creați o formulă care conține ceva ce nu poate fi delegat.

Avertismentele delegării apar numai pe formule care funcționează pe surse de date ce pot fi delegate. Dacă nu vedeți un avertisment și credeți că formula dvs. nu este delegată corespunzător, verificați tipul de sursă de date cu lista de surse de date delegabile mai devreme în acest articol. articol.

Exemple

Pentru acest exemplu, veți genera automat o aplicație cu trei ecrane bazată pe un tabel de server SQL numit [dbo].[Fruit]. Pentru informații despre cum să generați aplicația, puteți aplica principii similare în articolul despre Dataverse la SQL Server.

Aplicație cu trei ecrane.

Proprietatea Articole a galeriei este setată la o formulă care conține SortByColumns și Search funcții, ambele putând fi delegate.

În caseta de căutare, tastați „Apple”.

Punctele de marcaj apar momentan în partea de sus a ecranului, în timp ce aplicația asigură comunicarea cu SQL Server pentru a procesa solicitarea de căutare. Toate înregistrările care îndeplinesc criteriile de căutare apar, chiar dacă sursa de date conține milioane de înregistrări.

Control introducere text căutare.

Rezultatele căutării includ „Mere” și „Ananas” deoarece Căutare funcția arată peste tot într-o coloană de text. Dacă doriți să găsiți doar înregistrări care conțin termenul de căutare la începutul numelui fructului, puteți utiliza o altă funcție delegabilă, Filtrare, cu un termen de căutare mai complicat. (Pentru simplitate, eliminați apelul SortByColumns .)

Eliminați apelul SortByColumns.

Noile rezultate includ „Mere” dar nu „Ananas”. Cu toate acestea, un triunghi galben apare lângă galerie (și în miniatura ecranului dacă bara de navigare din stânga prezintă miniaturi), și o linie albastră, ondulată apare sub o porțiune a formulei. Fiecare dintre aceste elemente indică un avertisment. Dacă treceți peste triunghiul galben de lângă galerie, apare acest mesaj:

Treceți peste avertizarea delegării.

SQL Server este un sursă de date delegabil și Filtrul este o funcție delegabilă. Cu toate acestea, Mid și Len nu poate fi delegat niciunuia sursă de date.

Dar a funcționat, nu-i așa? Într-un fel. Acesta este motivul pentru care este un avertisment și nu o linie roșie, ondulată.

  • Dacă tabelul conține mai puțin de 500 de înregistrări, formula a funcționat perfect. Toate înregistrările au fost aduse pe dispozitiv și Filtrul a fost aplicat local.
  • Dacă tabelul conține mai mult de 500 de înregistrări, formula nu va returna înregistrarea 501 sau mai mare, chiar dacă se potrivește criteriilor.

Consultați și

Impactul utilizării funcțiilor nedelegabile și al limitelor inadecvate ale rândurilor de date asupra performanței
Sfaturi de performanță și cele mai bune practici pentru a utiliza delegarea