Förstå delegering i en arbetsyteappUnderstand delegation in a canvas app

PowerApps innehåller en kraftfull uppsättning funktioner för filtrering, sortering och utformning av data tabeller i en app för arbets ytor: Filtrera , Sortera och AddColumns funktioner till ett namn som bara består av några.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. 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 måste skickas till din enhet.The key to building efficient apps is to minimize the amount of data that must be brought to your device. Kanske behöver du endast en handfull poster av flera miljoner, eller så kan ett enda aggregerat värde representera tusentals poster.Perhaps you need only a handful of records from a sea of million, 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 appens 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 that your app needs, 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 delegerar PowerApps bearbetningen av data till datakällan i stället för bearbeta dem lokalt i appen.In short, 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's the only way to keep your app performing well and ensure users can access all the information they need. Var uppmärksam på delegeringsvarningar som identifierar platser där delegering inte är möjligt.Take heed of delegation warnings that identify places where delegation isn't possible. Om du arbetar med små datauppsättningar (färre än 500 poster) kan du använda valfri datakälla och formel eftersom appen kan bearbeta data lokalt om formeln inte kan delegeras.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.

Anteckning

Delegeringsvarningar flaggades tidigare som ”blåpunktsförslag” i PowerApps, men delegeringsförslag har sedan dess klassificerats om som varningar.Delegation warnings were previously flagged in PowerApps as "blue dot" suggestions, but delegation suggestions have since been re-classified as warnings. Om data i din datakälla överskrider 500 poster och en funktion inte kan delegeras kan PowerApps kanske inte hämta alla data, och appen kan få fel resultat.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. Delegeringsvarningar hjälper dig hantera appen så att den får rätt resultat.Delegation warnings help you manage your app so that it has correct results.

Delegerbara datakällorDelegable data sources

Delegering stöds endast för vissa tabell data källor.Delegation is supported for certain tabular data sources only. Om en data källa har stöd för delegering, beskrivs dess kopplings dokumentation som stöder.If a data source supports delegation, its connector documentation outlines that support. Dessa tabell data källor är till exempel de mest populära och de stöder delegering:For example, these tabular data sources are the most popular, and they support delegation:

Importerade Excel-arbetsböcker (med hjälp av Lägg till statiska data till din app data källa), samlingar och tabeller som lagras i sammanhang 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 efter delegeringsvarningar i din aktuella formel.Check for delegation warnings 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 du använda följande med kolumner i tabellen för att välja lämpliga poster:Within the Filter and LookUp functions, you can use these with columns of the table to select the appropriate records:

Du kan även använda delar av din formel som utvärderas till ett konstant värde för alla poster.You can also use portions of your formula that evaluate to a constant value for all records. Till exempel, Left (språk (), 2) , datum (2019, 3, 31) och idag () är inte beroende av några kolumner i posten och returnerar därför samma värde för alla poster.For example, Left( Language(); 2 ), Date( 2019; 3; 31 ), and Today() don't depend on any columns of the record and, therefore, return the same value for all records. Dessa värden kan skickas till data källan som en konstant och blockerar inte delegering.These values can be sent to the data source as a constant and won't block delegation.

Den föregående listan inkluderar inte följande viktiga saker:The previous list doesn't include these notable items:

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 details.

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

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

Tabell Forms funktionerTable shaping functions

AddColumns , DropColumns , RenameColumns och ShowColumns delvis stöd för delegering.AddColumns, DropColumns, RenameColumns, and ShowColumns partially support delegation. Formler i argumenten kan delegeras.Formulas in their arguments can be delegated. Utdata från dessa funktioner omfattas dock inte av post gränsen för icke-delegering.However, the output of these functions are subject to the non-delegation record limit.

Som i det här exemplet använder tillverkare ofta AddColumns och LookUp för att slå samman information från en tabell till en annan, som ofta kallas koppling i databas parlance:As in this example, makers often use AddColumns and LookUp to merge information from one table into another, commonly referred to as a Join in database parlance:

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

