DelegeringUnderstand delegation

PowerApps bevat een krachtige set functies voor het filteren, sorteren en structureren van gegevenstabellen: Filter, Sort en AddColumns om er maar een paar te noemen.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. Met behulp van deze functies kunt u uw gebruikers gerichte toegang bieden tot de informatie die zij nodig hebben.With these functions, you can provide your users with focused access to the information they need. Voor lezers met een databaseachtergrond is het gebruiken van deze functies vergelijkbare met het schrijven van een databasequery.For those with a database background, using these functions is the equivalent of writing a database query.

De sleutel voor het maken van efficiënte apps is om de hoeveelheid gegevens te minimaliseren die moet worden overgebracht naar een apparaat.The key to building efficient apps is to minimize the amount of data that needs to be brought to your device. Misschien zijn er slechts enkele records uit de totale hoeveelheid van miljoenen records nodig of kan één cumulatieve waarde duizenden records vertegenwoordigen.Perhaps only a handful of records from a sea of millions are needed, or a single aggregate value can represent thousands of records. Het kan ook voldoende zijn om alleen de eerste set records op te halen en de rest pas als de gebruiker daar om vraagt.Or perhaps only the first set of records can be retrieved, and the rest brought in as the user gestures that they want more. Een goede focus kan betekenen dat uw app aanzienlijk minder verwerkingskracht, geheugen en netwerkbandbreedte nodig heeft. Het resultaat hiervan is dat de responstijden voor uw gebruikers laag zijn, zelfs op telefoons die zijn verbonden via een mobiel netwerk.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.

Delegering is waar de expressiviteit van PowerApps-formules en de behoefte om zo min mogelijk gegevens via het netwerk te verplaatsen bij elkaar komen.Delegation is where the expressiveness of PowerApps formulas meets the need to minimize data moving over the network. Kort gezegd betekent het dat PowerApps de verwerking van gegevens delegeert aan de gegevensbron, in plaats van de gegevens voor lokale verwerking naar de app te verplaatsen.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.

Waar het ingewikkeld wordt, en wat de bestaansreden is voor dit artikel, is dat niet alles dat kan worden uitgedrukt in een PowerApps-formule aan iedere gegevensbron kan worden gedelegeerd.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. De PowerApps-taal imiteert de formuletaal van Excel, die is ontworpen op basis van volledige en directe toegang tot een complete werkmap in het geheugen, met een grote verscheidenheid aan functies voor het manipuleren van numerieke waarden en tekst.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. Als gevolg hiervan is de PowerApps-taal veel uitgebreider dan de meeste gegevensbronnen aankunnen, met inbegrip van krachtige database-engines zoals SQL Server.As a result, the PowerApps language is far richer than most data sources can support, including powerful database engines such as SQL Server.

Het werken met grote gegevenssets vereist gegevensbronnen en formules die kunnen worden gedelegeerd.Working with large data sets requires using data sources and formulas that can be delegated. Dit is de enige manier om ervoor te zorgen dat uw app goed blijft presteren en gebruikers toegang hebben tot alle informatie die zij nodig hebben.It is the only way to keep your app performing well and ensure users can access all the information they need. Let goed op blauwe stippen met suggesties. Deze stippen geven aan dat delegering op die plaats niet mogelijk is.Take heed of blue-dot suggestions that flag places where delegation is not possible. Als u werkt met kleine gegevenssets (minder dan 500 records), kunt u elke gegevensbron en formule gebruiken aangezien de verwerking lokaal kan plaatsvinden als de formule niet kan worden gedelegeerd.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.

Delegeerbare gegevensbronnenDelegable data sources

Zie dit overzicht voor een volledige lijst van de gegevensbronnen die delegering ondersteunen en in welke mate.See the delegation list for the full list of which data sources support delegation and to what extent.

Het is wel zo dat er regelmatig ondersteuning voor delegering wordt toegevoegd aan bestaande gegevensbronnen, plus dat er steeds meer gegevensbronnen bijkomen.We are continuing to add delegation support to existing data sources, as well as add more data sources.

