DAX (Data Analysis Expressions) låter lite skrämmande i början, men låt inte namnet lura dig. DAX grunder är verkligen ganska lätt att förstå. Första saker först - 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 är utformade 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 ett tecken skriver du ett likhetstecken, följt av ett funktionsnamn eller uttryck, och alla obligatoriska värden eller argument. Precis som 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 dock åt på följande 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å sammanhang.
-
DAX innehåller en typ av funktion som returnerar en tabell som resultat, i stället för ett enda värde. De här funktionerna kan användas för att mata in andra funktioner.
-
Tidsinformationsfunktioner i DAX tillåter beräkningar med datumintervall och jämför resultaten över parallella perioder.
Så här använder du DAX-formler
Du kan skapa formler i Power Pivot antingen i beräknadekolumner eller i beräknade fields.
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 kan du skapa en DAX-formel som definierar kolumnvärdena. Om du tar med den Power Pivot tabellen i en pivottabell (eller ett pivotdiagram) kan den beräknade kolumnen användas på samma sätt som i andra datakolumner.
Formlerna i beräknade kolumner liknar de formler som du skapar i Excel. Till skillnad från i Excel kan du dock inte skapa en annan formel för olika rader i en tabell. I stället tillämpas DAX-formeln automatiskt på hela kolumnen.
När en kolumn innehåller en formel beräknas värdet för varje rad. Resultatet beräknas för kolumnen så fort du skapar formeln. Kolumnvärden beräknas bara om om underliggande data uppdateras eller om manuell beräkning används.
Du kan skapa beräknade kolumner som baseras på mått och andra beräknade kolumner. Undvik dock 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 anropa ett mått 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 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 kan du använda 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 vara olika i varje cell.
Definitionen av måttet som du skapar sparas 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, till exempel Excel, innehåller ett formelfält som gör det enklare att skapa och redigera formler, och funktionen Komplettera automatiskt, för att minimera inmatnings- och syntaxfel.
Så här anger du namnet på en tabell Börja skriva namnet på tabellen. Komplettera automatiskt för formel innehåller en listruta som innehåller giltiga namn som börjar med de bokstäverna.
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 hur du använder 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.
Power Pivot lägger inte till den avslutande parentesen av funktioner eller matchar parenteser automatiskt. Kontrollera att varje funktion är syntaktisk korrekt eller att du inte kan spara eller använda formeln.
Använda flera funktioner i en formel
Du kan kapsla in funktioner, vilket innebär att du använder resultaten 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 dock göra det svårt att skapa eller felsöka formler.
Många DAX-funktioner är utformade för att endast användas som kapslade funktioner. Dessa funktioner returnerar en tabell som därför inte kan sparas direkt. den ska tillhandahållas som indata till en tabellfunktion. Funktionerna SUMMAX, MEDELX och MINX kräver till exempel alla en tabell som första argument.
Obs!: Vissa begränsningar för kapsling av funktioner finns inom mått, för att säkerställa att prestanda inte påverkas av de många beräkningar som krävs av beroenden mellan kolumner.
Jämföra DAX-funktioner och Excel-funktioner
Dax-funktionsbiblioteket baseras på Excel-funktionsbiblioteket, men biblioteken har många skillnader. 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-funktioner, men har ändrats för att ta olika typer av indata, och i vissa fall kan en annan datatyp returneras. I allmänhet kan du inte använda DAX-funktioner i en Excel-formel eller använda Excel-formler i Power Pivot utan några ändringar.
-
DAX-funktioner tar aldrig en cellreferens eller ett område som referens, men i stället tar DAX-funktioner en kolumn eller tabell som referens.
-
DAX-datum- och tidsfunktioner returnerar datatypen datetime. Datum- och tidsfunktionerna i Excel returnerar däremot ett heltal som representerar 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.
-
DAX innehåller nya uppslagsfunktioner som liknar matris- och vektoruppslagsfunktionerna i Excel. DAX-funktionerna kräver dock 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 ändrar DAX hela kolumnen till den datatyp som bäst passar 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 data i beräkningar eller pivottabeller konverteras data till någon av de Power Pivot datatyperna. En lista över datatyperna finns i Datatyper i Datamodeller.
Tabelldatatypen är en ny datatyp i DAX som används som indata eller utdata för många nya funktioner. Funktionen FILTER använder till exempel 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
Det Power Pivot fönstret är ett område där du kan arbeta med flera tabeller med data och koppla samman tabellerna i en relationsmodell. I den här datamodellen är tabeller kopplade till varandra genom relationer, vilket gör att du kan skapa korrelationer 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 värdet i en enda cell. Om du vill styra raderna från den relaterade tabellen kan du 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 pivottabellerna även innehålla data från flera kolumner som kommer från olika tabeller.
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 bara på 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 är sammankopplade med en relation förväntas du kontrollera att de två kolumnerna som används som nycklar har värden som matchar, för det mesta. Eftersom referensintegritet inte används i Power Pivot är det möjligt att ha värden som inte matchar i en nyckelkolumn och ändå skapa en relation. Förekomsten av tomma eller icke matchande värden kan dock påverka resultatet av formler och utseendet på pivottabeller. Mer information finns i Uppslag i Power Pivot-formler.
-
När du länkar tabeller med hjälp av relationer förstorar du omfattningen eller c-text som formlerna utvärderas i. Formler i en pivottabell kan till exempel påverkas av eventuella filter eller kolumn- och radrubriker i pivottabellen. Du kan skriva formler som ändrar kontext, men kontexten kan också leda till att resultaten ändras på sätt som du kanske inte tror. Mer information finns i Sammanhang i DAX-formler.
Uppdatera resultatet av formler
Data r efresh och omberäkning ä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.
Uppdatering av data är processen 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 också schemalägga en automatisk uppdatering från externa källor.
Omberäkning är processen att uppdatera resultatet av formler för att återspegla eventuella ändringar av 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 ska 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 kontexten för pivottabellen eller pivotdiagrammet. Formeln beräknas också om när du ändrar en rad- eller kolumnrubrik som påverkar filter på data eller när du uppdaterar pivottabellen manuellt.
Felsöka formler
Fel när du skriver formler
Om du får ett felmeddelande när du definierar en formel kan formeln innehålla antingen ett syntaktiskt fel, ett semantiskt fel eller ett beräkningsfel.
Syntaktiska fel är det enklaste att lösa. De involverar vanligtvis en parentes eller kommatecken som saknas. Mer information om syntaxen för enskilda funktioner finns i dax-funktionsreferensen.
Den andra typen av fel inträffar när syntaxen är korrekt, men värdet eller kolumnen som refereras inte stämmer i formelns sammanhang. Sådana semantiska fel och beräkningsfel kan orsakas av något av följande problem:
-
Formeln refererar till en icke-befintlig kolumn, tabell eller funktion.
-
Formeln verkar vara korrekt, men när datamotorn hämtar data hittar den en typfelmatchning och upplöser ett fel.
-
Formeln skickar ett felaktigt tal eller en 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 faktiska data att använda för beräkningar.
I de första fyra fallen flaggar DAX hela kolumnen som innehåller den ogiltiga formeln. I det sista fallet gråtonar DAX kolumnen för att ange att kolumnen är i ett obearbetat tillstånd.
Felaktiga eller ovanliga resultat vid rangordning eller ordning av kolumnvärden
När du rangordnar eller beställer en kolumn som innehåller värdet NaN (inte ett tal) kan du få fel 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 ordning och rangordning genom att jämföra numeriska värden. Men NaN kan inte jämföras med andra tal i kolumnen.
För att säkerställa rätt resultat kan du använda villkorssatser med funktionen OM för att testa NaN-värden och returnera ett numeriskt 0-värde.
Kompatibilitet med tabellmodeller i Analysis Services och DirectQuery-läge
I allmänhet är 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 verifieringsfel när du distribuerar modellen i DirectQuery-läge, eftersom formeln innehåller en DAX-funktion som inte stöds mot en relationsdatakälla.
Mer information finns i dokumentationen för tabellmodellering i Analysis Services i SQL Server 2012 BooksOnline.