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 je možné zvýšit na 2 000 záznamů . Změna limituPower Apps omezuje velikost výsledku na 500 záznamů, aby se zachoval dobrý výkon Power Apps. Experimentováním jsme zjistili, že sady výsledků větší než tyto velikosti způsobují problémy s výkonem vaší aplikace a Power Apps obecně.
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í:
- Delegovatelné funkce a operace Power Apps pro službu Microsoft Dataverse
- Delegovatelné funkce a operace Power Apps pro službu SharePoint
- Delegovatelné funkce a operace Power Apps pro SQL Server
- Delegovatelné funkce a operace Power Apps pro Salesforce
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ýrazFilter(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:
- If
- *, /, Mod
- Operace přetypování sloupců Text, Value
- Concatenate (včetně &)
- ExactIn
- Funkce pro manipulaci s řetězci: Lower, Upper, Left, Mid, Len, ...
- Signály: Location, Acceleration, Compass, ...
- Nestálé funkce: Rand, ...
- Kolekce
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é agregované funkce lze delegovat na základě podpory back-endu. Funkce jako Sum, Average, Min a Max je možné delegovat. Funkce počtu, například CountRows a Count, je také možné delegovat. Funkce RemoveIf a UpdateIf však mají omezení delegování. V současné době podporuje delegování těchto funkcí pouze omezený počet zdrojů dat. Další podrobnosti najdete v článku Seznam delegování.
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:
- Vyberte Nastavení.
- 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.
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ů.
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.)
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:
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í