Princípy delegovania v aplikácii s plátnomUnderstand delegation in a canvas app

PowerApps obsahuje rôzne výkonné funkcie na filtrovanie, zoraďovanie a vytváranie tabuliek údajov v aplikáciách s plátnom: okrem iného to sú funkcie Filter, Sort a AddColumns.PowerApps includes a powerful set of functions for filtering, sorting, and shaping tables of data in a canvas app: Filter, Sort, and AddColumns functions to name just a few. Pomocou týchto funkcií môžete používateľom poskytnúť cielený prístup k informáciám, ktoré potrebujú.With these functions, you can provide your users with focused access to the information they need. Používateľom so znalosťou databáz môže používanie týchto funkcií pripomínať písanie databázového dotazu.For those with a database background, using these functions is the equivalent of writing a database query.

Kľúčom k vytváraniu efektívnych aplikácií je minimalizácia objemu údajov, ktoré sa prenášajú do zariadenia.The key to building efficient apps is to minimize the amount of data that must be brought to your device. Z mnohých miliónov záznamov možno potrebujete iba niekoľko. Tisíce záznamov môže zase reprezentovať iba jedna agregovaná hodnota.Perhaps you need only a handful of records from a sea of million, or a single aggregate value can represent thousands of records. Prípadne sa môže načítať iba prvá množina záznamov a zostávajúce množiny sa môžu načítať, keď používateľ naznačí, že záznamy potrebuje viac.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 svoju prácu zacielite, môžete výrazne znížiť výpočtový výkon, pamäť a šírku pásma siete, ktoré vaša aplikácia potrebuje. Výsledkom bude rýchlejšia odozva pre používateľa, dokonca aj v telefónoch pripojených prostredníctvom mobilnej siete.Being focused can dramatically reduce the processing power, memory, and network bandwidth that your app needs, resulting in snappier response times for your users, even on phones connected via a cellular network.

Delegovanie kombinuje výraznosť vzorcov PowerApps a potrebu minimalizovať údaje presúvané cez sieť.Delegation is where the expressiveness of PowerApps formulas meets the need to minimize data moving over the network. Stručne povedané, služba PowerApps bude delegovať spracovanie údajov na zdroj údajov a nebude presúvať údaje do aplikácie s cieľom lokálneho spracovania.In short, PowerApps will delegate the processing of data to the data source, rather than moving the data to the app for processing locally.

V tomto bode sa to však začína komplikovať, pretože nie všetko, čo je možné vyjadriť vzorcom PowerApps, môže byť delegované na všetky zdroje údajov.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. A práve s tým nám pomôže tento článok. Jazyk PowerApps napodobňuje jazyk excelových vzorcov, ktorý poskytuje úplný a okamžitý prístup k celému zošitu v pamäti a širokú škálu číselných funkcií a funkcií na manipuláciu s textom.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. Preto je jazyk PowerApps oveľa rozsiahlejší, než môže väčšina zdrojov údajov, vrátane výkonných databázových strojov, ako je napríklad SQL Server, podporovať.As a result, the PowerApps language is far richer than most data sources can support, including powerful database engines such as SQL Server.

Práca s veľkými množinami údajov vyžaduje používanie zdrojov údajov a vzorcov, ktoré je možné delegovať.Working with large data sets requires using data sources and formulas that can be delegated. Je to jediný spôsob, ktorý umožní, aby vaša aplikácia dobre fungovala a zaistila používateľom prístup ku všetkým potrebným informáciám.It's the only way to keep your app performing well and ensure users can access all the information they need. Všímajte si upozornenia týkajúce sa delegovania, ktoré označujú miesta, kde nie je možné delegovanie používať.Take heed of delegation warnings that identify places where delegation isn't possible. Ak pracujete s malými množinami údajov (menej než 500 záznamov), môžete použiť akýkoľvek zdroj údajov a vzorec, pretože ak vzorec nemôže byť delegovaný, aplikácia dokáže spracovať údaje lokálne.If you're working with small data sets (fewer than 500 records), you can use any data source and formula because the app can process data locally if the formula can't be delegated.

Poznámka

Upozornenia týkajúce sa delegovania boli v minulosti v službe PowerApps označované ako návrhy „s modrou bodkou“. V súčasnosti sú už návrhy delegovania preklasifikované ako upozornenia.Delegation warnings were previously flagged in PowerApps as "blue dot" suggestions, but delegation suggestions have since been re-classified as warnings. Ak údaje v zdroji údajov presiahnu 500 záznamov a funkciu nie je možné delegovať, služba PowerApps nebude schopná načítať všetky údaje a aplikácia môže používať nesprávne výsledky.If the data in your data source exceeds 500 records and a function can't be delegated, PowerApps might not be able to retrieve all of the data, and your app may have wrong results. Upozornenia týkajúce sa delegovania pomáhajú spravovať aplikáciu, aby používala správne výsledky.Delegation warnings help you manage your app so that it has correct results.

