Vaicājumu ierobežojumi: deleģēšanas un vaicājumu ierobežojumi

Deleģēšanas izpratne

Power Apps vislabāk darbojas ar aizmugursistēmas datu avots, ja vaicājumu Power Fx var pilnībā pārvērst līdzvērtīgā vaicājumā, ko var izpildīt datu avots. Power Apps Nosūta vaicājumu, ko datu avots saprot, vaicājums tiek izpildīts datu avots un vaicājuma rezultāti tiek atgriezti uz Power Apps. Piemēram, datu avots var veikt datu filtrēšanas darbu datu avots un atgriezt tikai tās rindas, kas atbilst filtra kritērijiem. Ja tas darbojas pareizi, mēs sakām, ka vaicājums tiek deleģēts datu avots, lai veiktu vaicājuma darbu.

Power Fx Tomēr vaicājumus ne vienmēr var pārvērst līdzvērtīgos vaicājumos visos datu avotos. Piemēram, Dataverse atbalsta vairāk vaicājumu līdzekļu nekā programma Excel. Dataverse atbalsta vaicājuma operatoru "in" (dalība), un programma Excel to nedara. Mēs sakām, ka vaicājums nav deleģējams, ja vaicājumā tiek izmantots līdzeklis, ko datu avots neatbalsta. Parasti, ja kāda vaicājuma izteiksmes daļa nav deleģējama, mēs nedeleģējam nevienu vaicājuma daļu.

Ja vaicājums nav deleģējams,saņem Power Apps tikai pirmos 500 ierakstus no datu avots un pēc tam veic vaicājuma darbības. Šo ierobežojumu var palielināt līdz 2,000 ierakstiem Mainot ierobežojumu , rezultāta lielums tiek ierobežots līdz 500 ierakstiem Power Apps , lai saglabātu labu veiktspēju Power Apps. Eksperimentējot mēs konstatējām, ka rezultātu kopas, kas ir lielākas par šiem izmēriem, rada veiktspējas problēmas jūsu lietotnei un Power Apps kopumā.

Tomēr šis ierobežojums var radīt problēmas, jo vaicājums var atgriezt nepareizus rezultātus, ja dati par datu avots pārsniedz 500/2000 ierakstus. Piemēram, apsveriet piemēru, kad jūsu datu avots ir 10 miljoni ierakstu un jūsu vaicājumam ir jādarbojas ar datu pēdējo daļu. (Piemēram, uzvārdi, kas sākas ar "Z") Tomēr vaicājumā ir nedeleģējams operators (piemēram, atšķirīgs.) Šajā gadījumā jūs saņemat tikai pirmos 500/2000 ierakstus, un jums ir nepareizi rezultāti.

Power Fx Izveidojiet vaicājumus, izmantojot savas datu avots deleģējamās tabulas. Ieteicams izmantot tikai tās vaicājuma funkcijas, kuras var deleģēt. Tas ir vienīgais veids, kā nodrošināt lietotnes labu darbību un nodrošināt, ka lietotāji var piekļūt visai nepieciešamajai informācijai.

Ņemiet vērā deleģēšanas brīdinājumus, kas norāda vietas, kur deleģēšana nav iespējama. Ja strādājat ar nelielām datu kopām (mazāk nekā 500 ierakstu), varat izmantot jebkuru datu avots un formulu, jo programma var apstrādāt datus lokāli, ja formulu nevar deleģēt.

Piezīme

Deleģēšanas brīdinājumi palīdz jums pārvaldīt programmu, lai tās rezultāti būtu pareizi. Ja dati jūsu datu avots pārsniedz 500 ierakstus un funkciju nevar deleģēt, Power Fx atzīmējiet formulu ar zilu pasvītrojumu.

Deleģējamie datu avoti

Deleģēšana tiek atbalstīta tikai noteiktiem tabulveida datu avotiem. Ja datu avots atbalsta deleģēšanu, tā savienotāja dokumentācijā ir norādīts šāds atbalsts. Piemēram, vispopulārākie ir tālāk norādītie tabulveida datu avoti, un tie atbalsta deleģēšanu.

