Förstå delegeringUnderstand delegation

PowerApps innehåller en kraftfull uppsättning funktioner för filtrering, sortering och utformning av datatabeller: Filter, Sort och AddColumns är några av dessa.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. Med dessa funktioner kan du ge användarna fokuserad åtkomst till den information som krävs.With these functions, you can provide your users with focused access to the information they need. För personer som har använt databaser tidigare påminner dessa funktioner om att skriva en databasfråga.For those with a database background, using these functions is the equivalent of writing a database query.

Nyckeln till att skapa effektiva appar är att minska mängden data som behöver skickas till din enhet.The key to building efficient apps is to minimize the amount of data that needs to be brought to your device. Det är möjligt att endast en handfull poster av flera miljoner eller ett enda samlat värde kan representera tusentals poster.Perhaps only a handful of records from a sea of millions are needed, or a single aggregate value can represent thousands of records. Eller det kanske bara är den första uppsättningen poster som kan hämtas och resten kan hämtas om användaren begär det.Or perhaps only the first set of records can be retrieved, and the rest brought in as the user gestures that they want more. Ökat fokus kan minska din apps behov av processorkraft, minne och bandbredd, vilket ger snabbare svarstid för användarna, även om de använder telefoner som är anslutna via mobilnä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.

Med Delegering uppfyller PowerApps formler behovet av minimera mängden data som flyttas i nätverket.Delegation is where the expressiveness of PowerApps formulas meets the need to minimize data moving over the network. Kort sagt innebär det att PowerApps delegerar bearbetningen av data till datakällan i stället för bearbeta dem lokalt i appen.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.

Där detta blir komplicerad, och det är därför den här artikeln finns, beror det på att allt som kan uttryckas i en PowerApps-formel inte kan delegeras till varje datakälla.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. PowerApps språk imiterar Excels formelspråk, med fullständig och omedelbar åtkomst till en fullständig arbetsbok i minnet och en mängd olika funktioner för bearbetning av text och siffror.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. Därför är PowerApps språket mycket rikare än de flesta datakällor kan stödja, inklusive kraftfulla databasprogram som 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.

Arbete med stora datamängder kräver datakällor och formler som kan delegeras.Working with large data sets requires using data sources and formulas that can be delegated. Det är det enda sättet att säkerställa att din app fungerar bra och se till att användare kan komma åt den information de behöver.It is the only way to keep your app performing well and ensure users can access all the information they need. Var uppmärksam på förslag med blå punkt som markerar platser där delegering inte är möjligt.Take heed of blue-dot suggestions that flag places where delegation is not possible. Om du arbetar med små datauppsättningar (färre än 500 poster) kan du använda valfri datakälla och formel eftersom bearbetning kan ska lokalt om formeln inte kan delegeras.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.

Delegerbara datakällorDelegable data sources

Se delegeringslista för den fullständiga listan med de datakällor som stöder delegering och i vilken utsträckning.See the delegation list for the full list of which data sources support delegation and to what extent.

Vi fortsätter att lägga till stöd för delegering för befintliga datakällor och vi lägger kontinuerligt till fler datakällor.We are continuing to add delegation support to existing data sources, as well as add more data sources.

Importerade Excel-arbetsböcker (med datakällan "Lägg till statiska data till din app"), samlingar och tabeller som lagras i kontextvariabler kräver inte delegering.Imported Excel workbooks (using the "Add static data to your app" data source), collections, and tables stored in context variables don't require delegation. Alla dessa data används redan i minnet och det fullständiga PowerApps-språket kan användas.All of this data is already in memory, and the full PowerApps language can be applied.

Funktioner som kan delegerasDelegable functions

Nästa steg är att endast använda de formler som kan delegeras.The next step is to use only those formulas that can be delegated. Här ingår formelelement som kan delegeras.Included here are the formula elements that could be delegated. Alla datakällor är dock olika och alla har inte stöd för samtliga element.However, every data source is different, and not all of them support all of these elements. Kontrollera att inga element i din formel markeras med blå punkt i listan.Check for blue-dot suggestions in your particular formula.

Dessa listor ändras med tiden.These lists will change over time. Vi arbetar för att stödja fler funktioner och operander med delegering.We're working to support more functions and operators with delegation.

Filtrera funktionerFilter functions

Filter, Search och LookUp kan delegeras.Filter, Search, and LookUp can be delegated.

I funktionerna Filter och LookUp kan följande användas med kolumner i tabellen för att välja lämpliga poster:Within the Filter and LookUp functions, the following can be used with columns of the table to select the appropriate records:

Delar av din formel som utvärderas till ett konstant värde för alla poster kan också användas.Portions of your formula that evaluate to a constant value for all records can also be used. Till exempel, Left (Language() 2) är inte beroende av några kolumner i posten och därför returneras samma värde för alla poster.For example, Left( Language(), 2 ) does not depend on any columns of the record and therefore returns the same value for all records. Alltså är den en konstant.It is effectively a constant. Användning av kontextvariabler, samlingar och signaler är kanske inte konstant och därför kan Filter och LookUp förhindras från att delegerats.Use of context variables, collections, and signals may not be constant and therefore will prevent Filter and LookUp from being delegated.

Vissa viktiga saker saknas i ovanstående lista:Some notable items missing from the above list:

SorteringsfunktionerSorting functions

Sort och SortByColumns kan delegeras.Sort and SortByColumns can be delegated.

I Sort kan formeln endast vara namnet på en kolumn och får inte innehålla andra operander eller funktioner.In Sort, the formula can only be the name of a single column and can't include other operators or functions.

MängdfunktionerAggregate functions

Sum, Average, Min och Max kan delegeras.Sum, Average, Min, and Max can be delegated. Endast ett begränsat antal datakällor stöder den här delegeringen just nu. Mer information finns i delegeringslistan.Only a limited number of data sources support this delegation at this time, check the delegation list for more details.

Beräkningsfunktioner som CountRows, CountA och Count kan inte delegeras.Counting functions such as CountRows, CountA, and Count cannot be delegated.

Andra aggregatfunktioner som StdevP och VarP kan inte delegeras.Other aggregate functions such as StdevP and VarP cannot be delegated.

Övriga funktionerOther functions

Alla andra funktioner stöder inte delegering, däribland dessa viktiga funktioner:All other functions do not support delegation, including these notable functions:

Ett gemensamt mönster är att använda AddColumns och LookUp för att samköra information från en tabell till en annan, vilket med fackspråk kallas att Koppla.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. Exempel:For example:

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

Även om Produkter och Leverantörer är datakällor som kan delegeras och LookUp är en funktion som kan delegeras kan funktionen AddColumns inte delegeras.Even though Products and Suppliers may be delegable data sources and LookUp is a delegable function, the AddColumns function is not delegable. Resultatet av hela formeln begränsas till den första delen av datakällan Produkter.The result of the entire formula will be limited to the first portion of the Products data source.

Eftersom LookUp och dess datakälla kan delegeras går det att hitta en matchning för Leverantörer någonstans i datakällan, även om den är stor.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. En potentiell nackdel är att LookUp kommer göra separata anrop till datakällan för var och en av de första posterna i Produkter, vilket orsakar mycket aktivitet på nätverket.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. Om Leverantörer är tillräckligt liten och inte ändras ofta kan du cachelagra datakällan i din app med anropet samla in när appen startar (med OnVisible på startskärmen) och utföra LookUp på den i stället.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.

Gränser som inte kan delegerasNon-delegable limits

Formler som inte kan delegeras bearbetas lokalt.Formulas that cannot be delegated will be processed locally. Detta låter formelspråket i PowerApps utnyttjas till fullo.This allows for the full breadth of the PowerApps formula language to be used. Men till ett pris: alla data måste skickas till enheten först, vilket kan medföra att stora mängder data skickas över nätverket.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. Detta kan ta tid, ge intryck av att dina appar är långsamma eller har låst sig.That can take time, giving the impression that your app is slow or possibly hung.

För att undvika detta inför PowerApps en begränsning på mängden data som kan bearbetas lokalt: 500 poster.To avoid this, PowerApps imposes a limit on the amount of data that can be processed locally: 500 records. Vi har valt den här siffran så att du fortfarande kan ha fullständig åtkomst till mindre datauppsättningar och förfina din användning av stora datamängder genom att visa delar av resultat.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.

Naturligtvis måste du vara noggrann när du använder denna funktion som det kan vara förvirrande för användaren.Obviously care must be taken when using this facility as it can be confusing for users. Beakta till exempel en Filter-funktion med en formel som inte kan delegeras över en datakälla med en miljon poster.For example, consider a Filter function with a selection formula that cannot be delegated, over a million record data source. Eftersom filtrering ska ske lokalt, genomsöks endast de första 500 posterna av en miljon.Since the filtering will be done locally, only the first 500 records of the million records will be scanned. Om den önskade posten är 501 eller 500,001 uppmärksammas eller returneras den inte av funktionen Filter.If the desired record is record 501, or 500,001, it will not be considered or returned by Filter.

