Kontext i DAX-formler

Gäller för
Excel för Microsoft 365 Excel 2024 Excel 2021 Excel 2019 Excel 2016

Med kontext kan du utföra dynamisk analys, där resultatet av en formel kan ändras för att återspegla den aktuella rad- eller cellmarkeringen och även relaterade data. Att förstå sammanhang och använda kontext effektivt är mycket viktigt när man ska bygga högpresterande formler, dynamiska analyser och felsökningsproblem i formler.

I det här avsnittet definieras de olika typerna av kontext: radkontext, frågekontext och filterkontext. Här förklaras hur kontexten utvärderas för formler i beräknade kolumner och i pivottabeller.

Den sista delen av den här artikeln innehåller länkar till detaljerade exempel som illustrerar hur resultatet av formler ändras beroende på sammanhanget.

Förstå kontext

Formler i Power Pivot kan påverkas av de filter som används i en pivottabell, av relationer mellan tabeller och av filter som används i formler. Sammanhanget är det som gör det möjligt att utföra dynamisk analys. Det är viktigt att förstå kontexten när man ska skapa formler och felsöka dem.

Det finns olika typer av kontext: radkontext, frågekontext och filterkontext.

Radkontext kan ses som "den aktuella raden". Om du har skapat en beräknad kolumn består radkontexten av värdena på varje enskild rad och värdena i kolumner som är relaterade till den aktuella raden. Det finns också funktioner (EARLIER och TIDIGASTE) som hämtar ett värde från den aktuella raden och sedan använder det värdet när du utför en åtgärd över en hel tabell.

Frågekontext syftar på den delmängd data som skapas implicit för varje cell i en pivottabell, beroende på rad- och kolumnrubrikerna.

Filterkontext är den uppsättning värden som tillåts i varje kolumn, baserat på filterbegränsningar som tillämpats på raden eller som definieras av filteruttryck i formeln.

Överst på sidan

Radkontext

Om du skapar en formel i en beräknad kolumn innehåller radkontexten för formeln värdena från alla kolumner på den aktuella raden. Om tabellen är relaterad till en annan tabell omfattar innehållet även alla värden från den andra tabellen som är relaterade till den aktuella raden.

Anta att du skapar en beräknad kolumn, =[Frakt] + [Skatt], som adderar två kolumner från samma tabell. Den här formeln fungerar som formler i en Excel-tabell, som automatiskt refererar till värden från samma rad. Observera att tabeller skiljer sig från områden: du kan inte referera till ett värde från raden före den aktuella raden genom att använda intervallnotation och du kan inte referera till ett godtyckligt enskilt värde i en tabell eller cell. Du måste alltid arbeta med tabeller och kolumner.

Radkontexten följer automatiskt relationerna mellan tabeller för att avgöra vilka rader i relaterade tabeller som är associerade med den aktuella raden.

I följande formel används till exempel funktionen RELATED för att hämta ett momsvärde från en relaterad tabell baserat på den region ordern levererades till. Momsvärdet fastställs genom att använda värdet för region i den aktuella tabellen, slå upp regionen i den relaterade tabellen och sedan hämta momssatsen för den regionen från den relaterade tabellen.

= [Freight] + RELATED('Region'[TaxRate])

Med den här formeln hämtas helt enkelt momssatsen för det aktuella området från tabellen Region. Du behöver inte känna till eller ange nyckeln som kopplar samman tabellerna.

Kontext för flera rader

Dessutom innehåller DAX funktioner som itererar beräkningar över en tabell. De här funktionerna kan ha flera aktuella rader och kontexter för aktuell rad. I programmeringstermer kan du skapa formler som återkommer över en inre och yttre loop.

Anta till exempel att arbetsboken innehåller en tabell för produkter och en tabell för försäljning . Du kanske vill gå igenom hela försäljningstabellen, som är full av transaktioner som omfattar flera produkter, och hitta det största antal som beställts för varje produkt i en transaktion.

I Excel kräver den här beräkningen en serie mellanliggande sammanfattningar, som måste återskapas om data ändras. Om du är privilegierad användare av Excel kanske du kan skapa matrisformler som skulle göra jobbet. Alternativt kan du skriva kapslade delmarkeringar i en relationsdatabas.

Men med DAX kan du skapa en enda formel som returnerar rätt värde, och resultaten uppdateras automatiskt varje gång du lägger till data i tabellerna.

