Omezení dotazů: Omezení delegování a dotazů

Princip delegování

Power Apps funguje nejlépe s back-endovým zdrojem dat, když lze dotaz Power Fx plně přeložit na ekvivalentní dotaz, který lze spustit na zdroji dat. Power Apps odešle dotaz, kterému zdroj dat rozumí, dotaz se provede na zdroji dat a výsledky dotazu jsou vráceny do Power Apps. Příklad: Zdroj dat může provést filtrování dat na zdroji dat a vrátit pouze řádky, které splňují kritéria filtru. Když to funguje správně, říkáme, že dotaz je delegován na zdroj dat, aby provedl práci na dotazu.

Nicméně dotazy Power Fx nelze vždy převést na ekvivalentní dotazy, kterým rozumí všechny zdroje dat. Například Dataverse podporuje více funkcí dotazů než Excel. Dataverse podporuje operátor dotazu „in“ (členství) a Excel ne. Pokud dotaz používá funkci, kterou nepodporuje zdroj dat, označujeme jej jako nedelegovatelný. Obecně platí, že pokud je některá část výrazu dotazu nedelegovatelná, nedelegujeme žádnou část dotazu.

Když je dotaz nedelegovatelný, Power Apps získá pouze prvních 500 záznamů ze zdroje dat a poté provede akce v dotazu. Tento limit lze zvýšit až na 2 000 záznamů změnou limitu. Power Apps omezuje velikost výsledku na 500 záznamů, aby byl zachován dobrý výkon Power Apps. Experimentováním jsme zjistili, že sady výsledků nad tyto velikosti obecně způsobují problémy s výkonem vaší aplikace a Power Apps.

Toto omezení však může být problémem, protože dotaz může vrátit nesprávné výsledky, pokud data ve zdroji dat překročí 500/2000 záznamů. Přestavme si, že váš zdroj dat má 10 milionů záznamů a váš dotaz musí pracovat s poslední částí dat. (Například příjmení začínající na „Z“.) Dotaz však obsahuje nedelegovatelný operátor (například distinct). V tom případě získáte pouze prvních 500/2000 záznamů a budete mít nesprávný výsledek.

Vytvořte dotazy Power Fx s použitím delegovatelných tabulek pro zdroj dat. Měli byste používat pouze funkce dotazů, které lze delegovat. Je to jediný způsob, který umožní, aby vaše aplikace dobře fungovala a zajistila uživatelům přístup ke všem potřebným informacím.

Věnujte pozornost upozorněním delegování, která identifikují místa, kde není delegování možné. Pokud pracujete s malými sadami dat (méně než 500 záznamů), můžete použít jakýkoli zdroj dat a vzorec, protože pokud vzorec nemůže být delegován, aplikace může zpracovat data místně.

Poznámka

Upozornění delegování pomáhají spravovat aplikaci, aby měla správné výsledky. Pokud data ve vašem zdroji dat překračují 500 záznamů a funkci nelze delegovat, Power Fx označí vzorec modrým podtržením.

Delegovatelné datové zdroje

Delegování se podporuje pouze u určitých tabulkových zdrojů dat. Pokud zdroj dat podporuje delegování, jeho dokumentace ke konektoru popisuje tuto podporu. Například tyto tabulkové zdroje dat jsou nejoblíbenější a podporují delegování:

Importované excelové sešity (používající zdroj dat Přidání statických dat do aplikace), kolekce a tabulky uložené v kontextových proměnných delegování nevyžadují. Všechna tato data jsou již v paměti a může se použít úplný jazyk Power Apps.

Funkce s možností delegování

Dalším krokem je použití pouze takových vzorců, které je možné delegovat. Zde jsou uvedené prvky vzorců, které by mohly být delegovány. Každý zdroj dat je ale jiný. Tyto prvky tedy nemusí být podporovány všemi zdroji dat. U konkrétního vzorce zkontrolujte upozornění delegování.

Filtrovací funkce

Funkce Filter, Search, First a LookUp je možné delegovat.

Ve funkcích Filter a LookUp můžete použít následující operátory, abyste ve sloupcích tabulky mohli vybrat příslušné záznamy:

  • And (včetně &&), Or (včetně ||), Not (včetně !)
  • In

    Poznámka

    Operátor In je delegován pouze pro sloupce základního zdroje dat. Pokud je například zdrojem dat tabulka Accounts, pak je výraz Filter(Accounts, Name in ["name1", "name2"]) předán do zdroje dat k vyhodnocení. Avšak výraz Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]) delegován není, protože sloupec Fullname je v jiné tabulce (PrimaryContact) než Accounts. Výraz je vyhodnocen lokálně.

  • =, <>, >=, <=, >, <
  • +, -
  • TrimEnds
  • IsBlank
  • StartsWith, EndsWith
  • Konstantní hodnoty, které jsou u všech záznamů stejné, například vlastnosti ovládacích prvků a globální a kontextové proměnné.

