Principy delegováníUnderstand delegation

PowerApps obsahuje sadu výkonných funkcí pro filtrování, řazení a vytváření tabulek dat: mimo jiné to jsou funkce Filter, Sort a AddColumns.PowerApps includes a powerful set of functions for filtering, sorting, and shaping tables of data: Filter, Sort, and AddColumns functions to name just a few. Pomocí těchto funkcí můžete uživatelům poskytnout cílený přístup k informacím, které potřebují.With these functions, you can provide your users with focused access to the information they need. Uživatelům se znalostí databází může používání těchto funkcí připomínat psaní databázového dotazu.For those with a database background, using these functions is the equivalent of writing a database query.

Klíčem k vytváření efektivních aplikací je minimalizace objemu dat, která se přenáší do zařízení.The key to building efficient apps is to minimize the amount of data that needs to be brought to your device. Z mnoha milionů záznamů je potřeba možná jen několik. Tisíce záznamů může zase představovat jen jedna agregovaná hodnota.Perhaps only a handful of records from a sea of millions are needed, or a single aggregate value can represent thousands of records. Nebo se může načíst pouze první sada záznamů a zbylé sady se mohou načíst, když uživatel naznačí, že záznamů potřebuje více.Or perhaps only the first set of records can be retrieved, and the rest brought in as the user gestures that they want more. Tím, že svou práci zacílíte, můžete výrazně snížit výpočetní výkon, paměť a šířku pásma sítě, které vaše aplikace potřebuje. Výsledkem bude rychlejší odezva pro uživatele, dokonce i na telefonech připojených prostřednictvím mobilní sítě.Being focused can dramatically reduce the processing power, memory, and network bandwidth needed by your app, resulting in snappier response times for your users, even on phones connected via a cellular network.

Delegování kombinuje výraznost vzorců PowerApps a potřebu minimalizovat data přesouvaná přes síť.Delegation is where the expressiveness of PowerApps formulas meets the need to minimize data moving over the network. Stručně řečeno to znamená, že PowerApps bude delegovat zpracování dat na zdroj dat a nebude přesunovat data do aplikace za účelem místního zpracování.In short, it means that PowerApps will delegate the processing of data to the data source, rather than moving the data to the app for processing locally.

Tady se to však začíná komplikovat, protože ne vše, co lze vyjádřit vzorcem PowerApps, může být delegováno na všechny zdroje dat. A právě s tím nám pomůže tento článek.Where this becomes complicated, and the reason this article exists, is because not everything that can be expressed in a PowerApps formula can be delegated to every data source. Jazyk PowerApps napodobuje jazyk excelových vzorců, který poskytuje úplný a okamžitý přístup k celému sešitu v paměti a širokou škálu číselných funkcí a funkcí pro manipulaci s textem.The PowerApps language mimics Excel's formula language, designed with complete and instant access to a full workbook in memory, with a wide variety of numerical and text manipulation functions. Proto je jazyk PowerApps mnohem rozsáhlejší, než může většina zdrojů dat, včetně výkonných databázových strojů, jako je třeba SQL Server, podporovat.As a result, the PowerApps language is far richer than most data sources can support, including powerful database engines such as SQL Server.

Práce s velkými sadami dat vyžaduje použití zdrojů dat a vzorců, které je možné delegovat.Working with large data sets requires using data sources and formulas that can be delegated. 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.It is the only way to keep your app performing well and ensure users can access all the information they need. Věnujte pozornost návrhům s modrou tečkou označujícím místa, kde není delegování možné.Take heed of blue-dot suggestions that flag places where delegation is not possible. 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, zpracování může probíhat místně.If you're working with small data sets (less than 500 records), you can use any data source and formula as processing can be done locally if the formula cannot be delegated.

Zdroje dat s možností delegováníDelegable data sources

Pokud chcete vidět, které všechny zdroje dat podporují delegování (a do jaké míry), podívejte se na seznam delegování.See the delegation list for the full list of which data sources support delegation and to what extent.

Podporu delegování pro stávající zdroje dat, stejně jako další zdroje dat, neustále přidáváme.We are continuing to add delegation support to existing data sources, as well as add more data sources.

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í.Imported Excel workbooks (using the "Add static data to your app" data source), collections, and tables stored in context variables don't require delegation. Všechna tato data jsou již v paměti a může se použít úplný jazyk PowerApps.All of this data is already in memory, and the full PowerApps language can be applied.