=MAXX(FILTER(Sales,[ProdKey]=EARLIER([ProdKey])),Sales[OrderQty])

En detaljerad genomgång av den här formeln finns i funktionen TIDIGARE.

I korthet lagrar funktionen EARLIER radkontexten från åtgärden som föregick den aktuella åtgärden. Funktionen lagrar alltid två uppsättningar kontext i minnet: en uppsättning kontext representerar den aktuella raden för den inre loopen i formeln och en annan uppsättning kontext representerar den aktuella raden för den yttre loopen i formeln. I DAX matas värden automatiskt mellan de två slingorna så att du kan skapa komplexa mängder.

Överst på sidan

Frågekontext

Frågekontext refererar till den delmängd data som hämtas implicit för en formel. När du släpper ett fält för ett mått eller annat värde i en cell i en pivottabell undersöker Power Pivot-motorn rad- och kolumnrubriker, utsnitt och rapportfilter för att fastställa sammanhanget. Power Pivot gör sedan de nödvändiga beräkningarna för att fylla varje cell i pivottabellen. Den datauppsättning som hämtas utgör frågekontexten för varje cell.

Eftersom kontexten kan ändras beroende på var du placerar formeln ändras även resultatet av formeln beroende på om du använder formeln i en pivottabell med många grupperingar och filter, eller i en beräknad kolumn utan filter och minimal kontext.

Anta till exempel att du skapar den här enkla formeln som summerar värdena i kolumnen Vinst i tabellen Försäljning :

=SUMMA('Försäljning'[Vinst])

Om du använder den här formeln i en beräknad kolumn i tabellen Försäljning blir resultatet för formeln detsamma för hela tabellen eftersom frågekontexten för formeln alltid är hela datauppsättningen i tabellen Försäljning . Resultatet blir vinst för alla regioner, alla produkter, alla år och så vidare.

Vanligtvis vill du dock inte se samma resultat hundratals gånger, utan i stället vill du få vinsten för ett visst år, ett visst land eller en viss region, en viss produkt eller en kombination av dessa, och sedan få en totalsumma.

I en pivottabell är det enkelt att ändra kontext genom att lägga till eller ta bort kolumn- och radrubriker och genom att lägga till eller ta bort utsnitt. Du kan skapa en formel som den ovan, i ett mått, och sedan släppa den i en pivottabell. När du lägger till kolumn- eller radrubriker i pivottabellen ändrar du frågekontexten i vilken måttet utvärderas. Segmenterings- och filtreringsåtgärder påverkar också kontexten. Därför utvärderas samma formel, som används i en pivottabell, i olika frågekontext för varje cell.

Överst på sidan

Filterkontext

Filterkontext läggs till när du anger filterbegränsningar för uppsättningen värden som tillåts i en kolumn eller tabell, genom att använda argument till en formel. Filterkontext gäller ovanpå andra kontexter, till exempel radkontext eller frågekontext.

En pivottabell beräknar till exempel sina värden för varje cell baserat på rad- och kolumnrubrikerna, så som beskrivs i föregående avsnitt om frågekontext. I de mått eller beräknade kolumner som du lägger till i pivottabellen kan du emellertid ange filteruttryck som styr vilka värden som används av formeln. Du kan också selektivt ta bort filtren för särskilda kolumner.

Mer information om hur du skapar filter i formler finns i Filterfunktioner.

Ett exempel på hur filter kan rensas för att skapa totalsummor finns i funktionen ALL.

Exempel på hur du selektivt rensar och använder filter i formler finns i funktionen ALLEXCEPT

Därför måste du granska definitionen av mått eller formler som används i en pivottabell så att du är medveten om filterkontexten när du tolkar resultaten av formler.

Överst på sidan

Bestämma kontext i formler

När du skapar en formel kontrollerar Power Pivot för Excel först den allmänna syntaxen och sedan kontrollerna av namnen på de kolumner och tabeller som du anger mot möjliga kolumner och tabeller i det aktuella sammanhanget. Om det inte går att hitta de kolumner och tabeller som anges av formeln i Power Pivot får du ett fel.

Kontexten bestäms enligt beskrivningen i föregående avsnitt med hjälp av de tillgängliga tabellerna i arbetsboken, relationerna mellan tabellerna och de filter som har tillämpats.

Om du till exempel precis har importerat data till en ny tabell och inte har tillämpat några filter, är hela uppsättningen kolumner i tabellen en del av det aktuella sammanhanget. Om du har flera tabeller som är länkade med relationer och du arbetar i en pivottabell som har filtrerats genom att kolumnrubriker lagts till med utsnitt, innehåller kontexten de relaterade tabellerna och eventuella filter för dessa data.