Er is geen delegering nodig voor geïmporteerde Excel-werkmappen (via de gegevensbron 'Statische gegevens toevoegen aan uw app'), verzamelingen en tabellen die zijn opgeslagen in contextvariabelen.Imported Excel workbooks (using the "Add static data to your app" data source), collections, and tables stored in context variables don't require delegation. Al deze gegevens zijn al aanwezig in het geheugen en de PowerApps-taal kan maximaal worden toegepast.All of this data is already in memory, and the full PowerApps language can be applied.

Delegeerbare functiesDelegable functions

De volgende stap is om alleen de formules te gebruiken die kunnen worden gedelegeerd.The next step is to use only those formulas that can be delegated. Hier worden alle formule-elementen beschreven die kunnen worden gedelegeerd.Included here are the formula elements that could be delegated. Elke gegevensbron is echter anders en niet alle gegevensbronnen ondersteunen al deze elementen.However, every data source is different, and not all of them support all of these elements. Kijk of er in een bepaalde formule blauwe stippen met suggesties staan.Check for blue-dot suggestions in your particular formula.

Deze lijsten worden trouwens regelmatig bijgewerkt.These lists will change over time. We zijn bezig om voor meer functies en operatoren ondersteuning voor delegering aan te bieden.We're working to support more functions and operators with delegation.

FilterfunctiesFilter functions

Filter, Search en LookUp kunnen worden gedelegeerd.Filter, Search, and LookUp can be delegated.

Binnen de functies Filter en LookUp kunnen de volgende elementen worden gebruikt met kolommen van de tabel om de juiste records te selecteren:Within the Filter and LookUp functions, the following can be used with columns of the table to select the appropriate records:

Elementen van een formule die voor alle records een constante waarde opleveren, kunnen ook worden gebruikt.Portions of your formula that evaluate to a constant value for all records can also be used. Left (Language(), 2) is bijvoorbeeld niet afhankelijk van een kolom van de record en retourneert dus voor alle records dezelfde waarde.For example, Left( Language(), 2 ) does not depend on any columns of the record and therefore returns the same value for all records. Het is in feite een constante.It is effectively a constant. Het gebruik van contextvariabelen, verzamelingen en signalen is mogelijk niet constant en daarom kunnen Filter en LookUp niet worden gedelegeerd.Use of context variables, collections, and signals may not be constant and therefore will prevent Filter and LookUp from being delegated.

Er ontbreken enkele belangrijke items in de bovenstaande lijst:Some notable items missing from the above list:

SorteerfunctiesSorting functions

Sort en SortByColumns kunnen worden gedelegeerd.Sort and SortByColumns can be delegated.

Bij Sort kan de formule alleen bestaan uit de naam van één kolom. Bovendien kan de formule geen andere operatoren of functies bevatten.In Sort, the formula can only be the name of a single column and can't include other operators or functions.

Statistische functiesAggregate functions

Sum, Average, Min en Max kunnen worden gedelegeerd.Sum, Average, Min, and Max can be delegated. Op dit moment wordt deze delegering maar door een beperkt aantal gegevensbronnen ondersteund. Bekijk de delegeringslijst voor meer informatie.Only a limited number of data sources support this delegation at this time, check the delegation list for more details.

Optelfuncties, zoals CountRows, CountA en Count, kunnen niet worden gedelegeerd.Counting functions such as CountRows, CountA, and Count cannot be delegated.

Andere statistische functies, zoals StdevP en VarP , kunnen niet worden gedelegeerd.Other aggregate functions such as StdevP and VarP cannot be delegated.

Andere functiesOther functions

Alle andere functies bieden geen ondersteuning voor delegeringen, waaronder deze belangrijke functies:All other functions do not support delegation, including these notable functions:

Een veelgebruikte methode is om AddColumns en LookUp te gebruiken om gegevens uit de ene tabel samen te voegen in een andere tabel, iets wat in databasejargon een 'join' wordt genoemd.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. Bijvoorbeeld:For example:

  • AddColumns( Producten, "Naam leverancier", LookUp( Leveranciers, Suppliers.ID = Product.SupplierID ).Name )AddColumns( Products, "Supplier Name", LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name )

Hoewel Producten en Leveranciers delegeerbare gegevensbronnen kunnen zijn en LookUp een delegeerbare functie is, geldt dat niet voor de functie AddColumns.Even though Products and Suppliers may be delegable data sources and LookUp is a delegable function, the AddColumns function is not delegable. Het resultaat van de gehele formule wordt dan ook beperkt tot het eerste deel van de gegevensbron Producten.The result of the entire formula will be limited to the first portion of the Products data source.

