Dela via


Frågebegränsningar: Begränsningar för delegering och frågor

Förstå delegering

Power Apps fungerar bäst med en backend-datakälla när en Power Fx-fråga helt översätts till en motsvarande fråga som körs på datakällan. Power Apps skickar en fråga som datakällan förstår, datakällan kör frågan och Power Apps hämtar resultatet. Datakällan filtrerar till exempel data och returnerar bara de rader som uppfyller filtervillkoren. När detta fungerar delegeras frågan till datakällan.

Men Power Fx frågor kan inte alltid översättas till motsvarande frågor för varje datakälla. Till exempel Dataverse stöder fler frågefunktioner än Excel. Dataverse har stöd för frågeoperatorn "in" (medlemskap), men det gör inte Excel. En fråga kan inte delegeras om den använder en funktion som datakällan inte stöder. Om någon del av ett frågeuttryck inte kan delegeras delegerar Power Apps inte någon del av frågan.

När en fråga inte kan delegeras hämtar Power Apps de första 500 posterna från datakällan och kör sedan åtgärderna i frågan. Du kan öka den här gränsen till 2 000 poster. Om du ändrar gränsenPower Apps begränsas resultatstorleken till 500 poster för att appen ska fungera bra. Större resultatuppsättningar kan orsaka prestandaproblem för din app och Power Apps.

Men den här begränsningen kan vara ett problem eftersom frågan kan returnera felaktiga resultat om datakällan har fler än 500 eller 2 000 poster. Om datakällan till exempel har 10 miljoner poster och frågan måste arbeta med den sista delen av data, till exempel efternamn som börjar med "Z", och frågan använder en icke-delegerbar operator som distinct, får du bara de första 500 eller 2 000 posterna. Det innebär att du får felaktiga resultat.

Skapa dina Power Fx-frågor med hjälp av de delegerbara tabellerna för din datakälla. Använd endast 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 visar var 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 returnerar rätt resultat. Om data i datakällan överskrider 500 poster och en funktion inte kan delegeras, markerar Power Fx formeln med en blå understrykning.

Datakällor som kan delegeras

Delegering fungerar endast med vissa datakällor i tabellform. Om en datakälla har stöd för delegering visas dokumentation om anslutningsprogram förklarar det stödet. Till exempel stöder dessa populära tabellbaserade datakällor delegering:

Importerade Excel-arbetsböcker (med datakällan Lägg till statiska data till ditt program), samlingar och tabeller som lagras i kontextvariabler behövs inte delegering. Alla dessa data används redan i minnet så att du kan använda det fullständiga Power Apps-språket.

Funktioner som kan delegeras

Använd endast formler som kan delegeras. I den här artikeln beskrivs formelelement som kan delegeras. Varje datakälla är olika och alla har inte stöd för samtliga element. Kontrollera efter delegeringsvarningar i din 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 delegerar Filter(Accounts, Name in ["name1", "name2"]) till datakällan för utvärdering. Men Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]) delegeras inte eftersom kolumnen Fullständigt namn finns 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 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.

Delegering och samlingar

När du använder With, UpdateContext eller Set, skapar de samlingar internt. Samlingar är en statisk minnesintern lista över poster och deltar inte i delegeringen. Du ser ingen delegeringsvarning.

Frågebegränsningar

Slå upp och expandera nivåer

Power Apps gör att du kan använda upp till två uppslagsnivåer. Ett Power Fx-frågeuttryck kan innehålla högst två uppslagsfunktioner för att upprätthålla prestandan. När ett frågeuttryck innehåller ett uppslag frågar Power Apps först bastabellen och kör sedan en andra fråga för att expandera den första tabellen med sökningsinformationen. Ytterligare en nivå utöver detta stöds som maximum. Men för offlinescenarier stöds bara en nivå av uppslagsexpandering.

Expandera eller koppla upp till 20 entiteter i en enda fråga. Om du behöver koppla fler än 20 tabeller i en fråga kan du försöka skapa en vy på dataservern om det är möjligt.

Uttrycksutvärdering – egenskapen för enheten måste finnas på vänster sida "LHS" om jämlikhetsoperatören

Placera egenskapen för en enhet som ska jämföras på vänster sida (LHS) av en ekvation. I följande uttryck används till exempel entitetsegenskapen 'Business unit ID'.Name står på LHS och uttrycket fungerar:

