Förstå delegering i en arbetsyteapp
Power Apps innehåller en kraftfull uppsättning funktioner för filtrering, sortering och utformning av datatabeller i en arbetsyteapp: funktionerna Filter, Sortera och AddColumns är några av dessa. Med dessa funktioner kan du ge användarna fokuserad åtkomst till den information som krävs. För personer som har använt databaser tidigare påminner dessa funktioner om att skriva en databasfråga.
Nyckeln till att skapa effektiva appar är att minska mängden data som måste skickas till din enhet. Kanske behöver du endast en handfull poster av flera miljoner, eller så kan ett enda aggregerat värde representera tusentals poster. 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. Ö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.
Med Delegering uppfyller Power Apps formler behovet av minimera mängden data som flyttas i nätverket. Kort sagt delegerar Power Apps bearbetningen av data till datakällan i stället för bearbeta dem lokalt i appen.
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 Power Apps-formel inte kan delegeras till varje datakälla. Power Apps 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. Därför är Power Apps språket mycket rikare än de flesta datakällor kan stödja, inklusive kraftfulla databasprogram som SQL Server.
Arbete med stora datamängder kräver datakällor och formler som kan delegeras. 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. Var uppmärksam på delegeringsvarningar som identifierar platser där delegering inte är möjligt. 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.
Anteckning
Delegeringsvarningar flaggades tidigare som ”blåpunktsförslag” i Power Apps, men delegeringsförslag har sedan dess klassificerats om som varningar. Om data i din datakälla överskrider 500 poster och en funktion inte kan delegeras kan Power Apps kanske inte hämta alla data, och appen kan få fel resultat. Delegeringsvarningar hjälper dig hantera appen så att den får rätt resultat.
Datakällor som kan delegeras
Delegering stöds endast för vissa datakällor i tabellform. Om en datakälla har stöd för delegering visas dokumentation om anslutningsprogram innehåller det stödet. Exempel på datakällor i tabellformat är de vanligaste och de stöder delegering:
- Power Apps delegerbara funktioner och åtgärder för Microsoft Dataverse
- Power Apps delegerbara funktioner och åtgärder för SharePoint
- Power Apps delegerbara funktioner och åtgärder för SQL Server
- Power Apps delegerbara funktioner och åtgärder för Salesforce
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. Alla dessa data används redan i minnet och det fullständiga Power Apps-språket kan användas.
Funktioner som kan delegeras
Nästa steg är att endast använda de formler som kan delegeras. Här ingår formelelement som kan delegeras. Alla datakällor är dock olika och alla har inte stöd för samtliga element. Kontrollera efter delegeringsvarningar i din aktuella formel.
Dessa listor ändras med tiden. Vi arbetar för att stödja fler funktioner och operander med delegering.
Filterfunktioner
Filter, Search och LookUp kan delegeras.
I funktionerna Filter och LookUp kan du använda följande med kolumner i tabellen för att välja lämpliga poster:
- And (inklusive &&), Or (inklusive ||), Not (inklusive !)
- I
- =, <>, >=, <=, >, <
- +, -
- TrimEnds
- IsBlank
- StartsWith, EndsWith
- Konstanta värden som är gemensamma för alla poster, t.ex. kontrollegenskaper och globala och kontextuella variabler.
Du kan även använda delar av din formel som utvärderas till ett konstant värde för alla poster. Till exempel Left( Language(), 2 ), Date( 2019, 3, 31 ) och Today() beror inte på några kolumner i posten och returnerar därför samma värde för alla poster. Dessa värden kan skickas till datakälla som en konstant och kan därför inte blockera delegering.
Den föregående listan inkluderar inte följande viktiga saker:
- If
- *, /, Mod
- Concatenate (inklusive &)
- ExactIn
- Funktioner för strängmanipulering: Lower, Upper, Left, Mid, Len, ...
- Signaler: Location, Acceleration, Compass, ...
- Volatila: Rand, ...
- Samlingar
Sorteringsfunktioner
Sort och SortByColumns kan delegeras.
I Sort kan formeln endast vara namnet på en kolumn och får inte innehålla andra operander eller funktioner.
Mängdfunktioner
Sum, Average, Min och Max kan delegeras. Endast ett begränsat antal datakällor stöder den här delegeringen just nu. Mer information finns i delegeringslistan.
Anteckning
Om ett uttryck inte delegeras fungerar det bara på de första 500 posterna (konfigurerbar upp till 2000, se Ändra gränsen) hämtas från datakällan snarare än att delegera behandlingen av all data vid datakällan.
Beräkningsfunktioner som CountRows, CountA och Count kan inte delegeras.
Andra aggregatfunktioner som StdevP och VarP kan inte delegeras.
Funktioner för tabell utformning
AddColumns, DropColumns, RenameColumns och ShowColumns stöder delegering delvis. Formler i argumenten kan delegeras. Utmatningen av dessa funktioner är emellertid underkastad gräns för icke delegering av poster.
Och i detta exempel använder tillverkare ofta AddColumns och LookUp för att samköra information från en tabell till en annan, vilket med fackspråk kallas att Koppla.
AddColumns( Products,
"Supplier Name",
LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name
)
Trots att Products och Suppliers kan vara delegerbara datakällor och LookUp är en delegerbar funktion är utdata för AddColumns-funktionen inte delegerbar. Resultatet av hela formeln begränsas till den första delen av datakällan Produkter. 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.
Om du använder AddColumns på det här sättet måste LookUp göra separata samtal till datakälla för var och en av de första posterna i produkter, vilket orsakar mycket nätverkschatter. Om leverantörer är tillräckligt små och inte ändras ofta kan du anropa funktionen Samla in i OnStart och cachelagra datakälla i appen när den startas. Alternativt kan du omstrukturera appen så att du bara får de relaterade posterna när användaren ombeds göra det.
Funktioner som inte kan delegeras
Alla andra funktioner stöder inte delegering, däribland dessa viktiga funktioner:
- First, FirstN, Last, LastN
- Choices
- Concat
- Collect, ClearCollect
- CountIf, RemoveIf, UpdateIf
- GroupBy, Ungroup
Gränser som inte kan delegeras
Formler som inte kan delegeras bearbetas lokalt. Detta låter formelspråket i Power Apps utnyttjas till fullo. 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. Detta kan ta tid, ge intryck av att dina appar är långsamma eller har kraschat.
För att undvika detta inför Power Apps en begränsning på mängden data som kan bearbetas lokalt: 500 poster som standard. 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.
Naturligtvis måste du vara noggrann när du använder denna funktion, eftersom den kan vara förvirrande för andra. Beakta till exempel en Filter-funktion med en urvalsformel som inte kan delegeras över en datakälla som innehåller en miljon poster. Eftersom filtrering utförs lokalt genomsöks endast de första 500 posterna. Om den önskade posten är post 501 eller 500 001 övervägs eller returneras den inte av Filter.
Aggregatfunktioner kan också vara förvirrande. Ta som exempel Average över en kolumn i samma datakälla med en miljon poster. Genomsnitt kan inte delegeras i det här fallet eftersom uttrycket inte är delegerat (se tidigare anteckningen), så bara de första 500 posterna är i genomsnitt. 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.
Ändring av gränsen
500 är standardantalet poster, men du kan ändra det antalet för en hel app:
- På fliken Arkiv väljer du Inställningar.
- Under Allmänt ändrar du inställningen Gräns för datarad från 1 till 2 000.
I vissa fall vet du att 2 000 (eller 1 000 eller 1 500) uppfyller behoven för ditt scenario. Du kan sedan försiktigt öka antalet så att det passar ditt 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. Det bästa sättet är ändå att delegera så mycket som möjligt.
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. Allt som inte kan delegeras returnerar endast en enda post som bör vara enkel att identifiera när du testar din app. Detta kan hjälpa dig att undvika överraskningar när du försöker ta en Proof of concept-app till produktion.
Delegeringsvarningar
För att göra det lättare att se vad som delegeras och inte visar Power Apps en varning (gul triangel) när du skapar en formel som innehåller något som inte kan delegeras.
Delegeringsvarningar visas endast på formler som fungerar på delegerbara datakällor. 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.
Exempel
I det här exemplet skapar du automatiskt treskärmsapp baserat på en SQL Server-tabell med namnet [dbo].[Fruit]. För att få information om hur du skapar appen kan du tillämpa liknande principer i avsnittet om ämne om Dataverse till SQL Server.

Galleriets Objekt-egenskap är inställd på en formel som innehåller funktionerna SortByColumns och Sök, som båda kan delegeras.
I sökrutan skriver du ”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. Alla poster som uppfyller sökkriterierna visas även om datakällan innehåller miljontals poster.

Sökresultatet innehåller ”Apples”, ”Crab apples” och ”Pineapple” eftersom Search-funktionen söker överallt i en textkolumn. 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. (För enkelhetens skull tar du bort SortByColumns-anropet.)

De nya resultaten innehåller ”Apples” men inte ”Crab apples” eller ”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. Vart och ett av de här elementen indikerar en varning. Om du hovrar över den gula triangeln intill galleriet visas det här meddelandet:

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.
Men det fungerade, eller hur? Nåja, på sätt och vis. Och det är därför det här är en varning och inte en röd, vågig markering.
- Om tabellen innehåller färre än 500 poster fungerade formeln perfekt. Alla poster skickades till enheten, och Filter tillämpades lokalt.
- Om tabellen innehåller fler än 500 poster returnerar formeln inte post 501 eller senare, även om den matchar villkoren.
Se även
Effekten av att använda icke-delegerbara funktioner och begränsning för datarad för prestanda
Tips och bästa praxis för att använda delegering