Funkce s možností delegováníDelegable functions

Dalším krokem je použití pouze takových vzorců, které je možné delegovat.The next step is to use only those formulas that can be delegated. Zde jsou uvedené prvky vzorců, které by mohly být delegovány.Included here are the formula elements that could be delegated. Každý zdroj dat je ale jiný. Tyto prvky tedy nemusí být podporovány všemi zdroji dat.However, every data source is different, and not all of them support all of these elements. U konkrétního vzorce hledejte návrhy s modrou tečkou.Check for blue-dot suggestions in your particular formula.

Tyto seznamy se budou průběžně měnit.These lists will change over time. Pracujeme na podpoře delegování u dalších funkcí a operátorů.We're working to support more functions and operators with delegation.

Funkce filtrováníFilter functions

Funkce Filter, Search a LookUp je možné delegovat.Filter, Search, and LookUp can be delegated.

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:Within the Filter and LookUp functions, the following can be used with columns of the table to select the appropriate records:

Je možné použít i části vzorce, které se vyhodnotí jako konstantní hodnota pro všechny záznamy.Portions of your formula that evaluate to a constant value for all records can also be used. Například Left( Language(); 2 ) nezávisí na žádných sloupcích záznamu, a proto vrací pro všechny záznamy stejnou hodnotu.For example, Left( Language(), 2 ) does not depend on any columns of the record and therefore returns the same value for all records. Jedná se o konstantu.It is effectively a constant. Použití kontextových proměnných, kolekcí a signálů nemusí být konstantní a proto brání delegování funkcí Filter a LookUp.Use of context variables, collections, and signals may not be constant and therefore will prevent Filter and LookUp from being delegated.

V seznamu výše chybí některé důležité položky:Some notable items missing from the above list:

Funkce řazeníSorting functions

Funkce Sort a SortByColumns je možné delegovat.Sort and SortByColumns can be delegated.

U funkce Sort může být vzorcem pouze název jednoho sloupce a nemůže zahrnovat další operátory nebo funkce.In Sort, the formula can only be the name of a single column and can't include other operators or functions.

Agregační funkceAggregate functions

Funkce Sum, Average, Min a Max je možné delegovat.Sum, Average, Min, and Max can be delegated. V současné době je toto delegování podporováno pouze omezeným počtem zdrojů dat. Další podrobnosti najdete v seznamu delegování.Only a limited number of data sources support this delegation at this time, check the delegation list for more details.

Funkce počtu, jako například CountRows, CountA a Count, není možné delegovat.Counting functions such as CountRows, CountA, and Count cannot be delegated.

Další agregační funkce, jako například StdevP a VarP, není možné delegovat.Other aggregate functions such as StdevP and VarP cannot be delegated.

Jiné funkceOther functions

Žádné další funkce delegování nepodporují, včetně těchto důležitých funkcí:All other functions do not support delegation, including these notable functions:

Ke sloučení informací z jedné tabulky do jiné se běžně používají funkce AddColumns a LookUp, běžně se tomu v databázové hantýrce říká spojení.A common pattern is to use AddColumns and LookUp to merge information from one table into another, commonly referred to as a Join in database parlance. Příklad:For example:

AddColumns( Products; "Supplier Name"; LookUp( Suppliers; Suppliers.ID = Product.SupplierID ).Name )AddColumns( Products, "Supplier Name", LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name )

I když mohou být zdroje dat Products a Suppliers delegovatelné a funkce LookUp je delegovatelnou funkcí, funkci AddColumns delegovat nejde.Even though Products and Suppliers may be delegable data sources and LookUp is a delegable function, the AddColumns function is not delegable. Výsledek celého vzorce bude omezen na první část zdroje dat Products.The result of the entire formula will be limited to the first portion of the Products data source.

