DAX (Data Analysis Expressions) låter lite skrämmande till en början, men låt inte namnet lura dig. Grunderna i DAX är egentligen ganska lätta att förstå. En sak i taget – DAX är INTE ett programmeringsspråk. DAX är ett formelspråk. Du kan använda DAX för att definiera anpassade beräkningar för beräknade kolumner och för mått (kallas även beräknade fält). DAX innehåller några av de funktioner som används i Excel-formler och ytterligare funktioner som utformats för att fungera med relationsdata och utföra dynamisk aggregering.
Förstå DAX-formler
DAX-formler påminner mycket om Excel-formler. Om du vill skapa en sådan anger du ett likhetstecken, följt av ett funktionsnamn eller ett funktionsuttryck och eventuella obligatoriska värden eller argument. Precis som i Excel innehåller DAX en mängd olika funktioner som du kan använda för att arbeta med strängar, utföra beräkningar med datum och tider eller skapa villkorsstyrda värden.
DAX-formler skiljer sig emellertid åt på följande viktiga sätt:
- Om du vill anpassa beräkningar rad för rad innehåller DAX funktioner som gör att du kan använda det aktuella radvärdet eller ett relaterat värde för att utföra beräkningar som varierar beroende på kontext.
- DAX innehåller en typ av funktion som returnerar en tabell som resultat i stället för ett enskilt värde. De här funktionerna kan användas för att ge indata till andra funktioner.
- Med tidsinformationsfunktionernai DAX kan man göra beräkningar med hjälp av datumintervall och jämföra resultaten över parallella perioder.
Var du använder DAX-formler
Du kan skapa formler i PowerPivot i beräknade kolumner eller i beräknade fält.
Beräknade kolumner
En beräknad kolumn är en kolumn som du lägger till i en befintlig Power Pivot-tabell. I stället för att klistra in eller importera värden i kolumnen skapar du en DAX-formel som definierar kolumnvärdena. Om du tar med Power Pivot-tabellen i en pivottabell (eller ett pivotdiagram) kan den beräknade kolumnen användas på samma sätt som andra datakolumner.
Formlerna i beräknade kolumner liknar de formler du skapar i Excel. Till skillnad från Excel kan du dock inte skapa olika formler för olika rader i en tabell. I stället tillämpas DAX-formeln automatiskt på hela kolumnen.
Om en kolumn innehåller en formel beräknas värdet för varje rad. Resultatet beräknas för kolumnen så snart du har skapat formeln. Kolumnvärdena beräknas bara om underliggande data uppdateras eller om manuella omberäkningar används.
Du kan skapa beräknade kolumner som baseras på mått och andra beräknade kolumner. Undvik att använda samma namn för en beräknad kolumn och ett mått eftersom det kan leda till förvirrande resultat. När du refererar till en kolumn är det bäst att använda en fullständigt kvalificerad kolumnreferens för att undvika att ett mått anropas av misstag.
Mer detaljerad information finns i Beräknade kolumner i Power Pivot.
Åtgärder
Ett mått är en formel som skapats specifikt för användning i en pivottabell (eller ett pivotdiagram) som använder Power Pivot-data. Mått kan baseras på standardaggregeringsfunktioner, till exempel ANTAL eller SUMMA, eller så kan du definiera en egen formel med hjälp av DAX. Ett mått används i området Värden i en pivottabell. Om du vill placera beräknade resultat i ett annat område i en pivottabell använder du en beräknad kolumn i stället.
När du definierar en formel för ett explicit mått händer ingenting förrän du lägger till måttet i en pivottabell. När du lägger till måttet utvärderas formeln för varje cell i området Värden i pivottabellen. Eftersom ett resultat skapas för varje kombination av rad- och kolumnrubriker kan resultatet för måttet bli olika i varje cell.
Definitionen för det mått du skapar sparas tillsammans med källdatatabellen. Den visas i fältlistan för pivottabellen och är tillgänglig för alla användare av arbetsboken.
Mer detaljerad information om mått finns i Mått i Power Pivot.
Skapa formler med hjälp av formelfältet
Power Pivot, liksom Excel, innehåller ett formelfält som gör det enklare att skapa och redigera formler, och funktionen Komplettera automatiskt för att minimera skriv- och syntaxfel.
Ange namnet på en tabell Börja skriva namnet på tabellen. Komplettera automatiskt för formel innehåller en listruta med giltiga namn som börjar med dessa bokstäver.
Så här anger du namnet på en kolumn Skriv en hakparentes och välj sedan kolumnen i listan med kolumner i den aktuella tabellen. För en kolumn från en annan tabell börjar du skriva de första bokstäverna i tabellnamnet och väljer sedan kolumnen i listrutan Komplettera automatiskt.
Mer information och en genomgång av hur du skapar formler finns i Skapa formler för beräkningar i Power Pivot.
Tips om att använda Komplettera automatiskt
Du kan använda Komplettera automatiskt för formel mitt i en befintlig formel med kapslade funktioner. Texten omedelbart före insättningspunkten används för att visa värden i listrutan och all text efter insättningspunkten ändras inte.
Definierade namn som du skapar för konstanter visas inte i listrutan Komplettera automatiskt, men du kan fortfarande skriva dem.
I Power Pivot läggs inte den avslutande parentesen för funktioner till och matchar inte heller parenteser automatiskt. Du bör kontrollera att varje funktion är syntaktiskt korrekt, annars kan du inte spara eller använda formeln.
Använda flera funktioner i en formel
Du kan kapsla funktioner, vilket innebär att du använder resultatet från en funktion som ett argument för en annan funktion. Du kan kapsla upp till 64 funktionsnivåer i beräknade kolumner. Kapsling kan emellertid göra det svårt att skapa eller felsöka formler.
Många DAX-funktioner är utformade för att användas enbart som kapslade funktioner. De här funktionerna returnerar en tabell som inte kan sparas direkt. Den bör anges som indata till en tabellfunktion. Funktionerna SUMMAX, MEDELX och MINX kräver till exempel en tabell som första argument.
Obs
Det finns vissa begränsningar för kapsling av funktioner i mått, för att säkerställa att prestanda inte påverkas av de många beräkningar som krävs på grund av beroenden mellan kolumner.
Jämförelse av DAX-funktioner och Excel-funktioner
DAX-funktionsbiblioteket baseras på Excel-funktionsbiblioteket, men det finns många skillnader mellan biblioteken. I det här avsnittet sammanfattas skillnaderna och likheterna mellan Excel-funktioner och DAX-funktioner.
- Många DAX-funktioner har samma namn och samma allmänna beteende som Excel-funktionerna, men har ändrats så att de kan ta emot andra typer av indata, och kan i vissa fall returnera en annan datatyp. I allmänhet kan du inte använda DAX-funktioner i en Excel-formel eller använda Excel-formler i Power Pivot utan vissa ändringar.
- DAX-funktioner använder aldrig en cellreferens eller ett område som referens, utan i stället använder DAX-funktioner en kolumn eller tabell som referens.
- DAX-datum- och tidsfunktioner returnerar en datetime-datatyp. Datum- och tidsfunktionerna i Excel returnerar däremot ett heltal som motsvarar ett datum som ett serienummer.
- Många av de nya DAX-funktionerna returnerar antingen en tabell med värden eller gör beräkningar baserade på en tabell med värden som indata. Excel har däremot inga funktioner som returnerar en tabell, men vissa funktioner kan fungera med matriser. Möjligheten att enkelt referera till fullständiga tabeller och kolumner är en ny funktion i Power Pivot.
- I DAX finns nya sökfunktioner som liknar matris- och vektoruppslagsfunktionerna i Excel. DAX-funktionerna kräver emellertid att en relation upprättas mellan tabellerna.
- Data i en kolumn förväntas alltid ha samma datatyp. Om data inte är av samma typ, ändras hela kolumnen till den datatyp som bäst kan hantera alla värden.
DAX-datatyper
Du kan importera data till en Power Pivot-datamodell från många olika datakällor som kan ha stöd för olika datatyper. När du importerar eller läser in data och sedan använder dem i beräkningar eller i pivottabeller konverteras data till någon av Power Pivot-datatyperna. En lista med datatyper finns i Datatyper i datamodeller.
Datatypen table är en ny datatyp i DAX som används som indata eller utdata till många nya funktioner. Exempelvis använder FILTER-funktionen en tabell som indata och matar ut en annan tabell som bara innehåller de rader som uppfyller filtervillkoren. Genom att kombinera tabellfunktioner med aggregeringsfunktioner kan du utföra komplexa beräkningar över dynamiskt definierade datauppsättningar. Mer information finns i Aggregeringar i Power Pivot.
Formler och relationsmodellen
I Power Pivot-fönstret kan du arbeta med flera tabeller med data och koppla tabellerna i en relationsmodell. I den här datamodellen är tabeller kopplade till varandra med hjälp av relationer, vilket gör att du kan skapa samband med kolumner i andra tabeller och skapa mer intressanta beräkningar. Du kan till exempel skapa formler som summerar värden för en relaterad tabell och sedan spara det värdet i en enda cell. Om du vill styra raderna från den relaterade tabellen kan du också använda filter på tabeller och kolumner. Mer information finns i Relationer mellan tabeller i en datamodell.
Eftersom du kan länka tabeller med hjälp av relationer kan pivottabeller även innehålla data från flera kolumner som kommer från olika tabeller.
Men eftersom formler kan fungera med hela tabeller och kolumner måste du utforma beräkningar på ett annat sätt än i Excel.
- I allmänhet tillämpas en DAX-formel i en kolumn alltid på hela uppsättningen värden i kolumnen (aldrig på bara några få rader eller celler).
- Tabeller i Power Pivot måste alltid ha samma antal kolumner på varje rad, och alla rader i en kolumn måste innehålla samma datatyp.
- När tabeller kopplas samman med en relation ska du se till att de två kolumner som används som nycklar har värden som i stort sett matchar. Eftersom referensintegritet inte används i Power Pivot är det möjligt att ha icke-matchande värden i en nyckelkolumn och ändå skapa en relation. Förekomsten av tomma eller icke-matchande värden kan emellertid påverka resultatet av formler och utseendet på pivottabeller. Mer information finns i Uppslag i PowerPivot-formler.
- När du länkar tabeller med hjälp av relationer förstorar du omfattningen eller sammanhanget där formlerna utvärderas. Formler i en pivottabell kan till exempel påverkas av alla filter eller kolumn- och radrubriker i pivottabellen. Du kan skriva formler som manipulerar sammanhanget, men sammanhanget kan också göra att resultatet ändras på ett sätt som du kanske inte hade räknat med. Mer information finns i Kontext i DAX-formler.
Uppdatera resultatet av formler
Uppdatering och omberäkning av data är två separata men relaterade åtgärder som du bör förstå när du utformar en datamodell som innehåller komplexa formler, stora mängder data eller data som hämtas från externa datakällor.
Att uppdatera data innebär att uppdatera data i arbetsboken med nya data från en extern datakälla. Du kan uppdatera data manuellt med intervall som du anger. Om du har publicerat arbetsboken på en SharePoint-webbplats kan du schemalägga en automatisk uppdatering från externa källor.
Omberäkning är processen att uppdatera resultatet av formler för att återspegla ändringar i själva formlerna och för att återspegla dessa ändringar i underliggande data. Omberäkning kan påverka prestanda på följande sätt:
- För en beräknad kolumn bör resultatet av formeln alltid beräknas om för hela kolumnen när du ändrar formeln.
- För ett mått beräknas inte resultatet av en formel förrän måttet placeras i pivottabellens eller pivotdiagrammets kontext. Formeln beräknas också om när du ändrar en rad- eller kolumnrubrik som påverkar datafiltren eller när du uppdaterar pivottabellen manuellt.
Felsöka formler
Fel när formler skrivs
Om du får ett felmeddelande när du definierar en formel kan formeln innehålla antingen ett syntaktiskt fel, semantiskt fel eller ett beräkningsfel.
Syntaktiska fel är enklast att lösa. De innehåller vanligtvis en parentes eller ett kommatecken. Mer information om syntaxen för enskilda funktioner finns i funktionsreferensen för DAX.
Den andra typen av fel uppstår när syntaxen är korrekt, men värdet eller kolumnen som refereras inte är meningsfull i formelns sammanhang. Sådana semantiska fel och beräkningsfel kan orsakas av något av följande problem:
- Formeln refererar till en kolumn, tabell eller funktion som inte finns.
- Formeln verkar vara korrekt, men när datamotorn hämtar data hittar den ett typmatchningsfel och genererar ett fel.
- Formeln skickar ett felaktigt antal eller en felaktig typ av parametrar till en funktion.
- Formeln refererar till en annan kolumn som innehåller ett fel och därför är dess värden ogiltiga.
- Formeln refererar till en kolumn som inte har bearbetats, vilket innebär att den har metadata men inga data som kan användas för beräkningar.
I de första fyra fallen flaggas hela kolumnen som innehåller den ogiltiga formeln. I det sista fallet gör DAX kolumnen nedtonad för att ange att kolumnen är i ett obearbetat tillstånd.
Felaktiga eller ovanliga resultat vid rangordning eller sortering av kolumnvärden
När du rangordnar eller sorterar en kolumn som innehåller värdet NaN (inte ett tal) kan du få felaktiga eller oväntade resultat. När en beräkning till exempel dividerar 0 med 0 returneras ett NaN-resultat.
Det beror på att formelmotorn utför sortering och rangordning genom att jämföra numeriska värden. NaN kan dock inte jämföras med andra tal i kolumnen.
För att säkerställa korrekta resultat kan du använda villkorssatser med OM-funktionen för att söka efter NaN-värden och returnera ett numeriskt 0-värde.
Kompatibilitet med Analysis Services-tabellmodeller och DirectQuery-läge
I allmänhet är de DAX-formler som du skapar i Power Pivot helt kompatibla med Analysis Services-tabellmodeller. Men om du migrerar din Power Pivot-modell till en Analysis Services-instans och sedan distribuerar modellen i DirectQuery-läge finns det vissa begränsningar.
- Vissa DAX-formler kan returnera olika resultat om du distribuerar modellen i DirectQuery-läge.
- Vissa formler kan orsaka valideringsfel när du distribuerar modellen till DirectQuery-läge, eftersom formeln innehåller en DAX-funktion som inte stöds mot en relationsdatakälla.
Mer information finns i Analysis Services tabellmodelleringsdokumentation i SQL Server 2012 BooksOnline.