Aangezien LookUp en de bijbehorende gegevensbron delegeerbaar zijn, kan er overal in de gegevensbron een overeenkomst worden gevonden voor Leveranciers, zelfs als het een grote gegevensbron is.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. Een mogelijk nadeel is dat LookUp voor elk van de eerste records in Producten afzonderlijke aanroepen naar de gegevensbron gebruikt, waardoor er nogal wat 'chatter' op het netwerk wordt veroorzaakt.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. Als de gegevensbron Leveranciers niet zo groot is en niet regelmatig verandert, zou u de gegevensbron bij het starten van de app met een aanroep van Collect kunnen cachen in de app. U gebruikt hiervoor OnVisible op het openingsscherm en voert dan LookUp uit op de gegevensbron in de cache.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.

Limiet voor delegeringNon-delegable limits

Formules die kunnen niet worden gedelegeerd, worden lokaal verwerkt.Formulas that cannot be delegated will be processed locally. Op deze manier is het mogelijk om alle functionaliteit van de formuletaal van PowerApps te benutten.This allows for the full breadth of the PowerApps formula language to be used. Hier zit echter wel een nadeel aan, namelijk dat alle gegevens eerst moeten worden overgebracht naar het apparaat. Dit kan betekenen dat er een grote hoeveelheid gegevens via het netwerk moet worden opgehaald.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. Dat kan even duren, waardoor het kan lijken dat uw app traag is of misschien zelfs is vastgelopen.That can take time, giving the impression that your app is slow or possibly hung.

Om dit te voorkomen, is er in PowerApps een limiet ingesteld voor de hoeveelheid gegevens die lokaal kunnen worden verwerkt: 500 records.To avoid this, PowerApps imposes a limit on the amount of data that can be processed locally: 500 records. We hebben dit aantal gekozen omdat u dan nog steeds volledige toegang hebt tot kleine gegevenssets, terwijl u het gebruik van grote gegevenssets kunt verfijnen door deelresultaten weer te geven.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.

Uiteraard moet hier voorzichtig mee om worden gegaan omdat het verwarrend kan zijn voor gebruikers.Obviously care must be taken when using this facility as it can be confusing for users. Laten we als voorbeeld de functie Filter nemen met een selectieformule die niet kan worden gedelegeerd, met een gegevensbron met een miljoen records.For example, consider a Filter function with a selection formula that cannot be delegated, over a million record data source. Aangezien het filter lokaal moet worden toegepast, worden alleen de eerste 500 records van het miljoen records gescand.Since the filtering will be done locally, only the first 500 records of the million records will be scanned. Als de gewenste record 501 is, of 500.001, wordt de record niet geretourneerd door Filter.If the desired record is record 501, or 500,001, it will not be considered or returned by Filter.

De ingestelde limiet kan ook verwarrend zijn als het gaat om statistische functies.Another place where this can be confusing is aggregate functions. Stel dat Average wordt toegepast op een kolom uit diezelfde gegevensbron met een miljoen records.Take Average over a column of that same million record data source. Aangezien Average nog niet kan worden gedelegeerd, wordt alleen het gemiddelde van de eerste 500 records geretourneerd.Since Average cannot yet be delegated, only the first 500 records will be averaged. Voorzichtigheid is dus geboden omdat anders een deelresultaat onterecht als een volledig resultaat wordt geïnterpreteerd door een gebruiker van uw app.Care must be taken or a partial answer could be misconstrued as a complete answer by a user of your app.

Blauwe stippen met suggestiesBlue dot suggestions

Om duidelijk te maken wat wel en wat niet kan worden gedelegeerd, worden in de interface blauwe stippen met suggesties weergegeven wanneer een formule een element bevat dat niet kan worden gedelegeerd.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.

Blauwe stippen worden alleen weergegeven in formules die worden toegepast op delegeerbare gegevensbronnen.Blue dots are only shown on formulas that operate on delegable data sources. Als u geen blauwe stip ziet en u denkt dat de formule niet correct wordt gedelegeerd, controleert u het type van de gegevensbron in de lijst met delegeerbare gegevensbronnen hierboven.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.