Můžete také použít části vzorce, které se vyhodnotí jako konstantní hodnota pro všechny záznamy. Například Left( Language(); 2 ), Date( 2019, 3, 31 ) a Today() nezávisí na žádných sloupcích záznamu, a proto vrací pro všechny záznamy stejnou hodnotu. Tyto hodnoty mohou být zaslány do zdroje dat jako konstanta a neblokují delegování.

Předchozí seznam neobsahuje tyto důležité položky:

Omezení dotazů

Úrovně vyhledávání

Power Apps podporuje dvě úrovně vyhledávání. To znamená, že výraz dotazu Power Fx může mít maximálně dvě vyhledávací funkce. Toto omezení slouží k zachování výkonu. Pokud výraz dotazu obsahuje vyhledávání, Power Apps nejprve provede dotaz, aby získal základní tabulku. Potom provede druhý dotaz, který rozšíří první tabulku o vyhledané informace. Nad tento rámec je podporována ještě maximálně jedna úroveň. V režimu offline je však podporována pouze jedna úroveň rozšíření o vyhledávání.

Vyhodnocení výrazu - vlastnost entity musí být na levé straně 'LHS' operátoru rovnosti

Je důležité umístit vlastnost porovnávané entity do výrazu na levé straně 'LHS' rovnice. Pro ilustraci na příkladu níže vlastnost entity 'ID či název obchodní jednotky' je hodnota vlastnosti a musí být umístěna na LHS výrazu, který má být vyhodnocen. Následující výraz bude úspěš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'
    )

Funkce řazení

Funkce Sort a SortByColumns je možné delegovat.

U funkce Sort může být vzorcem pouze název jednoho sloupce a nemůže zahrnovat další operátory nebo funkce.

Agregační funkce

Některé agregační funkce lze delegovat v závislosti na podpoře v back-endu. Funkce Sum, Average, Min a Max je možné delegovat. Funkce počtu, například CountRows a Count je také možné delegovat. V současné době je delegování těchto funkcí podporováno pouze omezeným počtem zdrojů dat. Další informace naleznete v části Seznam delegování.

Podpora delegování funkcí RemoveIf a UpdateIf je v experimentálním režimu a ve výchozím nastavení je vypnutá.

Nedelegovatelné funkce

Žádné další funkce delegování nepodporují, včetně těchto důležitých funkcí:

Omezení plynoucí z nedelegovatelnosti

Vzorce, které nejdou delegovat, se zpracují místně. Místní zpracování umožňuje použití jazyka vzorců Power Apps v jeho plném rozsahu. Není to ale zadarmo. Všechna data se musí nejprve přenést do zařízení, což může znamenat načtení velkého objemu dat přes síť. To může nějakou dobu trvat a aplikace se pak může jevit jako pomalá nebo nereagující.

Abychom tomu předešli, má aplikace Power Apps omezení množství dat, které lze zpracovat místně. Je to ve výchozím nastavení 500 záznamů. Toto číslo jsme zvolili tak, aby vám zůstal zachován úplný přístup k malým sadám dat a díky zobrazení částečných výsledků jste mohli své použití velkých sad dat vylepšit.

Při použití těchto prostředků je potřeba dávat pozor, pro uživatele totiž mohou být matoucí. Představte si třeba použití funkce Filter se vzorcem výběru, který nejde delegovat, a zdroje dat obsahujícího více než milion záznamů. Vzhledem k tomu, že se filtrování provádí místně, prohledává se pouze prvních 500 záznamů. Pokud je požadovaným záznamem záznam 501 nebo 500 001, funkce Filter ho nevezme v potaz ani nevrátí.

Také agregační funkce mohou být matoucí. Použijte funkci Average na sloupec toho stejného zdroje dat s milionem záznamů. Průměrný v tomto případě nelze delegovat, protože výraz není delegován (viz dřívější poznámka), takže je zprůměrováno pouze prvních 500 záznamů. Pokud byste nebyli pozorní, uživatel vaší aplikace by mohl zaměnit částečnou odpověď za konečný výsledek.