Filter(
        Budgets,
        'Business unit ID'.Name = LookUp(
            Users,
            'Primary Email' = User().Email,
            'Business Unit'
        ).Name,
        DataCardValue37.Selected.'Date Range String'='Date Range String'
    )

Men det här uttrycket fungerar 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 mängdfunktioner kan delegeras baserat på serverdelsstö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. Endast ett begränsat antal datakällor stöder delegering för dessa funktioner. Mer information finns i Delegeringslista.

Funktioner som inte kan delegeras

Alla andra funktioner kan inte delegeras, däribland dessa viktiga funktioner:

Gränser som inte kan delegeras

Formler som inte kan delegeras bearbetas lokalt. Med lokal bearbetning kan du använda det fullständiga Power Apps formelspråket. Men det finns en kompromiss: alla data måste skickas till enheten först, vilket kan innebära att stora mängder data skickas över nätverket. Den här processen kan ta tid och göra att appen verkar långsam eller inte svarar.

För att undvika detta begränsar Power Apps på mängden data som kan bearbetas lokalt: 500 poster som standard. Med den här gränsen kan du använda små datauppsättningar helt och hållet och förfina användningen av stora datauppsättningar genom att se partiella resultat.

Var försiktig när du använder den här funktionen eftersom den kan förvirra användarna. Beakta till exempel en Filter-funktion med en urvalsformel som inte kan delegeras över en datakälla som innehåller en miljon poster, endast de första 500 posterna skannas. Om posten du vill ha är post 501 eller 500 001, tar Filter inte hänsyn till eller returnerar den.

Aggregatfunktioner kan också vara förvirrande. Om du till exempel använder Genomsnitt över en kolumn i samma datakälla med en miljon poster kan Genomsnitt inte delegeras eftersom uttrycket inte är delegerat (se den tidigare anteckningen). Endast de första 500 posterna beräknas som medelvärden. Om du inte är försiktig kan en användare tro att ett partiellt svar är fullständigt.

Ändring av gränsen

500 är standardantalet poster, men du kan ändra det antalet för ett helt program:

  1. Välj Inställningar.
  2. Under Allmänt ändrar du inställningen Gräns för datarad från 1 till 2 000.

I vissa fall räcker det med 2 000 (eller 1 000 eller 1 500) poster för ditt scenario. Du kan öka det här antalet efter behov, men ju mer du ökar det, desto sämre kan appens prestanda bli – särskilt för breda tabeller med många kolumner. Det är fortfarande bäst att delegera så mycket som möjligt.

För att säkerställa att din app kan skalas till stora datamängder, ställ in detta värde på 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

Power Apps visar en varning (gul triangel) när du skapar en formel som inte kan delegeras. Det gör det lättare att veta vad som är delegerat och vad som inte är det.

Delegeringsvarningar visas endast på formler som använder delegerbara datakällor. Om du inte ser någon varning men tror att din formel inte är delegerad, kontrollera din datakälltyp 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 artikeln om Dataverse till SQL Server.

Tre-skärmsprogram.

Galleriets Items-egenskap använder en formel med funktionerna SortByColumns och Sök, som båda kan delegeras.

I sökrutan anger 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ök Text Input-kontroll.

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 specifik sökterm. För enkelhetens skull tar du bort SortByColumns-anropet.

Ta bort SortByColumns-samtalet.

De nya resultaten innehåller "Äpplen" men inte "Ananas". En gul triangel visas bredvid galleriet och i skärmminiatyren om miniatyrer visas i det vänstra navigeringsfältet. En blå, vågig linje visas under en del av formeln. Vart och ett av de här elementen indikerar en varning. När du hovrar över den gula triangeln intill galleriet visas det här meddelandet:

Håll muspekaren över delegationsvarningen.

SQL Server är en delegerbar datakälla och Filter är en delegerbar funktion. Mid och Len kan emellertid inte delegeras till någon datakälla.

Men det fungerar, eller hur? På sätt och vis. Det är därför det här är en varning och inte en röd, vågig markering.

  • Om tabellen har färre än 500 poster fungerade formeln perfekt. Alla poster skickades till enheten, och Filter tillämpades lokalt.
  • Om tabellen har fler än 500 poster returnerar formeln inte post 501 eller senare, även om den matchar villkoren.

Se även