Zdieľať cez


Obmedzenia dotazov: Obmedzenia delegovania a dotazov

Porozumenie delegácii

Power Apps funguje najlepšie s back-endom zdroj údajov, keď Power Fx dotaz môže byť plne preložený do ekvivalentného dotazu, ktorý možno spustiť na zdroj údajov. Power Apps odošle dotaz, ktorému zdroj údajov rozumie, dotaz sa vykoná na zdroj údajov a vrátia sa mu výsledky dotazu Power Apps. Napríklad zdroj údajov môže vykonávať prácu filtrovania údajov na zdroj údajov a vrátiť iba riadky, ktoré spĺňajú kritériá filtra. Keď to funguje správne, hovoríme, že dopyt je delegovaný na zdroj údajov, aby vykonal prácu na dopyte.

Power Fx Dopyty však nemožno vždy preložiť na ekvivalentné dopyty na všetky zdroje údajov. Napríklad Dataverse podporuje viac funkcií dotazov ako Excel. Dataverse podporuje operátor dotazu 'in' (členstvo) a Excel nie. Hovoríme, že dopyt je nedelegovateľný ak dopyt používa funkciu, ktorú zdroj údajov nepodporuje. Vo všeobecnosti, ak niektorá časť výrazu dopytu nie je delegovateľná, nedelegujeme žiadnu časť dopytu.

Keď dotaz nie je možné delegovať, Power Apps získa len prvých 500 záznamov z zdroj údajov a potom vykoná akcie v dotaze. Tento limit možno zvýšiť až na 2 000 záznamov Zmena limituPower Apps obmedzí veľkosť výsledku na 500 záznamov, aby sa zachoval dobrý výkon Power Apps. Pomocou experimentovania sme zistili, že množiny výsledkov väčšie ako tieto veľkosti spôsobujú problémy s výkonnosťou vašej aplikácie a Power Apps vo všeobecnosti.

Toto obmedzenie však môže byť problémom, pretože dotaz môže vrátiť nesprávne výsledky, ak údaje na zdroj údajov presiahnu 500/2000 záznamov. Uvažujme napríklad o príklade, kde zdroj údajov má 10 miliónov záznamov a váš dopyt musí pracovať s poslednou časťou údajov. (Napríklad rodinné mená začínajúce na „Z“) Váš dopyt však obsahuje nedelegovateľný operátor (napríklad odlišný.) V tomto prípade získate iba prvých 500/2000 záznamov a máte nesprávne výsledky.

Vytvorte svoje Power Fx dotazy pomocou deliteľných tabuliek pre zdroj údajov. Mali by ste používať iba funkcie dotazov, ktoré možno delegovať. Je to jediný spôsob, ako zabezpečiť, aby vaša aplikácia fungovala dobre a aby používatelia mali prístup ku všetkým informáciám, ktoré potrebujú.

Všímajte si upozornenia týkajúce sa delegovania, ktoré označujú miesta, kde nie je možné delegovanie používať. Ak pracujete s malými množinami údajov (menej ako 500 záznamov), môžete použiť ľubovoľný zdroj údajov a vzorec, pretože aplikácia môže spracovať údaje lokálne, ak vzorec nemožno delegovať.

Poznámka

Upozornenia týkajúce sa delegovania pomáhajú spravovať aplikáciu, aby používala správne výsledky. Ak údaje vo vašom zdroj údajov presahujú 500 záznamov a funkciu nie je možné delegovať, Power Fx označí vzorec modrým podčiarknutím.

Delegovateľné zdroje údajov

Delegovanie je podporované len pre niektoré tabuľkové údaje zdrojov. Ak zdroj údajov podporuje delegovanie, jeho dokumentácia konektora uvádza, že túto podporu podporuje. Napríklad tieto tabuľkové zdroje údajov sú najobľúbenejšie a podporujú delegovanie:

Importované excelové zošity (pomocou Pridanie statických údajov do aplikácie zdroj údajov), kolekcie a tabuľky uložené v kontextových premenných nevyžadujú delegovanie. Všetky tieto údaje sú už v pamäti a môže sa použiť úplný jazyk Power Apps.

Funkcie s možnosťou delegovania

Ďalším krokom je použitie iba takých vzorcov, ktoré je možné delegovať. Tu sú uvedené prvky vzorcov, ktoré by mohli byť delegované. Každý zdroj údajov je však iný. Tieto prvky teda nemusia byť podporované všetkými zdrojmi údajov. Skontrolujte vzorec, či sa v ňom nevyskytujú upozornenia týkajúce sa delegovania.

Funkcie filtrovania

Filter, Hľadať, Najprv a Vyhľadať možno delegovať.