Även om produkter och leverantörer kan vara kan delegeras data källor och LookUp är en kan delegeras-funktion, är resultatet av AddColumns -funktionen inte kan delegeras.Even though Products and Suppliers may be delegable data sources and LookUp is a delegable function, the output of the AddColumns function isn't delegable. Resultatet av hela formeln är begränsat till den första delen av data källan Products .The result of the entire formula is limited to the first portion of the Products data source. Eftersom LookUp-funktionen och dess datakälla kan delegeras går det att hitta en matchning för Suppliers var som helst i datakällan, även om den är stor.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.

Om du använder AddColumns på det här sättet måste sökningen göra separata anrop till data källan för var och en av de första posterna i produkterna, vilket orsakar mycket nätverks-Chatter.If you use AddColumns in this manner, LookUp must make separate calls to the data source for each of those first records in Products, which causes a lot of network chatter. Om leverantörer är tillräckligt små och inte ändras ofta kan du anropa funktionen Collect i OnStart för att cachelagra data källan i din app när den startas.If Suppliers is small enough and doesn't change often, you could call the Collect function in OnStart to cache the data source in your app when it starts. Som ett alternativ kan du omstrukturera appen så att du bara hämtar relaterade poster när användaren ber om dem.As an alternative, you could restructure your app so that you pull in the related records only when the user asks for them.

Funktioner som inte kan delegerasNon-delegable functions

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

Gränser som inte kan delegerasNon-delegable limits

Formler som inte kan delegeras bearbetas lokalt.Formulas that can't 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 kraschat.That can take time, giving the impression that your app is slow or possibly crashed.

För att undvika detta ålägger PowerApps en gräns för mängden data som kan bearbetas lokalt: 500 poster som standard.To avoid this, PowerApps imposes a limit on the amount of data that can be processed locally: 500 records by default. 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, eftersom den kan vara förvirrande för andra.Obviously care must be taken when using this facility because it can confuse users. Beakta till exempel en Filter-funktion med en urvalsformel som inte kan delegeras över en datakälla som innehåller en miljon poster.For example, consider a Filter function with a selection formula that can't be delegated, over a data source that contains a million records. Eftersom filtrering utförs lokalt genomsöks endast de första 500 posterna.Because the filtering is done locally, only the first 500 records are scanned. Om den önskade posten är post 501 eller 500 001 övervägs eller returneras den inte av Filter.If the desired record is record 501 or 500,001, it isn't considered or returned by Filter.

Aggregatfunktioner kan också vara förvirrande.Aggregate functions can also cause confusion. Ta som exempel Average över en kolumn i samma datakälla med en miljon poster.Take Average over a column of that same million-record data source. Average kan ännu inte delegeras, och därför snittberäknas endast de första 500 posterna.Average can't yet be delegated, so only the first 500 records are averaged. Om du inte är uppmärksam på detta kan ett ofullständigt svar tolkas som ett fullständigt svar av en av dina appanvändare.If you're not careful, a partial answer could be misconstrued as a complete answer by a user of your app.

Ändring av gränsenChanging the limit

500 är standardantalet poster, men du kan ändra det antalet för en hel app:500 is the default number of records, but you can change this number for an entire app:

  1. På menyn Arkiv väljer du Appinställningar.On the File tab, select App settings.
  2. Under Avancerade inställningarändrar du data rad gränsen för icke-kan delegeras frågor från 1 till 2000.Under Advanced settings, change the Data row limit for non-delegable queries setting from 1 to 2000.

I vissa fall vet du att 2 000 (eller 1 000 eller 1 500) uppfyller behoven för ditt scenario.In some cases, you'll know that 2,000 (or 1,000 or 1,500) will satisfy the needs of your scenario. Du kan sedan försiktigt öka antalet så att det passar ditt scenario.With care, you can increase this number to fit your scenario. När du ökar det här antalet kan appens prestanda försämras, särskilt för breda tabeller med många kolumner.As you increase this number, your app's performance may degrade, especially for wide tables with lots of columns. Det bästa sättet är ändå att delegera så mycket som möjligt.Still, the best answer is to delegate as much as you can.