Vzhledem k tomu, že funkci LookUp a její zdroj dat je možné delegovat, dá se shoda pro zdroj dat Suppliers najít kdekoli ve zdroji dat, i když je velký.Since the LookUp and its data source are delegable, a match for Suppliers can be found anywhere in the data source, even if it is large. Potenciální nevýhodou je, že funkce LookUp provede samostatná volání zdroje dat pro každý z těchto prvních záznamů ve zdroji dat Products a způsobí tak spoustu šumu v síti.A potential downside is that LookUp will made separate calls to the data source for each of those first records in Products, causing a lot of chatter on the network. Pokud je zdroj dat Suppliers dostatečně malý a často se nemění, můžete ho zapsat do mezipaměti v aplikaci pomocí volání Collect při spuštění aplikace (prostřednictvím OnVisible na úvodní obrazovce) a použít funkci LookUp.If Suppliers is small enough and does not change often, you could cache the data source in your app with a Collect call when the app starts (using OnVisible on the opening screen) and do the LookUp to it instead.

Omezení plynoucí z nedelegovatelnostiNon-delegable limits

Vzorce, které nejdou delegovat, se zpracují místně.Formulas that cannot be delegated will be processed locally. Umožní se tak použití jazyka vzorců PowerApps v jeho plném rozsahu.This allows for the full breadth of the PowerApps formula language to be used. 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íť.But at a price: all the data must be brought to the device first, which could involve retrieving a large amount of data over the network. To může nějakou dobu trvat a aplikace se pak může jevit jako pomalá nebo nereagující.That can take time, giving the impression that your app is slow or possibly hung.

Abychom tomu předešli, má aplikace PowerApps omezení týkající se množství dat, které lze zpracovat místně. Je to 500 záznamů.To avoid this, PowerApps imposes a limit on the amount of data that can be processed locally: 500 records. 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.We chose this number so that you would still have complete access to small data sets and you would be able to refine your use of large data sets by seeing partial results.

Při použití těchto prostředků je potřeba dávat pozor, pro uživatele totiž mohou být matoucí.Obviously care must be taken when using this facility as it can be confusing for users. Představte si třeba použití funkce Filter se vzorcem výběru, který nejde delegovat, a zdroje dat s více než milionem záznamů.For example, consider a Filter function with a selection formula that cannot be delegated, over a million record data source. Vzhledem k tomu, že filtrování se bude provádět místně, prohledá se jenom prvních 500 záznamů z milionu.Since the filtering will be done locally, only the first 500 records of the million records will be scanned. Pokud je požadovaným záznamem záznam 501 nebo 500 001, funkce Filter ho nevezme v potaz ani nevrátí.If the desired record is record 501, or 500,001, it will not be considered or returned by Filter.

Dalším takovým případem, kde může dojít k podobnému problému, jsou agregační funkce.Another place where this can be confusing is aggregate functions. Použijte funkci Average na sloupec toho stejného zdroje dat s milionem záznamů.Take Average over a column of that same million record data source. Vzhledem k tomu, že funkci Average nejde delegovat, zprůměruje se jenom prvních 500 záznamů.Since Average cannot yet be delegated, only the first 500 records will be averaged. Je třeba dávat pozor, protože uživatel vaší aplikace by mohl zaměnit částečnou odpověď za konečný výsledek.Care must be taken or a partial answer could be misconstrued as a complete answer by a user of your app.

Návrhy s modrou tečkouBlue dot suggestions

Aby bylo snadnější zjistit, co se dá a co se nedá delegovat, poskytuje prostředí pro vytváření návrhy s modrou tečkou u vzorců obsahujících jakékoli položky, které není možné delegovat.To make it easier to know what is and is not being delegated, the authoring experience provides blue dot suggestions when a formula contains something that cannot be delegated.

Modré tečky se zobrazují pouze u vzorců, které pracují s delegovatelnými zdroji dat.Blue dots are only shown on formulas that operate on delegable data sources. Pokud modrou tečku 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.If you don't see a blue dot and you believe your formula is not being properly delegated, check the type of data source against the list of delegable data sources above.

PříkladyExamples

V tomto příkladu použijeme tabulku SQL Serveru, která obsahuje produkty (zejména ovoce), s názvem [dbo].[Products].In this example, we will use a SQL Server table that contains products, in particular fruits, names [dbo].[Products]. Aplikace PowerApps může na nové obrazovce vytvořit základní aplikaci se třemi obrazovkami připojenou k tomuto zdroji dat:On the New screen, PowerApps can create a basic three screen app connected to this data source:

Aplikace se třemi obrazovkami

Všimněte si vzorce pro vlastnost Items ovládacího prvku Galerie.Note the formula for the Gallery's Items property. Používá funkce SortByColumns a Search. Obě tyto funkce se dají delegovat.It is using SortByColumns and Search functions, both of which can be delegated.

Do ovládacího prvku pro hledání textového vstupu zadejme Apple.Let's type "Apple" into the search text-input control. Pokud budeme pozorní, všimneme si během hledání nového vstupu běžících teček v horní části obrazovky.If we are very observant, we will momentarily see marching dots on the top of the screen while the new entry in the new search is processed. Tyto tečky značí, že komunikujeme s SQL Serverem:The marching dots indicate that we are communicating with the SQL Server:

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

Vzhledem k tomu, že všechny tyto položky jsou delegovatelné, podaří se nám najít úplně vše, i kdyby tabulka [dbo].[Products] obsahovala miliony záznamů. Můžeme je procházet po stránkách v galerii a uživatel se může ve výsledcích posunovat.Because this is all delegable, even if the [dbo].[Products] table contains millions of records, we will still find them all, paging through them in the gallery as the user scrolls through the results.

Všimněte si, že vidíme shodu pro „Apple“ i „Pineapple“.You will notice that we are seeing a match for both "Apple" and "Pineapple". Funkce Search totiž vyhledá hledaný termín kdekoli v textovém sloupci.The Search function will find a search term anywhere in a text column. Můžeme ale třeba chtít hledaný termín najít jenom na začátku názvu ovoce.If instead, let's say we wanted to only find the search term at the beginning of the fruit's name. Potom můžeme použít jinou delegovatelnou funkci – Filter – se složitějším hledaným termínem (pro jednoduchost odebereme volání SortByColumns):We can use another delegable function, Filter, with a more complicated search term (for simplicity we'll remove the SortByColumns call):

Odebrání volání SortByColumns

Zdá se, že to funguje. Správně se nyní zobrazují pouze Apples, Pineapple teď nevidíme.This appears to be working, only "Apples" is correctly showing now and "Pineapple" is not. Vedle galerie se ale zobrazuje modrá tečka a pod částí vzorce je modrá vlnovka.However, there is a blue dot showing next to the gallery and there is a blue wavy line under a portion of the formula. Modrá tečka se dokonce zobrazuje i na miniatuře obrazovky.There is even a blue dot showing in the screen thumbnail. Pokud na modrou tečku vedle galerie najedeme myší, uvidíme toto:If we hover over the blue dot next to the gallery, we see the following:

Najetí myší na modrou tečku

I když používáme funkci Filter, což je delegovatelná funkce, s SQL serverem, což je delegovatelný zdroj dat, vzorec použitý ve funkci Filter delegovatelný není.Although we are using Filter which is a delegable function, with SQL Server which is a delegable data source, the formula we used within Filter is not delegable. Mid a Len se nedají delegovat na žádný zdroj dat.Mid and Len cannot be delegated to any data source.

Ale fungovalo to nebo ne?But it worked, didn't it? Tak trochu.Well, kind of. A proto se tu zobrazuje modrá tečka, nikoli žlutá ikona nebezpečí nebo červená vlnovka chyby.And that is why this is a blue dot instead of a yellow hazard icon and red wavy error. Pokud tabulka [dbo].[Products] obsahovala méně než 500 záznamů, potom to fungovalo perfektně.If the [dbo].[Products] table contains less than 500 records, then yes, this worked perfectly. Všechny záznamy se přenesly do zařízení a funkce Filter se použila místně.All records were brought to the device and the Filter was applied locally.

Pokud by ale tato tabulka obsahovala více než 500 záznamů, potom by se v galerii zobrazilo pouze ovoce začínající řetězcem Apple v prvních 500 záznamech tabulky.If instead this table contains more than 500 records, then only fruit which begin with "Apple" in the first 500 records of the table will be displayed in the gallery. Pokud se název Apple, Fuji zobrazuje v záznamu 501 nebo 500 001, nebude nalezen.If "Apple, Fuji" appears as a name in record 501 or 500,001 it will not be found.