Zdroje údajov s možnosťou delegovaniaDelegable data sources

Ak chcete vidieť, ktoré všetky zdroje údajov podporujú delegovanie (a do akej miery), pozrite si zoznam delegovaní.See the delegation list for the full list of which data sources support delegation and to what extent.

Podporu delegovania pre existujúce zdroje údaje, rovnako ako ďalšie zdroje údajov, neustále pridávame.We are continuing to add delegation support to existing data sources, as well as add more data sources.

Importované zošity programu Excel (používajúce zdroj údajov „Pridanie štatistických údajov do aplikácie“), kolekcie a tabuľky uložené v kontextových premenných delegovanie 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šetky tieto údaje sú už v pamäti a môže sa použiť úplný jazyk PowerApps.All of this data is already in memory, and the full PowerApps language can be applied.

Funkcie s možnosťou delegovaniaDelegable functions

Ďalším krokom je použitie iba takých vzorcov, ktoré je možné delegovať.The next step is to use only those formulas that can be delegated. Tu sú uvedené prvky vzorcov, ktoré by mohli byť delegované.Included here are the formula elements that could be delegated. Každý zdroj údajov je však iný. Tieto prvky teda nemusia byť podporované všetkými zdrojmi údajov.However, every data source is different, and not all of them support all of these elements. Skontrolujte vzorec, či sa v ňom nevyskytujú upozornenia týkajúce sa delegovania.Check for delegation warnings in your particular formula.

Tieto zoznamy sa budú časom meniť.These lists will change over time. Pracujeme na podpore možnosti delegovania ďalších funkcií a operátorov.We're working to support more functions and operators with delegation.

Funkcie filtrovaniaFilter functions

Funkcie Filter, Search a LookUp je možné delegovať.Filter, Search, and LookUp can be delegated.

Vo funkciách Filter a LookUp môžete použiť nasledujúce operátory, aby ste v stĺpcoch tabuľky mohli vybrať príslušné záznamy:Within the Filter and LookUp functions, you can use these with columns of the table to select the appropriate records:

Môžete tiež použiť aj časti vzorca, ktoré sa vyhodnotia ako konštantná hodnota pre všetky záznamy.You can also use portions of your formula that evaluate to a constant value for all records. Vzorec Left( Language(), 2 ) napríklad nezávisí od žiadnych stĺpcov záznamu, preto vracia pre všetky záznamy rovnakú hodnotu.For example, Left( Language(), 2 ) doesn't depend on any columns of the record and, therefore, returns the same value for all records. Ide o konštantu.It's effectively a constant. Použitie kontextových premenných, kolekcií a signálov nemusí byť konštantné, preto bráni delegovaniu funkcií Filter a LookUp.Use of context variables, collections, and signals may not be constant and, therefore, will prevent Filter and LookUp from being delegated.

Predchádzajúci zoznam neobsahuje nasledovné významné položky:The previous list doesn't include these notable items:

Funkcie zoraďovaniaSorting functions

Funkcie Sort a SortByColumns je možné delegovať.Sort and SortByColumns can be delegated.

V prípade funkcie Sort môže byť vzorcom iba názov jedného stĺpca a nemôže zahŕňať ďalšie operátory alebo funkcie.In Sort, the formula can only be the name of a single column and can't include other operators or functions.

Agregačné funkcieAggregate functions

Funkcie Sum, Average, Min a Max je možné delegovať.Sum, Average, Min, and Max can be delegated. V súčasnosti je toto delegovanie podporované iba obmedzeným počtom zdrojov údajov. Podrobnosti nájdete v zozname delegovania.Only a limited number of data sources support this delegation at this time; check the delegation list for details.

Funkcie počítania, ako napríklad CountRows, CountA a Count, nie je možné delegovať.Counting functions such as CountRows, CountA, and Count can't be delegated.

Ďalšie agregačné funkcie, ako napríklad StdevP a VarP, nie je možné delegovať.Other aggregate functions such as StdevP and VarP can't be delegated.

Nedelegovateľné funkcieNon-delegable functions

Žiadne ďalšie funkcie delegovanie nepodporujú vrátane týchto dôležitých funkcií:All other functions don't support delegation, including these notable functions:

Na zlúčenie informácií z jednej tabuľky do inej sa bežne používajú funkcie AddColumns a LookUp. V slovníku databáz sa tomu obvykle vraví spojenie.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. Prí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 )

Aj keď môžu byť zdroje údajov Products a Suppliers delegovateľné a funkciu LookUp je možné delegovať, funkciu AddColumns delegovať nie je možné.Even though Products and Suppliers may be delegable data sources and LookUp is a delegable function, the AddColumns function isn't delegable. Výsledok celého vzorca bude obmedzený na prvú časť zdroja údajov Products.The result of the entire formula will be limited to the first portion of the Products data source.