V rámci funkcií Filter a Vyhľadať ich môžete použiť so stĺpcami tabuľky na výber príslušných záznamov:

  • A (vrátane &&), Alebo (vrátane ||), Nie (vrátane !)
  • In

    Poznámka

    In je delegovaný iba pre stĺpce na základe zdroj údajov. Ak je napríklad zdroj údajov tabuľka Účty , potom Filter(Accounts, Name in ["name1", "name2"]) sa deleguje do zdroj údajov na vyhodnotenie. Avšak Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]) nedeleguje, pretože Celé meno stĺpec je v inej tabuľke (Primárny kontakt) ako Účty. Výraz sa vyhodnocuje lokálne.

  • =, <>, >=, <=, >, <
  • +, -
  • TrimEnds
  • IsBlank
  • Začína, Končí
  • Konštantné hodnoty, ktoré sú rovnaké vo všetkých záznamoch, ako sú vlastnosti ovládacích prvkov a globálne a kontextové premenné.

Môžete tiež použiť aj časti vzorca, ktoré sa vyhodnotia ako konštantná hodnota pre všetky záznamy. Napríklad Doľava( Jazyk(), 2 ), Dátum( 2019, 3, 31 ) a Today() nezávisí od žiadnych stĺpcov záznamu, a preto vracia rovnakú hodnotu pre všetky záznamy. Tieto hodnoty môžu byť odoslané do zdroja údajov ako konštanta a neblokujú delegovanie.

Predchádzajúci zoznam neobsahuje nasledovné významné položky:

Obmedzenia dopytov

Úrovne vyhľadávania

Power Apps podporuje dve úrovne vyhľadávania. To znamená, že Power Fx výraz dopytu môže obsahovať maximálne dve funkcie vyhľadávania. Toto obmedzenie slúži na zachovanie výkonu. Ak výraz dotazu obsahuje vyhľadávanie, Power Apps najskôr vykoná dotaz na získanie základnej tabuľky. Potom vykoná druhý dotaz, ktorý rozšíri prvú tabuľku s informáciami o vyhľadávaní. Podporujeme maximálne ešte jednu úroveň nad rámec toho. V režime offline však podporujeme iba jednu úroveň rozšírenia vyhľadávania.

Vyhodnotenie výrazu - vlastnosť entity musí byť na ľavej strane 'LHS' operátora rovnosti

Je dôležité umiestniť vlastnosť porovnávanej entity do výrazu na ľavej strane „LHS“ rovnice. Na ilustráciu, v príklade nižšie vlastnosť entity 'ID obchodnej jednotky'. Názov je hodnota vlastnosti a musí byť umiestnená na LHS výrazu, ktorý sa má vyhodnotiť. Nasledujúci výraz je úspešný:

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

Tento výraz však nebude:

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

Funkcie zoraďovania

Zoradiť a Zoradiť podľa stĺpcov možno delegovať.

V Zoradiť môže byť vzorec iba názvom jedného stĺpca a nemôže zahŕňať iné operátory ani funkcie.

Agregačné funkcie

Niektoré agregované funkcie možno delegovať na základe podpory typu back-end. Funkcie ako Súčet, Priemer, Min, a Max je možné delegovať. Funkcie počítania, ako napríklad CountRows a Count, možno tiež delegovať. RemoveIf a UpdateIf však majú obmedzenia delegovania. V súčasnosti iba obmedzený počet zdrojov údajov podporuje delegáciu týchto funkcií. Ďalšie podrobnosti nájdete v Zoznam delegácií.

Nedelegovateľné funkcie

Žiadne ďalšie funkcie delegovanie nepodporujú vrátane týchto dôležitých funkcií:

Nedelegovateľné limity

Vzorce, ktoré nie je možné delegovať, sa spracujú lokálne. Lokálne spracovanie umožňuje úplnú šírku jazyka Power Apps , ktorý sa má použiť. Nie je to však zadarmo. Všetky údaje sa musia najskôr preniesť do zariadení, čo môže znamenať načítanie veľkého objemu údajov cez sieť. To môže nejaký čas trvať a aplikácia sa potom môže javiť ako pomalá alebo nereagujúca.

Aby sa tomu predišlo, Power Apps využíva obmedzenie množstva údajov na 500 záznamov (predvolená hodnota), ktoré je možné spracovať miestne. Toto číslo sme zvolili tak, aby vám zostal zachovaný úplný prístup k malým množinám údajov a vďaka zobrazeniu čiastočných výsledkov ste mohli svoje použitie veľkých množín údajov vylepšiť.

Pri použití týchto prostriedkov je potrebné dávať pozor, pre používateľov totiž môžu byť mätúce. Zvážte napríklad funkciu Filter s výberovým vzorcom, ktorý nemožno delegovať, nad zdroj údajov, ktorý obsahuje milión záznamov. Keďže filtrovanie sa vykonáva lokálne, prehľadá sa iba prvých 500 záznamov. Ak je požadovaný záznam záznam 501 alebo 500 001, Filter ho nezohľadní ani nevráti.

Agregačné funkcie môžu tiež spôsobiť zmätok. Vezmite Priemer v stĺpci rovnakého miliónového rekordu zdroj údajov. Priemer v tomto prípade nemožno delegovať, pretože výraz nie je delegovaný (pozrite si predchádzajúcu poznámku), takže iba prvých 500 záznamov sú spriemerované. Ak nebudete opatrní, používateľ vašej aplikácie by si mohol zameniť čiastočnú odpoveď za konečný výsledok.

