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 mărită la 2.000 de înregistrări Modificarea limitei Power Apps limitează dimensiunea rezultatului la 500 de înregistrări pentru a păstra performanța bună a Power Apps. Prin experimente, am descoperit 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ă o sursă de date sprijină delegarea, documentația conectorului său conturează acest sprijin. De exemplu, aceste surse de date tabulare sunt cele mai populare și sprijină delegarea:

Registrele de lucru Excel importate (utilizând sursa de date Adăugați date statice în aplicația dvs.), 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

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

În cadrul funcțiilor Filtru și LookUp, le puteți utiliza pe acestea 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 sursa de date de bază. De exemplu, dacă sursa de date este tabelul Conturi, atunciFilter(Accounts, Name in ["name1", "name2"]) deleagă la sursa de date pentru evaluare. În orice caz, Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]) nu deleagă din moment ce coloana Nume complet este în alt tabel (PrimaryContact) 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 variabile 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 Today() nu depind de nicio coloană a înregistrării și, astfel, 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 a expresiei de 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

Sortare și SortByColumns pot fi delegate.

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

Funcții agregate

Unele funcții agregate pot fi delegate în funcție de suportul pe back-end. Sumă, Medie, Min și Max pot fi delegate. De asemenea, pot fi delegate funcții de numărare precum CountRows și Count . Doar un număr limitat de surse de date acceptă aceste funcții pentru delegare în acest moment. Pentru mai multe informații, consultați Lista de delegare.

RemoveIf și UpdateIf asistența pentru delegare este în Experimental și dezactivată în mod prestabilit.

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 Filtru cu o formulă de selecție care nu poate fi delegată, pe o 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, aceasta nu este luată în considerare sau returnată de Filtru.

Funcțiile agregate pot provoca, de asemenea, confuzie. Luați Medie pentru o coloană din aceeași sursă de date de un milion de înregistrări. Media nu poate fi delegată în acest caz deoarece expresia nu este delegată (consultați fișierul nota anterioară), așadar sunt mediate doar primele 500 de înregistrări. 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, schimbați setarea Limita de rânduri 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 SQL Server 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 Elemente a galeriei este setată la o formulă care conține funcțiile SortByColumns și Căutare, ambele putând fi delegate.

În caseta de căutare, tastați "Roșii”.

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" pentru că funcția Căutare caută peste tot într-o coloană de text. Dacă ați dorit să găsiți numai înregistrări care conțin termenul de căutare la începutul numelui fructului, puteți utiliza o altă funcție delegabilă, Filtru, cu un termen de căutare mai complex. (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 o sursă de date ce poate fi delegată iar Filtru este o funcție ce poate fi delegată, cu toate acestea, Mid și Len nu pot fi delegate în nicio 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 Filtru 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 ce nu pot fi delegate și ale limitelor neadecvate ale rândurilor de date asupra performanței
Sfaturi privind performanța și cele mai bune practici pentru a utiliza delegarea

Notă

Ne puteți spune care preferințele dvs. lingvistice pentru documentație? Răspundeți la un chestionar scurt. (rețineți că acest chestionar este în limba engleză)

Chestionarul va dura aproximativ șapte minute. Nu sunt colectate date personale (angajament de respectare a confidențialității).