Vzhľadom na to, že funkciu LookUp a jej zdroj údajov je možné delegovať, dá sa zhoda pre zdroj údajov Suppliers nájsť kdekoľvek v zdroji údajov, aj keď je veľký.Because the LookUp function and its data source are delegable, a match for Suppliers can be found anywhere in the data source, even if it's large. Potenciálnou nevýhodou je, že funkcia LookUp vykoná samostatné volania zdroja údajov pre každý z prvých záznamov v zdroji údajov Products a spôsobí tak množstvo šumu v sieti.A potential downside is that LookUp will make separate calls to the data source for each of those first records in Products, causing a lot of chatter on the network. Ak je zdroj údajov Suppliers dostatočne malý a často sa nemení, môžete ho zapísať do vyrovnávacej pamäte v aplikácii pomocou volania Collect pri spustení aplikácie (prostredníctvom OnVisible na úvodnej obrazovke) a použiť funkciu LookUp.If Suppliers is small enough and doesn't 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.

Obmedzenie plynúce z nemožnosti delegovaťNon-delegable limits

Vzorce, ktoré nie je možné delegovať, sa spracujú lokálne.Formulas that can't be delegated will be processed locally. Umožní sa tak použitie jazyka vzorcov PowerApps v jeho plnom rozsahu.This allows for the full breadth of the PowerApps formula language to be used. 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ť.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 nejaký čas trvať a aplikácia sa potom môže javiť ako pomalá alebo nereagujúca.That can take time, giving the impression that your app is slow or possibly crashed.

Aby sa tomu predišlo, PowerApps využíva obmedzenie množstva údajov na 500 záznamov (predvolená hodnota), ktoré je možné spracovať miestne.To avoid this, PowerApps imposes a limit on the amount of data that can be processed locally: 500 records by default. 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ť.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.

Pri použití týchto prostriedkov je potrebné dávať pozor, pre používateľov totiž môžu byť mätúce.Obviously care must be taken when using this facility because it can confuse users. Predstavte si napríklad použitie funkcie Filter so vzorcom výberu, ktorý nie je možné delegovať, a zdroje údajov s viac než miliónom záznamov.For example, consider a Filter function with a selection formula that can't be delegated, over a data source that contains a million records. Keďže filtrovanie sa vykonáva lokálne, prehľadá sa iba prvých 500 záznamov.Because the filtering is done locally, only the first 500 records are scanned. Ak je požadovaným záznamom záznam 501 alebo 500 001, funkcia Filter ho nevezme do úvahy ani nevráti.If the desired record is record 501 or 500,001, it isn't considered or returned by Filter.

Agregačné funkcie môžu tiež spôsobiť zmätok.Aggregate functions can also cause confusion. Použite funkciu Average na stĺpec rovnakého zdroja údajov s miliónom záznamov.Take Average over a column of that same million-record data source. Funkcia Average zatiaľ nemôže byť delegovaná, takže sa spriemeruje iba prvých 500 záznamov.Average can't yet be delegated, so only the first 500 records are averaged. Ak nebudete opatrní, používateľ vašej aplikácie by si mohol zameniť čiastočnú odpoveď za konečný výsledok.If you're not careful, a partial answer could be misconstrued as a complete answer by a user of your app.

Zmena limituChanging the limit

Predvolený počet záznamov je 500, ale v aplikácii je možné toto číslo zmeniť:500 is the default number of records, but you can change this number for an entire app:

  1. Na karte Súbor vyberte položku Nastavenia aplikácie.On the File tab, select App settings.
  2. V časti Experimentálne funkcie môžete zmeniť nastavenie Limit riadkov s údajmi pre nedelegovateľné dotazy na hodnoty od 1 do 2 000.Under Experimental features, change the Data row limit for non-delegable queries setting from 1 to 2000.

V niektorých prípadoch budete vedieť, že 2 000 (alebo 1 000 či 1 500) bude vyhovovať vašim potrebám.In some cases, you'll know that 2,000 (or 1,000 or 1,500) will satisfy the needs of your scenario. Tento počet môžete opatrne zvýšiť, aby vám vyhovoval.With care, you can increase this number to fit your scenario. 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.As you increase this number, your app's performance may degrade, especially for wide tables with lots of columns. Najlepšie riešenie je stále delegovať všetko, čo môžete.Still, the best answer is to delegate as much as you can.

