Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Princip delegování
Power Apps funguje nejlépe s back-endovým zdrojem dat, když se dotaz Power Fx plně přeloží na ekvivalentní dotaz, který běží na zdroji dat. Power Apps odešle dotaz, kterému zdroj dat rozumí, zdroj dat spustí dotaz a Power Apps získá výsledky. Zdroj dat například filtruje data a vrací pouze řádky, které splňují kritéria filtru. Pokud to funguje, je dotaz delegován na zdroj dat.
Dotazy Power Fx se ale nemohou vždy přeložit na ekvivalentní dotazy na každý zdroj dat. Například Dataverse podporuje více funkcí dotazů než Excel. Dataverse podporuje operátor dotazu „in“ (členství), ale Excel ne. Dotaz je nedelegovatelný, pokud používá funkci, kterou zdroj dat nepodporuje. Pokud je některá část výrazu dotazu nedelegovatelná, Power Apps nedeleguje žádnou část dotazu.
Pokud je dotaz nedelegovatelný, Power Apps získá prvních 500 záznamů ze zdroje dat a pak provede akce v dotazu. Tento limit můžete zvýšit na 2 000 záznamů. Změna limituPower Apps omezí velikost výsledku na 500 záznamů, aby vaše aplikace fungovala dobře.Větší sady výsledků mohou způsobit problémy s výkonem vaší aplikace a Power Apps.
Toto omezení ale může být problém, protože dotaz může vrátit nesprávné výsledky, pokud má zdroj dat více než 500 nebo 2 000 záznamů. Pokud má například váš zdroj dat 10 milionů záznamů a váš dotaz potřebuje pracovat s poslední částí dat, jako jsou příjmení začínající na "Z", a váš dotaz používá nedelegovatelný operátor, jako je distinct, získáte pouze prvních 500 nebo 2 000 záznamů. To znamená, že získáte nesprávné výsledky.
Vytvořte dotazy Power Fx s použitím delegovatelných tabulek pro zdroj dat. Používejte 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á ukazují, 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 zdroji dat překročí 500 záznamů a funkci nelze delegovat, Power Fx označí vzorec modrým podtržením.
Delegovatelné datové zdroje
Delegování funguje pouze u určitých tabulkových zdrojů dat. Pokud zdroj dat podporuje delegování, jeho dokumentace ke konektoru vysvětluje tuto podporu. Například tyto oblíbené tabulkové zdroje dat 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í
Používejte pouze vzorce, které lze delegovat. Tento článek obsahuje seznam prvků vzorce, které lze delegovat. Každý zdroj dat je jiný. Tyto prvky tedy nemusí být podporovány všemi zdroji dat. U vzorce zkontrolujte upozornění delegování.
Filtrovací funkce
Funkce Filter, Search, First a LookUp je možné delegovat.
Ve funkcích Filter a LookUp použijte 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, výraz
Filter(Accounts, Name in ["name1", "name2"])
je delegován do zdroje dat k vyhodnocení. Avšak výrazFilter(Accounts, PrimaryContact.Fullname in ["name1", "name2"])
delegován není, protože sloupec Celé jméno 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 jsou 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
Delegování a kolekce
Když použijete With
, UpdateContext
nebo Set
interně vytvoří kolekce. Kolekce jsou statický seznam záznamů v paměti a neúčastní se delegování. Nezobrazí se upozornění delegování.
Omezení dotazů
Vyhledávání a rozbalování úrovní
Power Apps umožňuje použít až dvě úrovně vyhledávání. Výraz dotazu Power Fx může obsahovat maximálně dvě vyhledávací funkce, aby se zachoval výkon. Pokud výraz dotazu obsahuje vyhledávání, Power Apps se nejprve dotazuje na základní tabulku a pak provede druhý dotaz, který rozbalí první tabulku s vyhledávacími informacemi. Jedna další úroveň nad tuto hodnotu je podporována jako maximum. U offline scénářů je ale podporována pouze jedna úroveň rozbalení vyhledávání.
Rozbalte nebo spojte až 20 entit v jednom dotazu. Pokud potřebujete spojit více než 20 tabulek v jednom dotazu, zkuste vytvořit zobrazení na datovém serveru, pokud je to možné.
Vyhodnocení výrazu - vlastnost entity musí být na levé straně 'LHS' operátoru rovnosti
Umístěte vlastnost entity, která má být porovnána, na levou stranu rovnice (LHS). Například v následujícím výrazu vlastnost entity 'ID organizační jednotky'.Name je na LHS a výraz funguje:
Filter(
Budgets,
'Business unit ID'.Name = LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name,
DataCardValue37.Selected.'Date Range String'='Date Range String'
)
Ale tento výraz nefunguje:
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 nezahrnuje další operátory nebo funkce.
Agregační funkce
Některé agregační funkce je možné delegovat na základě back-endové podpory. Funkce jako Sum, Average, Min a Max je možné delegovat. Funkce počtu, jako CountRows a Count, lze také delegovat. Ale RemoveIf a UpdateIf mají omezení delegování. Delegování těchto funkcí podporuje pouze omezený počet zdrojů dat. Další informace získáte v Seznamu delegování.
Nedelegovatelné funkce
Žádné další funkce nelze delegovat, včetně těchto důležitých funkcí:
Nedelegovatelné limity
Vzorce, které nejdou delegovat, se zpracují místně. Místní zpracování umožňuje používat celý jazyk vzorců Power Apps. 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íť. Tento proces může nějakou dobu trvat a aplikace se může zdát 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 omezení umožňuje zcela použít malé datové sady a upřesnit použití velkých datových sad zobrazením částečných výsledků.
Při používání této funkce buďte opatrní, protože může uživatele zmást. Pokud například používáte funkci Filter se vzorcem výběru, který nejde delegovat, a zdroje dat obsahujícího více než milion záznamů, načte se jen 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í. Pokud například použijete funkci Average pro sloupec ve stejném zdroji dat s milionem záznamů, nelze funkci Average delegovat, protože výraz není delegován (viz předchozí poznámka). Zprůměruje se pouze prvních 500 záznamů. Pokud si nedáte pozor, uživatel si může myslet, že částečná odpověď je úplná.
Změna limitu
Výchozí počet záznamů je 500. 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 pro váš scénář stačí 2 000 (nebo 1 000 nebo 1 500) záznamů. Tento počet můžete zvýšíte, aby vyhovoval vašim potřebám, ale když to uděláte, může se snížit výkon vaší aplikace, zejména u širokých tabulek s mnoha sloupci. Stále je nejlepší delegovat co nejvíce.
Aby vaše aplikace zvládala velké datové sady, nastavte tuto hodnotu 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í
Power Apps zobrazí upozornění (žlutý trojúhelník), když vytvoříte vzorec, který nelze delegovat. To usnadňuje zjištění, co je a co není delegováno.
Upozornění delegování se zobrazují pouze u vzorců, které pracují s delegovatelnými zdroji dat. Pokud upozornění nevidíte a máte pocit, že se váš vzorec nedeleguje 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 získat informace o tom, 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 použíává 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 chcete 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 konkrétnějším hledaným termínem. Pro zjednodušení odeberte volání funkce SortByColumns.
Nové výsledky budou zahrnovat „Apples“, ale ne „Pineapple“. Žlutý trojúhelník se zobrazí vedle galerie a v miniatuře obrazovky, pokud se na levém navigačním panelu zobrazují miniatury. 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 Filter je delegovatelná funkce. Mid a Len se nedají však delegovat na žádný zdroj dat.
Ale funguje to, 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 je použita 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.