VoorbeeldenExamples

In dit voorbeeld gebruiken we een SQL Server-tabel met producten, met name fruit, met de naam [dbo].[Products].In this example, we will use a SQL Server table that contains products, in particular fruits, names [dbo].[Products]. In het scherm Nieuw kunt u met PowerApps een eenvoudige app met drie schermen maken die is verbonden met deze gegevensbron:On the New screen, PowerApps can create a basic three screen app connected to this data source:

Kijk eens goed naar de formule voor de eigenschap Items van de galerie.Note the formula for the Gallery's Items property. Hierin worden de functies SortByColumns en Search gebruikt, die beide kunnen worden gedelegeerd.It is using SortByColumns and Search functions, both of which can be delegated.

We typen 'Apple' in het besturingselement voor het invoeren van zoektekst.Let's type "Apple" into the search text-input control. Als u heel goed oplet, ziet u boven aan het scherm bewegende stippen terwijl het nieuwe item in de nieuwe zoekopdracht wordt verwerkt.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. De stippen geven aan dat er communicatie is met SQL Server:The marching dots indicate that we are communicating with the SQL Server:

Aangezien alles hier delegeerbaar is, zelfs als de tabel [dbo].[Products] miljoenen records bevat, worden alle overeenkomende records gevonden en worden er pagina's uit de galerie weergegeven terwijl de gebruiker door de resultaten bladert.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.

U ziet dat er overeenkomsten zijn gevonden voor zowel 'Apple' als 'Pineapple'.You will notice that we are seeing a match for both "Apple" and "Pineapple". U kunt de functie Search gebruiken om een zoekterm overal in een tekstkolom te vinden.The Search function will find a search term anywhere in a text column. Het is ook mogelijk om een zoekterm alleen te vinden als die aan het begin van de naam van de vrucht staat.If instead, let's say we wanted to only find the search term at the beginning of the fruit's name. We gebruiken dan een andere delegeerbare functie, Filter, met een complexere zoekterm (voor het overzicht hebben we de aanroep naar SortByColumns weggelaten):We can use another delegable function, Filter, with a more complicated search term (for simplicity we'll remove the SortByColumns call):

Dit lijkt te werken, want nu wordt alleen 'Apples' weergegeven en 'Pineapple' niet meer.This appears to be working, only "Apples" is correctly showing now and "Pineapple" is not. Er wordt nu echter een blauwe stip weergegeven naast de galerie en een blauwe golflijn onder een gedeelte van de formule.However, there is a blue dot showing next to the gallery and there is a blue wavy line under a portion of the formula. De blauwe stip wordt zelfs weergegeven in de miniatuur van het scherm.There is even a blue dot showing in the screen thumbnail. Als we de blauwe stip naast de galerie aanwijzen, zien we het volgende:If we hover over the blue dot next to the gallery, we see the following:

Hoewel we een delegeerbare functie, Filter, gebruiken met een delegeerbare gegevensbron, SQL Server, is de formule die we hebben gebruikt in Filter niet delegeerbaar.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 en Len kunnen namelijk aan geen enkele gegevensbron worden gedelegeerd.Mid and Len cannot be delegated to any data source.

Maar het heeft wel gewerkt, toch?But it worked, didn't it? In zekere zin wel.Well, kind of. En om die reden zien we een blauwe stip en niet een geel gevaarpictogram en een rode golflijn om een fout aan te geven.And that is why this is a blue dot instead of a yellow hazard icon and red wavy error. Als de tabel [dbo].[Products] minder dan 500 records bevat, dan heeft de formule perfect gewerkt.If the [dbo].[Products] table contains less than 500 records, then yes, this worked perfectly. Alle records zijn dan overgebracht naar het apparaat en de functie Filter is lokaal toegepast.All records were brought to the device and the Filter was applied locally.

Als de tabel echter meer dan 500 records bevat, worden in de galerie alleen vruchten weergegeven waarvan de naam begint met 'Apple' uit de eerste 500 records van de tabel.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. Als 'Apple, Fuji' wordt weergegeven als een naam in record 501 of 500.001, wordt deze overeenkomst niet gevonden.If "Apple, Fuji" appears as a name in record 501 or 500,001 it will not be found.