Frågebegränsningar: Begränsningar för delegering och frågor
Förstå delegering
Power Apps fungerar bäst med en serverdelens datakälla när en Power Fx-fråga kan översättas till en motsvarande fråga som kan köras på datakälla. Power Apps skickar en fråga som datakällan förstår, frågan utförs på datakällan och frågeresultaten returneras till Power Apps. Exempelvis kan datakälla göra jobbet med att filtrera data på datakälla och endast returnera de rader som uppfyller filtervillkoren. När det här fungerar korrekt säger vi att frågan är delegerad till datakälla för att göra arbetet i frågan.
Men Power Fx-frågor kan inte alltid översättas till likvärdiga frågor i alla datakällor. Till exempel Dataverse stöder fler frågefunktioner än Excel. Dataverse har stöd för "in"-frågeoperatorn (medlemskap), och det gör inte Excel. Vi säger att frågan inte kan delegeras om en fråga använder en funktion som datakälla inte har stöd för. Om någon del av ett frågeuttryck är icke-delegerbart delegerar vi inte någon del av frågan.
När en fråga inte kan delegeras Power Apps visas bara de första 500 posterna från datakälla och utför sedan åtgärderna i frågan. Den här gränsen kan höjas till 2 000 poster Om du ändrar gränsenPower Apps begränsar resultatstorleken till 500 poster för att bevara goda prestanda i Power Apps. Genom experimentering upptäckte vi att resultatuppsättningar som är större än dessa storlekar medför prestandaproblem för din app och Power Apps i allmänhet.
Men den här begränsningen kan vara ett problem eftersom frågan kan returnera felaktiga resultat om data i datakälla överstiger 500/2 000 poster. Fundera till exempel på var din datakälla har 10 miljoner poster och din fråga behöver fungera på den sista delen av dina data. (Till exempel efternamnen som börjar med "Z") Men frågan har en icke-delegerbar operator i den (till exempel avgränsad) I det här fallet visas bara de första 500/2 000 posterna och du har felaktiga resultat.
Skapa dina Power Fx-frågor med hjälp av de delegerbara tabellerna för din datakälla. Du bör endast använda frågefunktioner som kan delegeras. Det är det enda sättet att säkerställa att ditt program 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 programmet kan bearbeta data lokalt om formeln inte kan delegeras.
Obs
Delegeringsvarningar hjälper dig hantera programmet så att den får rätt resultat. Om data i din datakälla överstiger 500 poster och en funktion inte kan delegeras markerar Power Fx-formeln med ett blått tecken.
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 ditt program), 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.
Filterfunktioner
Filter, Search, First 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
Obs
In is only delegated for columns on the base data source. Till exempel om datakällan är tabellen Konton sedan delegerar
Filter(Accounts, Name in ["name1", "name2"])
till datakällan för utvärdering.Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"])
delegerar emellertid inte eftersom kolumnen Fullname är i en annan tabell (PrimaryContact) än Konton. Uttrycket utvärderas lokalt. - =, <>, >=, <=, >, <
- +, -
- 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
- Åtgärder för kolumnomvandling Text, Värde
- Concatenate (inklusive &)
- ExactIn
- Funktioner för strängmanipulering: Lower, Upper, Left, Mid, Len, ...
- Signaler: Location, Acceleration, Compass, ...
- Volatila: Rand, ...
- Mängder
Frågebegränsningar
Uppslagsnivåer
Power Apps har stöd för två uppslagsnivåer. Det betyder att ett Power Fx frågeuttryck kan ha högst två uppslagsfunktioner i det. Den här begränsningen används för att bevara prestanda. Om ett frågeuttryck innehåller ett uppslag gör Power Apps först en fråga för att hämta grundtabellen. Sedan gör den en andra fråga som visar den första tabellen med uppslagsinformation. Vi stöder ytterligare en nivå utöver detta som maximalt. När det gäller offlineläge har vi bara stöd för en uppslagsnivå.
Uttrycksutvärdering – egenskapen för enheten måste finnas på vänster sida "LHS" om jämlikhetsoperatören
Det är viktigt att placera egenskapen för en entitet som ska jämföras i ett uttryck på vänster sida 'LHS' i en ekvation. För att illustrera, i exemplet nedan entitetsegenskapen 'Business Unit ID'.Name är ett egenskapsvärde och det måste placeras på LHS för uttrycket som ska utvärderas. Följande uttryck kommer att lyckas:
Filter(
Budgets,
'Business unit ID'.Name = LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name,
DataCardValue37.Selected.'Date Range String'='Date Range String'
)
Detta uttryck kommer dock inte:
Filter(
Budgets,
LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name = 'Business unit ID'.Name,
'Date Range String'=DataCardValue37.Selected.'Date Range String'
)
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
Vissa samlingsfunktioner kan delegeras baserat på serverstöd. Funktioner som Sum, Average, Min och Max kan delegeras. Beräkningsfunktioner som CountRows och Count kan också delegeras. Men RemoveIf och UpdateIf har delegeringsbegränsningar. För närvarande stöder endast ett begränsat antal datakällor delegering för dessa funktioner. Mer information finns i Delegeringslistan.
funktioner som inte kan delegeras
Alla andra funktioner stöder inte delegering, däribland dessa viktiga funktioner:
gränser som inte kan delegeras
Formler som inte kan delegeras bearbetas lokalt. Lokal bearbetning 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 program ä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 ett helt program:
- Välj 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 programmets 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 ditt program 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 ditt program. Detta kan hjälpa dig att undvika överraskningar när du försöker ta ett Proof of concept-program 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 programmet kan du tillämpa liknande principer i avsnittet om artikel om Dataverse till SQL Server.
Galleriets Items-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 programmet 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ökresultaten innehåller "Äpplen" och "Ananas" eftersom funktionen Sök 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 "Äpplen" men inte "Ananas". 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