Na to, aby vaša aplikácia zvládala veľké množiny údajov, znížte toto nastavenie na 1.To ensure that your app can scale to large data sets, reduce this setting down to 1. Všetko, čo sa nedá delegovať, vráti iba jeden záznam, čo by sa malo pri testovaní aplikácie jednoducho zistiť.Anything that can't be delegated returns a single record, which should be easy to detect when testing your app. Vďaka tomu sa dá vyhnúť nečakaným udalostiam pri pokuse dať testovací koncept aplikácie do produkčného prostredia.This can help avoid surprises when trying to take a proof-of-concept app to production.

Upozornenia týkajúce sa delegovaniaDelegation warnings

S cieľom zjednodušiť prehľad toho, čo je a nie je delegované, poskytuje služba PowerApps upozornenie (žltý trojuholník) pri vytvorení vzorca, ktorý obsahuje nedelegovateľnú časť.To make it easier to know what is and isn't being delegated, PowerApps provides warning (yellow triangle) when you create a formula that contains something that can't be delegated.

Upozornenia týkajúce sa delegovania sa zobrazujú iba vedľa vzorcov, ktoré pracujú s delegovateľnými zdrojmi údajov.Delegation warnings appear only on formulas that operate on delegable data sources. Ak upozornenie nevidíte a máte pocit, že sa váš vzorec nedeleguje správne, skontrolujte typ zdroja údajov v zozname delegovateľných zdrojov údajov, ktorý je uvedený vyššie v tejto téme.If you don't see a warning and you believe your formula isn't being properly delegated, check the type of data source against the list of delegable data sources earlier in this topic.

PríkladyExamples

V tomto príklade sa automaticky vygeneruje aplikácia s tromi obrazovkami založená na tabuľke SQL Servera s názvom [dbo].[Fruit].For this example, you'll automatically generate a three-screen app based on a SQL Server table named [dbo].[Fruit]. Informácie o vytváraní aplikácie získate po uplatnení podobných princípov ako v téme o službe Common Data Service for Apps a SQL Serveri.For information about how to generate the app, you can apply similar principles in the topic about Common Data Service for Apps to SQL Server.

Aplikácia s tromi obrazovkami

Vlastnosť Items ovládacieho prvku Gallery (Galéria) je nastavená na vzorec, ktorý obsahuje funkcie SortByColumns a Search. Obe funkcie je možné delegovať.The gallery's Items property is set to a formula that contains SortByColumns and Search functions, both of which can be delegated.

Do vyhľadávacieho poľa zadajte výraz "Apple".In the search box, type "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.Marching dots appear momentarily near the top of the screen as the app communicates with SQL Server to process the search request. 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.All records that meet the search criteria appear, even if the data source contains millions of records.

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

Výsledky hľadania budú obsahovať výrazy Apples, Crab apples a Pineapple pretože funkcia Search vyhľadáva v celom textovom stĺpci.The search results include "Apples", "Crab apples", and "Pineapple" because the Search function looks everywhere in a text column. Ak chcete vyhľadať iba záznamy, ktoré obsahujú vyhľadávaný výraz na začiatku názvu ovocia, môžete použiť inú delegovateľnú funkciu Filter a zadať zložitejší výraz na vyhľadávanie.If you wanted to find only records that contain the search team at the start of the fruit's name, you can use another delegable function, Filter, with a more complicated search term. (Pre jednoduchosť odstráňte volanie SortByColumns.)(For simplicity, remove the SortByColumns call.)

Odstránenie volania SortByColumns

Nové výsledky obsahujú výrazy Apples, ale nie Crab apples ani Pineapple.The new results include "Apples" but not "Crab apples" or "Pineapple". 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.However, a yellow triangle appears next to the gallery (and in the screen thumbnail if the left navigation bar shows thumbnails), and a blue, wavy line appears under a portion of the formula. Každý z týchto prvkov označuje upozornenie.Each of these elements indicate a warning. Po ukázaní na žltý trojuholník vedľa galérie sa zobrazí toto hlásenie:If you hover over the yellow triangle next to the gallery, this message appears:

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

SQL Server je delegovateľný zdroj údajov a funkcia Filter je delegovateľnou funkciou, avšak funkcie Mid a Len nemôžu byť delegované do žiadneho zdroja údajov.SQL Server is a delegable data source, and Filter is a delegable function, However, Mid and Len can't be delegated to any data source.

Ale to fungovalo, alebo nie?But it worked, didn't it? Tak trochu.Well, kind of. A to je dôvod, prečo ide o upozornenie a nie o označenie červenou vlnovkou.And that is why this is a warning and not a red, wavy squiggle.

  • Ak tabuľka obsahuje menej ako 500 záznamov, vzorec je správny.If the table contains fewer than 500 records, the formula worked perfectly. Všetky záznamy sa preniesli do zariadenia a funkcia Filter sa použila lokálne.All records were brought to the device, and Filter was applied locally.
  • 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.If the table contains more than 500 records, the formula won't return record 501 or higher, even if it matches the criteria.