Importētajām Excel darbgrāmatām (izmantojot datu avotu Pievienojiet savai programmai statiskus datus ), kolekcijām un konteksta mainīgajos glabātajām tabulām nav nepieciešama deleģēšana. Visi šie dati jau atrodas atmiņā, un var izmantot pilnīgo Power Apps valodu.

Deleģējamās funkcijas

Nākamais posms ir izmantot tikai tās formulas, kuras var deleģēt. Šeit ir iekļauti formulu elementi, kurus varēja deleģēt. Taču katrs datu avots ir atšķirīgs, un ne visi avoti atbalsta visus šos elementus. Apskatiet deleģēšanas brīdinājumus savā konkrētajā formulā.

Filtrēšanas funkcijas

Filter,Search,First ... ... un LookUp var deleģēt.

Lai tabulas kolonnās atlasītu atbilstošās rindas, izmantojiet Filter un LookUp funkcijas.

  • And (tostarp &&), Or (tostarp ||), Not (tostarp !)
  • Iekšā

    Piezīme

    Tiek deleģēts tikai kolonnām, kas atrodas bāzes datu avotā. Piemēram, ja datu avots ir tabula Uzņēmumu tabula, Filter(Accounts, Name in ["name1", "name2"]) pilnvaro datu avotam novērtēšanu. Tomēr Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]) nepilnvaro, jo kolonna Fullname atrodas citā tabulā (PrimaryContact), nevis Uzņēmumi. Izteiksme tiek lokāli novērtēta.

  • =, <>, >=, <=, >, <
  • +, -
  • TrimEnds
  • IsBlank
  • StartsWith, EndsWith
  • Konstantas vērtības, kuras ir vienādas visās rindās, piemēram, vadīklas rekvizīti un globālie un konteksta mainīgie.

Varat izmantot arī savu formulas daļas, kuru rezultāts ir konstanta vērtība visām rindām. Piemēram, vērtības Left( Language(), 2 ), Date( 2019, 3, 31 ) un Today() nav atkarīgas no kādas rindas kolonnas, tādēļ tās atgriež vienādu vērtību visām rindām. Šīs vērtības var nosūtīt uz datu avotiem kā konstantes, un tās nebloķē deleģēšanu.

Iepriekšējā sarakstā nav tālāk norādīto svarīgo vienumu.

Vaicājumu ierobežojumi

Uzmeklēšanas līmeņi

Power Apps atbalsta divus uzmeklēšanas līmeņus. Tas nozīmē, ka vaicājuma Power Fx izteiksmei tajā var būt ne vairāk kā divas uzmeklēšanas funkcijas. Šis ierobežojums ir paredzēts, lai saglabātu veiktspēju. Ja vaicājuma izteiksmē ir iekļauta uzmeklēšana,vispirms tiek veikts vaicājums, Power Apps lai iegūtu pamattabulu. Pēc tam tas veic otru vaicājumu, kas izvērš pirmo tabulu ar uzmeklēšanas informāciju. Mēs atbalstām vēl vienu līmeni, kas pārsniedz šo maksimumu. Tomēr bezsaistē mēs atbalstām tikai viena līmeņa uzmeklēšanas izvēršanu.

Izteiksmes novērtējums - vienības īpašumam jābūt vienlīdzības operatora kreisajā pusē "LHS"

Ir svarīgi salīdzināmās entītijas rekvizītu novietot izteiksmē vienādojuma kreisajā pusē "LHS". Piemēram, zemāk redzamajā piemērā entītijas rekvizīts "Struktūrvienības ID". Nosaukums ir īpašuma vērtība, un tas ir jāievieto novērtējamās izteiksmes LHS. Veiksmīga ir šāda izteiksme:

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

Tomēr šī izteiksme:

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

Kārtošanas funkcijas

Funkcijas Sort un SortByColumns var deleģēt.