Kontext är ett kraftfullt begrepp som även kan göra det svårt att felsöka formler. Vi rekommenderar att du börjar med enkla formler och relationer för att se hur kontexten fungerar och sedan börjar experimentera med enkla formler i pivottabeller. Följande avsnitt innehåller också några exempel på hur formler använder olika typer av kontext för att dynamiskt returnera resultat.

Exempel på kontext i formler

  • Funktionen RELATED utökar kontexten för den aktuella raden så att värden inkluderas i en relaterad kolumn. Du kan då utföra sökningar. Exemplet i det här avsnittet illustrerar samspelet mellan filtrering och radkontext.
  • Med FILTER-funktionen kan du ange vilka rader som ska ingå i det aktuella sammanhanget. Exemplen i det här avsnittet visar också hur du bäddar in filter i andra funktioner som utför mängder.
  • Funktionen ALL anger kontext i en formel. Du kan använda den för att åsidosätta filter som tillämpas som ett resultat av frågekontexten.
  • Med funktionen ALLEXCEPT kan du ta bort alla filter utom ett som du anger. Båda avsnitten innehåller exempel som hjälper dig att skapa formler och förstå komplexa sammanhang.
  • Med funktionerna EARLIER och EARLIEST kan du loopa igenom tabeller genom att utföra beräkningar samtidigt som du refererar till ett värde från en inre loop. Om du är bekant med begreppet rekursion och med inre och yttre loopar, kommer du att uppskatta den kraft som funktionerna EARLIER och EARLIEST ger. Om du inte har använt de här begreppen tidigare bör du följa stegen i exemplet noggrant och se hur de inre och yttre kontexterna används i beräkningarna.

Överst på sidan

Referensintegritet

I det här avsnittet diskuteras några avancerade begrepp som rör saknade värden i Power Pivot-tabeller som är sammankopplade med relationer. Det här avsnittet kan vara användbart om du har arbetsböcker med flera tabeller och komplexa formler och vill ha hjälp med att förstå resultatet.

Om du inte har använt begrepp för relationsdata tidigare rekommenderar vi att du först läser det inledande avsnittet Relationsöversikt.

Referensintegritet och PowerPivot-relationer

Power Pivot kräver inte att referensintegritet används mellan två tabeller för att en giltig relation ska kunna definieras. I stället skapas en tom rad i "en"-änden av varje en-till-många-relation och används för att hantera alla icke-matchande rader från den relaterade tabellen. Den fungerar effektivt som en yttre SQL-koppling.

Om du grupperar data efter en sida av relationen i pivottabeller grupperas alla omatchade data på många-sidan av relationen tillsammans och tas med i summor med en tom radrubrik. Den tomma rubriken motsvarar ungefär "okänd medlem".

Förstå den okända medlemmen

Begreppet okänd medlem är förmodligen bekant för dig om du har arbetat med flerdimensionella databassystem, till exempel SQL Server Analysis Services. Följande exempel förklarar vad den okända medlemmen är och hur det påverkar beräkningar om du inte känner till termen.

Anta att du skapar en beräkning som summerar försäljningen per månad för varje butik, men att en kolumn i tabellen Försäljning saknar ett värde för butiksnamnet. Med tanke på att tabellerna för Butik och Försäljning är anslutna via butiksnamnet, vad förväntar du dig ska hända i formeln? Hur ska pivottabellgruppen eller visa försäljningssiffror som inte är relaterade till en befintlig butik?

Det här problemet är vanligt i informationslager, där stora tabeller med faktadata måste relateras logiskt till dimensionstabeller som innehåller information om lager, regioner och andra attribut som används för att kategorisera och beräkna fakta. Lös problemet genom att tillfälligt tilldela den okända medlemmen alla nya fakta som inte är relaterade till en befintlig entitet. Det är därför som orelaterade fakta visas grupperade i en pivottabell under en tom rubrik.

Behandling av tomma värden jämfört med tomma rader

Tomma värden skiljer sig från tomma rader som läggs till för att rymma den okända medlemmen. Det tomma värdet är ett särskilt värde som används för att representera nullvärden, tomma strängar och andra saknade värden. Mer information om det tomma värdet, liksom andra DAX-datatyper, finns i Datatyper i datamodeller.

Överst på sidan