Zmena limitu

Predvolený počet záznamov je 500, ale v aplikácii je možné toto číslo zmeniť:

  1. Vyberte Nastavenia.
  2. V časti Všeobecné zmeňte nastavenie Limit riadkov údajov z 1 na 2000.

V niektorých prípadoch viete, že 2 000 (alebo 1 000 alebo 1 500) uspokojí potreby vášho scenára. Tento počet môžete opatrne zvýšiť, aby vám vyhovoval. Keď tento počet zvýšite, môže sa znížiť výkon vašej aplikácie, hlavne v prípade širokých tabuliek s mnohými stĺpcami. Najlepšie riešenie je stále delegovať všetko, čo môžete.

Ak chcete zabezpečiť, aby sa vaša aplikácia mohla škálovať na veľké množiny údajov, znížte toto nastavenie na 1. Všetko, čo sa nedá delegovať, vráti iba jeden záznam, čo by sa malo pri testovaní aplikácie jednoducho zistiť. Vďaka tomu sa dá vyhnúť nečakaným udalostiam pri pokuse dať testovací koncept aplikácie do produkčného prostredia.

Upozornenia týkajúce sa delegovania

S cieľom zjednodušiť prehľad toho, čo je a nie je delegované, poskytuje služba Power Apps upozornenie (žltý trojuholník) pri vytvorení vzorca, ktorý obsahuje nedelegovateľnú časť.

Upozornenia týkajúce sa delegovania sa zobrazujú iba vedľa vzorcov, ktoré pracujú s delegovateľnými zdrojmi údajov. Ak sa vám nezobrazuje upozornenie a domnievate sa, že váš vzorec nie je delegovaný správne, skontrolujte typ zdroj údajov v porovnaní so zoznamom delegovateľných zdrojov údajov skôr v tomto článku článok.

Príklady

V tomto príklade automaticky vygenerujete aplikáciu s tromi obrazovkami na základe tabuľky servera SQL s názvom [dbo].[Ovocie]. Informácie o tom, ako vygenerovať aplikáciu, môžete použiť podobné princípy v článku o Dataverse na SQL Server.

Aplikácia s tromi obrazovkami.

Vlastnosť Položky galérie je nastavená na vzorec, ktorý obsahuje SortByColumns a Search funkcie, pričom obe môžu byť delegované.

Do vyhľadávacieho poľa zadajte „Apple“.

V hornej časti obrazovky sa dočasne zobrazia posúvajúce sa bodky počas komunikácie aplikácie s SQL Serverom pri spracovávaní požiadavky na vyhľadávanie. Zobrazia sa všetky záznamy, ktoré spĺňajú kritériá vyhľadávania, dokonca aj vtedy, ak zdroj údajov obsahuje milióny záznamov.

Ovládací prvok vyhľadávania textového vstupu.

Výsledky vyhľadávania zahŕňajú "Jablká" a "Ananás" pretože Vyhľadávanie< Funkcia a18> vyzerá všade v textovom stĺpci. Ak ste chceli nájsť iba záznamy, ktoré obsahujú hľadaný výraz na začiatku názvu ovocia, môžete použiť inú delegovateľnú funkciu Filter so zložitejším hľadaným výrazom. (Pre jednoduchosť odstráňte volanie SortByColumns .)

Odstránenie volania SortByColumns.

Nové výsledky zahŕňajú „Jablká“ ale nie „Ananás“. Vedľa galérie sa však zobrazí žltý trojuholník (a na miniatúre obrazovky, ak sa na ľavom navigačnom paneli zobrazujú miniatúry) a časť vzorca sa označí modrou vlnovkou. Každý z týchto prvkov označuje varovanie. Po ukázaní na žltý trojuholník vedľa galérie sa zobrazí toto hlásenie:

Ukázanie myšou na upozornenie týkajúce sa delegovania.

SQL Server je delegovateľná zdroj údajov a Filter je delegovateľná funkcia, avšak Mid a Len nie je možné delegovať na žiadneho zdroj údajov.

Ale to fungovalo, alebo nie? Tak trochu. A to je dôvod, prečo ide o upozornenie a nie o označenie červenou vlnovkou.

  • Ak tabuľka obsahuje menej ako 500 záznamov, vzorec je správny. Všetky záznamy boli prenesené do zariadenia a Filter bol aplikovaný lokálne.
  • Ak tabuľka obsahuje viac ako 500 záznamov, vzorec nevráti záznam 501 alebo vyšší, dokonca ani vtedy, ak zodpovedajú kritériám.

Pozrite si tiež:

Vplyv používania nedelegovateľných funkcií a nevhodných limitov údajových riadkov na výkon
Tipy na zvýšenie výkonnosti a osvedčené postupy na používanie delegovania