Izmantojot Sort, formula var būt tikai vienas kolonnas nosaukums, un tajā nedrīkst būt citu operatoru un funkciju.

Apkopošanas funkcijas

Dažas apkopojuma funkcijas var deleģēt atkarībā no atbalsta aizmugursistēmā. Funkcijas Sum, Average, Min un Max var deleģēt. Var deleģēt arī skaitīšanas funkcijas, piemēram, CountRows un Count . Pašlaik tikai ierobežots skaits datu avotu atbalsta šīs deleģēšanas funkcijas. Papildinformāciju skatiet sadaļā Deleģēšanas saraksts.

RemoveIf un UpdateIf deleģēšanas atbalsts ir sadaļā Eksperimentāls un izslēgts pēc noklusējuma.

Nedeleģējamas funkcijas

Visas pārējās funkcijas, tostarp tālāk norādītās svarīgās funkcijas, deleģēšanu neatbalsta.

Nedeleģējami ierobežojumi

Formulas, kuras nevar deleģēt, tiek apstrādātas lokāli. Vietējā apstrāde ļauj izmantot visu formulu valodas plašumu Power Apps . Taču tam ir sava cena: vispirms visi dati ir jānogādā uz ierīci, un tas var būt saistīts ar liela datu apjoma izgūšanu tīklā. Tas var aizņemt laiku, radot iespaidu, ka jūsu programma darbojas lēni vai varētu būt avarējusi.

Lai no tā izvairītos, Power Apps nosaka lokāli apstrādājamo datu apjoma ierobežojumu: pēc noklusējuma tās ir 500 rindas. Šo skaitu mēs izvēlējāmies tā, lai jums joprojām būtu pilnīga piekļuve mazām datu kopām un jūs varētu uzlabot lielu datu kopu izmantošanu, redzot daļējos rezultātus.

Protams, izmantojot šo iespēju, ir jāuzmanās, jo lietotājus tas var maldināt. Piemēram, iedomājieties funkciju Filter ar atlases formulu, ko nevar deleģēt, datu avotā, kur ir miljons rindu. Tā kā filtrēšana notiek lokāli, tiek skenēti tikai pirmās 500 rindas. Ja vēlamā rinda ir rinda numur 501 vai numur 500 001, tas netiek ņemts vērā un funkcija Filter to neatgriež.

Arī apkopošanas funkcijas var izraisīt apjukumu. Par piemēru ņemsim funkciju Average tajā pašā miljons rindu datu avota kolonnā. Vidējais nevar tikt deleģēt šajā gadījumā, jo izteiksme nav deleģēta (skatīt iepriekšējo piezīmi), tāpēc tikai pirmie 500 ieraksti ir ar vidēju vērtību. Ja neuzmanaties, jūsu programmas lietotājs daļēju atbildi var nepareizi pieņemt par pilnīgu atbildi.

Ierobežojuma mainīšana

500 ir rindu noklusējuma skaits, taču šo skaitu visai programmai varat mainīt tālāk norādītajā veidā.

  1. Atlasiet Iestatījumi.
  2. Sadaļā Vispārīgi mainiet Datu rindas ierobežojuma iestatījumu no 1 uz 2000.

Dažos gadījumos jūs zināt, ka 2,000 (vai 1,000 vai 1,500) apmierinās jūsu scenārija vajadzības. Šo skaitli varat uzmanīgi palielināt, lai tas atbilstu jūsu scenārijam. Šo skaitli palielinot, jūsu programmas veiktspēja var pasliktināties, it īpaši tas attiecas uz plašām tabulām, kur ir daudz kolonnu. Taču tik un tā, vislabākais risinājums ir deleģēt, cik daudz vien iespējams.

Lai jūsu lietotni varētu mērogot līdz lielām datu kopām, samaziniet šo iestatījumu līdz 1. Viss, ko nevar deleģēt, atgriež vienu rindu, ko vajadzētu vienkārši konstatēt, testējot jūsu programmu. Tas var palīdzēt izvairīties no pārsteigumiem, kad prototipa programmu mēģināt pārcelt uz ražošanu.