För att säkerställa att din app kan skalas till stora datamängder kan du minska den här inställningen till 1.To ensure that your app can scale to large data sets, reduce this setting down to 1. Allt som inte kan delegeras returnerar endast en enda post som bör vara enkel att identifiera när du testar din app.Anything that can't be delegated returns a single record, which should be easy to detect when testing your app. Detta kan hjälpa dig att undvika överraskningar när du försöker ta en Proof of concept-app till produktion.This can help avoid surprises when trying to take a proof-of-concept app to production.

DelegeringsvarningarDelegation warnings

För att göra det lättare att se vad som delegeras och inte visar PowerApps en varning (gul triangel) när du skapar en formel som innehåller något som inte kan delegeras.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.

Delegeringsvarningar visas endast på formler som fungerar på delegerbara datakällor.Delegation warnings appear only on formulas that operate on delegable data sources. Om du inte ser en varning och du tror att formeln inte delegeras korrekt kontrollerar du datakällans typ mot listan över delegerbara datakällor ovan.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.

ExempelExamples

I det här exemplet skapar du automatiskt treskärmsapp baserat på en SQL Server-tabell med namnet [dbo].[Fruit] .For this example, you'll automatically generate a three-screen app based on a SQL Server table named [dbo].[Fruit]. Om du vill ha mer information om hur du skapar appen kan du använda liknande principer i avsnittet om common data service att SQL Server.For information about how to generate the app, you can apply similar principles in the topic about Common Data Service to SQL Server.

Treskärmsapp

Galleriets Items-egenskap är inställd på en formel som innehåller funktionerna SortByColumns och Search, som båda kan delegeras.The gallery's Items property is set to a formula that contains SortByColumns and Search functions, both of which can be delegated.

I sökrutan skriver du ”Apple” .In the search box, type "Apple".

Vandrande punkter visas kort längst upp på skärmen när appen kommunicerar med SQL Server för att bearbeta sökbegäran.Marching dots appear momentarily near the top of the screen as the app communicates with SQL Server to process the search request. Alla poster som uppfyller sökkriterierna visas även om datakällan innehåller miljontals poster.All records that meet the search criteria appear, even if the data source contains millions of records.

Sök textinmatningskontroll

Sökresultatet innehåller ”Apples” , ”Crab apples” och ”Pineapple” eftersom Search-funktionen söker överallt i en textkolumn.The search results include "Apples", "Crab apples", and "Pineapple" because the Search function looks everywhere in a text column. Om du endast vill hitta poster som innehåller söktermen i början av fruktens namn kan du använda en annan delegerbar funktion, Filter, med en mer komplicerad sökterm.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. (För enkelhetens skull tar du bort SortByColumns-anropet.)(For simplicity, remove the SortByColumns call.)

Ta bort SortByColumns-anrop

De nya resultaten innehåller ”Apples” men inte ”Crab apples” eller ”Pineapple” .The new results include "Apples" but not "Crab apples" or "Pineapple". Dock visas en gul triangel intill galleriet (och i skärmminiatyren om det vänstra navigeringsfältet visar miniatyrbilder), och en blå, vågig linje visas under en del av formeln.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. Vart och ett av de här elementen indikerar en varning.Each of these elements indicate a warning. Om du hovrar över den gula triangeln intill galleriet visas det här meddelandet:If you hover over the yellow triangle next to the gallery, this message appears:

Hovra över delegeringsvarning

SQL Server är en delegerbar datakälla, och Filter är en delegerbar funktion, men Mid och Len kan inte delegeras till någon datakälla.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.

Men det fungerade, eller hur?But it worked, didn't it? Nåja, på sätt och vis.Well, kind of. Och det är därför det här är en varning och inte en röd, vågig markering.And that is why this is a warning and not a red, wavy squiggle.

  • Om tabellen innehåller färre än 500 poster fungerade formeln perfekt.If the table contains fewer than 500 records, the formula worked perfectly. Alla poster skickades till enheten, och Filter tillämpades lokalt.All records were brought to the device, and Filter was applied locally.
  • Om tabellen innehåller fler än 500 poster returnerar formeln inte post 501 eller senare, även om den matchar villkoren.If the table contains more than 500 records, the formula won't return record 501 or higher, even if it matches the criteria.