En annan plats där det kan vara förvirrande är mängdfunktioner.Another place where this can be confusing is aggregate functions. Till exempel, funktionen Average över en kolumn i samma datakälla med en miljon poster.Take Average over a column of that same million record data source. Eftersom Average ännu kan delegeras beräknas endast de första 500 posterna.Since Average cannot yet be delegated, only the first 500 records will be averaged. Var försiktig så att ett ofullständigt svar inte presenteras som ett fullständigt svar av en av dina appanvändare.Care must be taken or a partial answer could be misconstrued as a complete answer by a user of your app.

Förslag med blå punktBlue dot suggestions

Om du vill göra det lättare att känna till vad som delegeras och vad som inte delegeras kan du hålla ögonen öppna för en blå punkt i gränssnittet som visar när en formel innehåller element som inte kan delegeras.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.

Blå punkter visas endast på formler som fungerar på kan datakällor som kan delegeras.Blue dots are only shown on formulas that operate on delegable data sources. Om du inte ser en blå punkt och du tror att formeln inte har delegerats korrekt och ska du kontrollera datakällans typ mot listan över datakällor som kan delegeras ovan.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.

ExempelExamples

I det här exemplet kommer vi att använda en SQL Server-tabell som innehåller produkter, i synnerhet frukter, namn [dbo]. [ Produkter].In this example, we will use a SQL Server table that contains products, in particular fruits, names [dbo].[Products]. I det nya fönstret kan PowerApps skapa en grundläggande app med tre skärmar som är anslutna till den här datakällan:On the New screen, PowerApps can create a basic three screen app connected to this data source:

Treskärmsapp

Anteckna formeln för galleriegenskapen Objekt.Note the formula for the Gallery's Items property. Den använder funktionerna SortByColumns och Search, som båda kan delegeras.It is using SortByColumns and Search functions, both of which can be delegated.

Låt oss skriva "Äpple" i sökrutan.Let's type "Apple" into the search text-input control. Om vi är uppmärksamma kan vi se vandrande punkter överst på skärmen medan den nya sökningen bearbetas.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. Punkterna anger att vi kommunicerar med SQL Server:The marching dots indicate that we are communicating with the SQL Server:

Sök textinmatningskontroll

Eftersom allt detta kan delegeras, även om tabellen [dbo]. [ Produkter] innehåller miljontals poster, kan användaren hitta alla poster och bläddra bland dem i galleriet.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.

Du ser att vi ser en matchning för både "Äpple" och "Ananas".You will notice that we are seeing a match for both "Apple" and "Pineapple". Funktionen Sök hittar en sökterm någonstans i en textkolumn.The Search function will find a search term anywhere in a text column. Anta istället att vi bara ville hitta söktermen i början av den fruktens namn.If instead, let's say we wanted to only find the search term at the beginning of the fruit's name. Vi kan använda en annan funktion som kan delegeras, Filter, med en mer komplicerad sökterm (för enkelhetens skull tar vi bort anropet SortByColumns):We can use another delegable function, Filter, with a more complicated search term (for simplicity we'll remove the SortByColumns call):

Ta bort SortByColumns-anrop

Det verkar fungera, endast "Äpplen" visas nu och inte "Ananas".This appears to be working, only "Apples" is correctly showing now and "Pineapple" is not. Men en blå punkt visas bredvid galleriet och det finns en blå våglinje under en del av formeln.However, there is a blue dot showing next to the gallery and there is a blue wavy line under a portion of the formula. Det finns till och med en blå punkt i skärmminiatyren.There is even a blue dot showing in the screen thumbnail. Om vi håller musen över den blå punkten bredvid galleriet ser vi:If we hover over the blue dot next to the gallery, we see the following:

Hovra över den blå punkten

Även om vi använder Filter, som är en funktion som kan delegeras, med SQL Server, som är en datakälla som kan delegeras, kan formeln som används i Filter inte delegeras.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 och Len kan inte delegeras till någon datakälla.Mid and Len cannot be delegated to any data source.

Men det fungerade, eller hur?But it worked, didn't it? Nåja, på sätt och vis.Well, kind of. Och är därför det är blå punkt i stället för en gul varningsikon och röd våglinje.And that is why this is a blue dot instead of a yellow hazard icon and red wavy error. Om tabellen [dbo]. [ Produkter] innehåller färre än 500 poster fungerade det perfekt.If the [dbo].[Products] table contains less than 500 records, then yes, this worked perfectly. Alla poster har skickats till enheten och Filter tillämpades lokalt.All records were brought to the device and the Filter was applied locally.

Om den här tabellen innehåller mer än 500 poster är det endast frukt som börjar med "Äpple" i de första 500 posterna i tabellen som visas i galleriet.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. Om "Apple, Fuji" visas som ett namn i post 501 eller 500,001 kommer posten inte att hittas.If "Apple, Fuji" appears as a name in record 501 or 500,001 it will not be found.