Změna limitu

500 je výchozí počet záznamů. Toto číslo ale můžete pro celou aplikaci změnit:

  1. Vyberte Nastavení.
  2. V části Obecné změňte nastavení Limit řádku dat z 1 na 2000.

V některých případech budete vědět, že 2000 (nebo 1000 nebo 1500) bude vyhovovat vašim potřebám. Tento počet můžete opatrně zvýšit, aby vám vyhovoval. Když tento počet zvýšíte, může se snížit výkon vaší aplikace, zejména u širokých tabulek s mnoha sloupci. Nejvhodnějším řešením však stále je co nejvíce delegovat.

Aby vaše aplikace zvládala velké datové sady, snižte toto nastavení na 1. Všechno, co není možné delegovat, bude vracet jenom jeden záznam, což by se mělo při testování aplikace snadno zjistit. Díky tomu se dá vyhnout nečekaným událostem při pokusu dát testovací koncept aplikace do produkčního prostředí.

Upozornění delegování

Aby bylo jednodušší zjistit, co se deleguje a co nikoli, poskytují Power Apps upozornění (žlutý trojúhelník) při vytváření vzorce obsahujícího položku, která nejde delegovat.

Upozornění delegování se zobrazují pouze u vzorců, které pracují s delegovatelnými zdroji dat. Pokud upozornění nevidíte a myslíte si, že váš vzorec není delegován správně, zkontrolujte typ zdroje dat v seznamu delegovatelných zdrojů dat uvedeném výše v tomto článku.

Příklady

V tomto příkladu automaticky vygenerujete aplikaci se třemi obrazovkami [dbo].[ Fruit] založenou na SQL Serveru. Pokud chcete vědět, jak aplikaci vygenerovat, můžete pro SQL Server použít principy podobné těm, které jsou uvedené v článku o Dataverse.

Aplikace se třemi obrazovkami.

Vlastnost Items galerie je nastavená na vzorec obsahující funkce SortByColumns a Search. Obě tyto funkce je možné delegovat.

Do vyhledávacího pole zadejte "Apple".

V horní části obrazovky se zobrazí běžící tečky indikující komunikaci mezi aplikací a SQL Serverem kvůli zpracování požadavku hledání. Zobrazí se všechny záznamy, které splňují kritéria hledání, a to i v případě, že zdroj dat obsahuje milióny záznamů.

Ovládací prvek pro hledání textového vstupu.

Vzhledem k tomu, že funkce Search hledá v celém sloupci textu, výsledky hledání obsahují „Apples“ a „Pineapple“. Pokud byste chtěli najít pouze záznamy, které hledaný termín obsahují na začátku názvu ovoce, můžete použít jinou delegovatelnou funkci, Filter, se složitějším hledaným termínem. (Pro zjednodušení odeberte volání funkce SortByColumns.)

Odebrání volání SortByColumns.

Nové výsledky budou zahrnovat „Apples“, ale ne „Pineapple“. Vedle galerie (a u miniatury obrazovky, pokud levý navigační panel zobrazuje miniatury) se ale zobrazí žlutý trojúhelník a pod částí vzorce se zobrazí modrá vlnovka. Každý z těchto prvků označuje upozornění. Pokud najedete myší na žlutý trojúhelník vedle galerie, zobrazí se tato zpráva:

Najetí myší na upozornění delegování.

SQL Server je delegovatelný zdroj dat a funkce Filter je delegovatelná funkce. Funkce Mid a Len ale není možné delegovat na žádný zdroj dat.

Ale fungovalo to nebo ne? Tak trochu. A proto se jedná o upozornění a nezobrazuje se červená vlnovka.

  • Pokud tabulka obsahuje méně než 500 záznamů, vzorec fungoval perfektně. Všechny záznamy se přenesly do zařízení a funkce Filter se použila místně.
  • Pokud tabulka obsahuje více než 500 záznamů, vzorec nevrátí záznam 501 a vyšší, i když odpovídá kritériím.

Viz také

Dopad použití nedelegovatelných funkcí a omezení nevhodných řádků dat na výkon
Osvědčené postupy a tipy pro delegování

Poznámka

Můžete nám sdělit, jaké máte jazykové preference pro dokumentaci? Zúčastněte se krátkého průzkumu. (upozorňujeme, že tento průzkum je v angličtině)

Průzkum bude trvat asi sedm minut. Nejsou shromažďovány žádné osobní údaje (prohlášení o zásadách ochrany osobních údajů).