Deleģēšanas brīdinājumi

Lai būtu vienkāršāk saprast, kas tiek un kas netiek deleģēts, Power Apps parāda brīdinājumu (dzeltenu trīsstūri), kad izveidojat formulu, kurā ir kaut kas, ko nevar deleģēt.

Deleģēšanas brīdinājumi tiek rādīti tikai formulām, kas darbojas deleģējamos datu avotos. Ja neredzat brīdinājumu un uzskatāt, ka jūsu formula netiek pareizi deleģēta, pārbaudiet datu avots tipu pret deleģējamo datu avotu sarakstu iepriekš šajā rakstā.

Piemēri

Šim piemēram jūs automātiski ģenerējat trīs ekrānu programmu, balstoties uz SQL Server tabulu ar nosaukumu [dbo].[Fruit]. Lai iegūtu informāciju par to, kā ģenerēt programmu, varat piemērot līdzīgus principus rakstā par Dataverse SQL Server.

Trīs ekrānu programma.

Galerijas rekvizīts Items ir iestatīts uz formulu, kurā ir funkcijas SortByColumns un Search, un tās abas var deleģēt.

Meklēšanas lodziņā ierakstiet "Apple".

Uz īsu brīdi ekrāna augšpusē tiek rādīta punktiņu animācija, kamēr programma sazinās ar SQL Server, lai apstrādātu šo meklēšanas pieprasījumu. Tiek parādīti visias rindas, kas atbilst meklēšanas kritērijiem, pat gadījumā, ja datu avotā ir miljoniem rindu.

Meklēšanas teksta ievades vadīkla.

Meklēšanas rezultātos ietilpst "Apples" un "Pineapple", jo funkcija Meklēt meklē visā teksta kolonnā. Ja vēlaties atrast tikai rindas, kurās meklējamais vārds ir meklējamo nosaukuma sākumā, varat izmantot citu deleģējamu funkciju Filtrēt ar sarežģītāku meklējamo vārdu. (Vienkāršības labad noņemiet izsaukumu SortByColumns.)

Izsaukuma SortByColumns noņemšana.

Jaunajos rezultātos ir "Apples", nevis "Pineapple". Taču blakus galerijai (un ekrāna sīktēlā, ja kreisajā navigācijas joslā tiek rādīti sīktēli) kļūst redzams dzeltens trīsstūris, un zem formulas daļas kļūst redzama viļņota līnija zilā krāsā. Katrs no šiem elementiem norāda uz brīdinājumu. Ja ar peles kursoru norādāt uz dzeltenā trīsstūra blakus galerijai, tiek parādīts ziņojums:

Norādīšana ar peles kursoru uz deleģēšanas brīdinājuma.

SQL Server ir deleģējams datu avots, un Filter ir deleģējama funkcija, taču funkcijas Mid un Len nevar deleģēt nevienam datu avotam.

Taču tas darbojās, nav ne? Nu, jā, savā ziņā. Tādēļ šis ir brīdinājums, nevis viļņots ķeburs sarkanā krāsā.

  • Ja tabulā ir mazāk par 500 rindām, formula darbojas nevainojami. Visas rindas tika nogādātas uz ierīci, un funkcija Filter tika lietota lokāli.
  • Ja tabulā ir vairāk par 500 rindām, formula neatgriež nevienu rindu pēc rindas numur 501 pat tad, ja tas atbilst kritērijiem.

Skatiet arī

Nedeleģējamu funkciju un neatbilstošu datu rindu ierobežojumu izmantošana nedeleģējamiem vaicājumiem
Veiktspējas padomi un deleģēšanas ieteikumi

Piezīme

Kādas ir jūsu dokumentācijas valodas preferences? Aizpildiet īsu aptauju. (ņemiet vērā, ka aptauja ir angļu valodā)

Aptaujai būs nepieciešamas aptuveni septiņas minūtes. Nekādi personas dati netiks vākti (paziņojums par konfidencialitāti).