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 för att skapa avancerade formler, dynamiska analyser och för felsökning av problem i formler.
I det här avsnittet definieras olika typer av kontext: radkontext, frågekontext och filterkontext. Här förklaras hur kontext 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å sammanhang.
Förstå kontext
Formler i Power Pivot kan påverkas av filtren som används i en pivottabell, av relationer mellan tabeller och av filter som används i formler. Kontext är det som gör det möjligt att utföra dynamisk analys. Att förstå kontext är viktigt för att skapa och felsöka formler.
Det finns olika typer av kontext: radkontext, frågekontext och filterkontext.
Radkontext kan ses som "aktuell rad". Om du har skapat en beräknad kolumn består radkontexten av värdena på varje enskild rad och värden i kolumner som är relaterade till den aktuella raden. Det finns också vissa funktioner (TIDIGARE och TIDIGAST) 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ågekontexten refererar till den delmängd data som implicit skapas 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.
Radkontext
Om du skapar en formel i en beräknad kolumn innehåller radkontexten för formeln värdena från alla kolumner i den aktuella raden. Om tabellen är relaterad till en annan tabell innehåller innehållet även alla värden från den andra tabellen som är relaterade till den aktuella raden.
Anta till exempel att du skapar en beräknad kolumn, =[Frakt] + [Skatt], som lägger ihop 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 med hjälp av områdesnotation och du kan inte referera till något godtyckligt enstaka värde i en tabell eller cell. Du måste alltid arbeta med tabeller och kolumner.
Radkontexten följer automatiskt relationerna mellan tabellerna för att avgöra vilka rader i relaterade tabeller som är kopplade till den aktuella raden.
I följande formel används till exempel funktionen RELATED för att hämta ett skattevärde från en relaterad tabell, baserat på det område som ordern levererades till. Momsvärdet bestäms med hjälp av värdet för region i den aktuella tabellen, leta upp regionen i den relaterade tabellen och sedan hämta momssatsen för regionen från den relaterade tabellen.
= [Frakt] + RELATED('Region'[TaxRate])
Den här formeln hämtar helt enkelt momssatsen för den aktuella regionen från tabellen Region. Du behöver inte känna till eller ange nyckeln som ansluter tabellerna.
Sammanhang för flera rader
DAX innehåller dessutom funktioner som itererar beräkningar över en tabell. Dessa funktioner kan ha flera aktuella rader och aktuella radkontexter. I programmeringstermer kan du skapa formler som återkommer över en inre och yttre slinga.
Anta till exempel att arbetsboken innehåller tabellen Produkter och tabellen Försäljning . Du kanske vill gå igenom hela försäljningstabellen, som är full av transaktioner som involverar flera produkter, och hitta det största antalet beställda för varje produkt i en enda transaktion.
I Excel kräver den här beräkningen en serie mellanliggande sammanfattningar, som måste återskapas om data ändras. Om du är en privilegierad användare av Excel kanske du kan skapa matrisformler som skulle göra jobbet. Alternativt kan du skriva kapslade undermarkeringar i en relationsdatabas.
Men med DAX kan du skapa en enda formel som returnerar rätt värde och resultaten uppdateras automatiskt när du lägger till data i tabellerna.
=MAXX(FILTER(Försäljning,[ProdKey]=EARLIER([ProdKey])),Försäljning[Orderqty])
En detaljerad genomgång av den här formeln finns i funktionen TIDIGARE.
I korthet lagrar funktionen EARLIER radkontexten från den åtgärd som föregick den aktuella åtgärden. Funktionen lagrar alltid två sammanhangsuppsättningar i minnet: en uppsättning kontext representerar den aktuella raden för formelns inre slinga och en annan uppsättning sammanhang representerar den aktuella raden för formelns yttre slinga. DAX matar automatiskt in värden mellan de två looparna så att du kan skapa komplexa mängder.
Frågekontext
Frågekontext refererar till den delmängd data som implicit hämtas för en formel. När du släpper ett mått eller annat värdefält i en cell i en pivottabell undersöker den Power Pivot motorn rad- och kolumnrubrikerna, utsnitten och rapportfiltren för att avgöra sammanhanget. Sedan gör Power Pivot de beräkningar som krävs för att fylla i varje cell i pivottabellen. Datauppsättningen som hämtas ä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 grupper 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 kommer att ha vinst för alla regioner, alla produkter, alla år och så vidare.
Men vanligtvis vill du inte se samma resultat hundratals gånger, utan istället vill du få vinsten för ett visst år, ett visst land eller en viss region, en viss produkt eller någon 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 som måttet utvärderas i. Åtgärder för att skära och filtrera påverkar även kontexten. Därför utvärderas samma formel, som används i en pivottabell, i olika frågekontexter för varje cell.
Filterkontext
Filterkontext läggs till när du anger filtervillkor för den uppsättning värden som tillåts i en kolumn eller tabell med hjälp av argument i en formel. Filterkontexten gäller utöver andra sammanhang, till exempel radkontext eller frågekontext.
En pivottabell beräknar till exempel sina värden för varje cell baserat på rad- och kolumnrubrikerna, enligt beskrivningen i föregående avsnitt om frågekontext. Men inom de mått eller beräknade kolumner som du lägger till i pivottabellen kan du ange filteruttryck för att styra de värden som används av formeln. Du kan också selektivt ta bort filtren för vissa kolumner.
Mer information om hur du skapar filter i formler finns i Filtrera funktioner.
Ett exempel på hur filter kan rensas för att skapa totalsummor finns i funktionen ALL.
Exempel på hur du selektivt rensar och tillämpar 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 resultatet av formler.
Bestämma kontext i formler
När du skapar en formel söker Power Pivot för Excel först efter allmän syntax och kontrollerar sedan namnen på kolumner och tabeller som du anger mot möjliga kolumner och tabeller i det aktuella sammanhanget. Om Power Pivot inte kan hitta kolumnerna och tabellerna som anges i formeln får du ett felmeddelande.
Kontexten bestäms enligt beskrivningen i föregående avsnitt med hjälp av tillgängliga tabeller i arbetsboken, eventuella relationer mellan tabellerna och eventuella filter som har tillämpats.
Om du till exempel precis har importerat vissa data till en ny tabell och inte har använt 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 efter relationer och du arbetar i en pivottabell som har filtrerats genom att lägga till kolumnrubriker och använda utsnitt, omfattar sammanhanget relaterade tabeller och eventuella filter på data.
Kontext är ett kraftfullt koncept som också 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 kontext fungerar och sedan börjar experimentera med enkla formler i pivottabeller. I följande avsnitt finns också några exempel på hur formler använder olika typer av sammanhang för dynamiskt returneringar av resultat.
Exempel på sammanhang i formler
-
Funktionen RELATED utökar kontexten för den aktuella raden så att den inkluderar värden i en relaterad kolumn. På så sätt kan du utföra uppslag. Exemplet i det här avsnittet illustrerar interaktionen mellan filtrering och radkontext.
-
Med funktionen FILTER 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.
-
Med funktionen ALL anges kontext i en formel. Du kan använda det för att åsidosätta filter som används som 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 vägrar dig genom att skapa formler och förstå komplexa sammanhang.
-
Med funktionerna TIDIGARE och TIDIGAST kan du bläddra igenom tabeller genom att utföra beräkningar, samtidigt som du refererar till ett värde från en inre slinga. Om du är bekant med begreppet rekursion och 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 för att se hur de inre och yttre kontexterna används i beräkningar.
Referensintegritet
I det här avsnittet beskrivs några avancerade begrepp relaterade till saknade värden i Power Pivot tabeller som är kopplade till relationer. Det här avsnittet kan vara användbart för dig 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 relationsdatakoncept tidigare rekommenderar vi att du först läser det inledande avsnittet Relationsöversikt.
Referensintegritet och Power Pivot relationer
Power Pivot kräver inte att referensintegritet tillämpas mellan två tabeller för att definiera en giltig relation. I stället skapas en tom rad i 1-änden av varje 1:N-relation och används för att hantera alla rader som inte matchar från den relaterade tabellen. Den fungerar effektivt som en SQL-yttre koppling.
Om du grupperar data på ena sidan av relationen i pivottabeller grupperas alla omatchade data på många-sidan av relationen tillsammans och inkluderas 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 antagligen bekant för dig om du har arbetat med flerdimensionella databassystem, till exempel SQL Server Analysis Services. Om termen är ny för dig förklarar följande exempel vad den okända medlemmen är och hur den påverkar beräkningar.
Anta att du skapar en beräkning som summerar månadsförsäljningen för varje butik, men en kolumn i tabellen Försäljning saknar ett värde för butikens namn. Med tanke på att tabellerna för Store och Försäljning är kopplade med butikens namn, vad skulle du förvänta dig att hända i formeln? Hur ska pivottabellgruppen eller försäljningssiffrorna som inte är relaterade till en befintlig butik visas?
Det här problemet är vanligt i datalager, där stora tabeller med faktadata måste vara logiskt relaterade till dimensionstabeller som innehåller information om butiker, regioner och andra attribut som används för att kategorisera och beräkna fakta. För att lösa problemet tilldelas alla nya fakta som inte är relaterade till en befintlig enhet tillfälligt till den okända medlemmen. Därför visas orelaterade fakta grupperade i en pivottabell under en tom rubrik.
Behandling av tomma värden jämfört med den tomma raden
Tomma värden skiljer sig från de tomma rader som läggs till för att rymma den okända medlemmen. Det tomma värdet är ett specialvärde som används för att representera null-värden, tomma strängar och andra saknade värden. Mer information om det tomma värdet och andra DAX-datatyper finns i Datatyper i datamodeller.