ÖVERSIKT ÖVER DAX

Data Analysis Expressions (DAX) är ett formeluttrycksspråk som används i Analysis Services, Power BI och Power Pivot i Excel. DAX-formler innehåller funktioner, operatorer och värden för att utföra avancerade beräkningar och frågor om data i relaterade tabeller och kolumner i tabelldatamodeller.

Den här artikeln innehåller bara en grundläggande introduktion till de viktigaste begreppen i DAX. Det beskriver DAX som det gäller för alla produkter som använder det. Vissa funktioner kanske inte gäller för vissa produkter eller användningsfall. Se produktdokumentationen som beskriver dess specifika implementering av DAX.

Beräkningar

DAX-formler används i mått, beräknade kolumner, beräknade tabeller och säkerhet på radnivå.

Mått

Mått är dynamiska beräkningsformler där resultatet ändras beroende på kontext. Mått används i rapportering som stöder kombination och filtrering av modelldata med hjälp av flera attribut, till exempel en Power BI-rapport eller Excel-pivottabell eller pivotdiagram. Mått skapas med hjälp av DAX-formelfältet i modelldesignern.

En formel i ett mått kan använda standardaggregeringsfunktioner som skapas automatiskt med funktionen Autosumma, till exempel COUNT eller SUM, eller så kan du definiera din egen formel med hjälp av DAX-formelfältet. Namngivna mått kan skickas som ett argument till andra mått.

När du definierar en formel för ett mått i formelfältet visar en knappbeskrivningsfunktion en förhandsgranskning av vad resultatet skulle bli för summan i den aktuella kontexten, men annars matas resultatet inte ut direkt någonstans. Anledningen till att du inte kan se (filtrerade) resultatet av beräkningen omedelbart är att resultatet av ett mått inte kan fastställas utan kontext. För att utvärdera ett mått krävs ett rapportklientprogram som kan tillhandahålla den kontext som behövs för att hämta data som är relevanta för varje cell och sedan utvärdera uttrycket för varje cell. Klienten kan vara en Excel-pivottabell eller pivotdiagram, en Power BI-rapport eller ett tabelluttryck i en DAX-fråga i SQL Server Management Studio (SSMS).

Oavsett klient körs en separat fråga för varje cell i resultatet. Det vill säga att varje kombination av rad- och kolumnrubriker i en pivottabell, eller varje val av utsnitt och filter i en Power BI-rapport, genererar en annan delmängd av data som måttet beräknas över. Du kan till exempel använda den här mycket enkla måttformeln:

Total Sales = SUM([Sales Amount])

När en användare placerar måttet TotalSales i en rapport och sedan placerar kolumnen Produktkategori från en produkttabell i Filter beräknas och visas summan av Försäljningsbelopp för varje produktkategori.

Till skillnad från beräknade kolumner innehåller syntaxen för ett mått måttets namn före formeln. I exemplet visas namnet Total försäljning före formeln. När du har skapat ett mått visas namnet och dess definition i listan Fält för rapportklientprogram och beroende på perspektiv och roller är tillgängliga för alla användare av modellen.

Mer information finns i:
Mått i Power BI Desktop
Mått i Analysis Services
Mått i Power Pivot

Beräknade kolumner

En beräknad kolumn är en kolumn som du lägger till i en befintlig tabell (i modelldesignern) och sedan skapar en DAX-formel som definierar kolumnens värden. När en beräknad kolumn innehåller en giltig DAX-formel beräknas värdena för varje rad så snart formeln har angetts. Värden lagras sedan i den minnesinterna datamodellen. I en datumtabell, till exempel när formeln anges i formelfältet:

= [Calendar Year] & " Q" & [Calendar Quarter]

Ett värde för varje rad i tabellen beräknas genom att ta värden från kolumnen Kalenderår (i samma datumtabell), lägga till ett blanksteg och versal bokstaven Q och sedan lägga till värdena från kolumnen Kalenderkvartal (i samma datumtabell). Resultatet för varje rad i den beräknade kolumnen beräknas omedelbart och visas till exempel som 2017 Q1. Kolumnvärden beräknas bara om tabellen eller någon relaterad tabell bearbetas (uppdateras) eller om modellen tas bort från minnet och sedan läses in igen, till exempel när en Power BI Desktop-fil stängs och öppnas igen.

Mer information finns i:
Beräknade kolumner i Power BI Desktop
Beräknade kolumner i Analysis Services
Beräknade kolumner i Power Pivot.

Beräknade tabeller

En beräknad tabell är ett beräknat objekt, baserat på ett formeluttryck, som härleds från alla eller en del av andra tabeller i samma modell. I stället för att köra frågor mot och läsa in värden i den nya tabellens kolumner från en datakälla definierar en DAX-formel tabellens värden.

Beräknade tabeller kan vara användbara i en rollspelsdimension. Ett exempel är tabellen Datum, som OrderDate, ShipDate eller DueDate, beroende på sekundärnyckelrelationen. Genom att skapa en beräknad tabell för ShipDate explicit får du en fristående tabell som är tillgänglig för frågor, lika fullständigt fungerande som alla andra tabeller. Beräknade tabeller är också användbara när du konfigurerar en filtrerad raduppsättning eller en delmängd eller en supermängd kolumner från andra befintliga tabeller. På så sätt kan du behålla den ursprungliga tabellen intakt samtidigt som du skapar varianter av tabellen för att stödja specifika scenarier.

Beräknade tabeller stöder relationer med andra tabeller. Kolumnerna i den beräknade tabellen har datatyper, formatering och kan tillhöra en datakategori. Beräknade tabeller kan namnges och visas eller döljas precis som andra tabeller. Beräknade tabeller beräknas på nytt om någon av de tabeller som den hämtar data från uppdateras.

Mer information finns i:
Beräknade tabeller i Power BI Desktop
Beräknade tabeller i Analysis Services.

Säkerhet på radnivå

Med säkerhet på radnivå måste en DAX-formel utvärderas till ett booleskt TRUE/FALSE-villkor som definierar vilka rader som kan returneras av resultatet av en fråga av medlemmar i en viss roll. Till exempel för medlemmar i rollen Försäljning, tabellen Kunder med följande DAX-formel:

= Customers[Country] = "USA"

Medlemmar i försäljningsrollen kan bara visa data för kunder i USA, och aggregeringar, till exempel SUM, returneras endast för kunder i USA. Säkerhet på radnivå är inte tillgängligt i Power Pivot i Excel.

När du definierar secuirty på radnivå med hjälp av DAX-formeln skapar du en tillåten raduppsättning. Detta nekar inte åtkomst till andra rader. I stället returneras de helt enkelt inte som en del av den tillåtna raduppsättningen. Andra roller kan tillåta åtkomst till de rader som undantas av DAX-formeln. Om en användare är medlem i en annan roll och den rollens säkerhet på radnivå ger åtkomst till den specifika raduppsättningen kan användaren visa data för den raden.

Säkerhetsformler på radnivå gäller för de angivna raderna samt relaterade rader. När en tabell har flera relationer tillämpar filter säkerhet för den relation som är aktiv. Säkerhetsformler på radnivå kommer att korsas med andra formler som definierats för relaterade tabeller.

Mer information finns i:
Säkerhet på radnivå (RLS) med Power BI
Roller i Analysis Services

Frågor

DAX-frågor kan skapas och köras i SQL Server Management Studio (SSMS) och verktyg med öppen källkod som DAX Studio (daxstudio.org). Till skillnad från DAX-beräkningsformler, som bara kan skapas i tabelldatamodeller, kan DAX-frågor också köras mot Flerdimensionella Analysis Services-modeller. DAX-frågor är ofta enklare att skriva och effektivare än MDX-frågor (Multidimensional Data Expressions).

En DAX-fråga är en instruktion som liknar en SELECT-instruktion i T-SQL. Den mest grundläggande typen av DAX-fråga är en utvärdera-instruktion. De prestandaobjekt

EVALUATE
 ( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC

Returnerar i Resultat en tabell som endast visar de produkter med en Valv tyStockLevel mindre än 200, i stigande ordning efter EnglishProductName.

Du kan skapa mått som en del av frågan. Mått finns bara under frågans varaktighet. Mer information finns i DAX-frågor.

Formler

DAX-formler är viktiga för att skapa beräkningar i beräknade kolumner och mått och skydda dina data med hjälp av säkerhet på radnivå. Om du vill skapa formler för beräknade kolumner och mått använder du formelfältet längst upp i modelldesignerfönstret eller DAX-redigeraren. Om du vill skapa formler för säkerhet på radnivå använder du dialogrutan Rollhanterare eller Hantera roller. Information i det här avsnittet är avsedd att komma igång med att förstå grunderna i DAX-formler.

Grunderna i formel

DAX-formler kan vara mycket enkla eller ganska komplexa. I följande tabell visas några exempel på enkla formler som kan användas i en beräknad kolumn.

Formel Definition
= TODAY() Infogar dagens datum i varje rad i en beräknad kolumn.
= 3 Infogar värdet 3 i varje rad i en beräknad kolumn.
= [Column1] + [Column2] Lägger till värdena i samma rad i [Column1] och [Column2] och placerar resultatet i den beräknade kolumnen på samma rad.

Oavsett om formeln du skapar är enkel eller komplex kan du använda följande steg när du skapar en formel:

  1. Varje formel måste börja med ett likhetstecken (=).

  2. Du kan antingen skriva eller välja ett funktionsnamn eller skriva ett uttryck.

  3. Börja skriva de första bokstäverna i den funktion eller det namn du vill använda, och Komplettera automatiskt visar en lista över tillgängliga funktioner, tabeller och kolumner. Tryck på TABB för att lägga till ett objekt från listan Komplettera automatiskt i formeln.

    Du kan också klicka på fx-knappen för att visa en lista över tillgängliga funktioner. Om du vill välja en funktion i listrutan använder du piltangenterna för att markera objektet och klickar på OK för att lägga till funktionen i formeln.

  4. Ange argumenten till funktionen genom att välja dem från en listruta med möjliga tabeller och kolumner, eller genom att skriva in värden.

  5. Sök efter syntaxfel: Kontrollera att alla parenteser är stängda och att kolumner, tabeller och värden refereras korrekt.

  6. Tryck på RETUR för att acceptera formeln.

Kommentar

I en beräknad kolumn fylls kolumnen i med värden så fort du anger formeln och formeln har verifierats. Om du trycker på RETUR i ett mått sparas måttdefinitionen med tabellen. Om en formel är ogiltig visas ett fel.

I det här exemplet ska vi titta på en formel i ett mått med namnet Days in Current Quarter:

Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))

Det här måttet används för att skapa ett jämförelseförhållande mellan en ofullständig period och föregående period. Formeln måste ta hänsyn till den andel av perioden som har förflutit och jämföra den med samma andel under föregående period. I det här fallet ger [Days Current Quarter to Date]/[Days in Current Quarter] den andel som förflutit under den aktuella perioden.

Den här formeln innehåller följande element:

Formelelement Description
Days in Current Quarter Namnet på måttet.
= Likhetstecknet (=) börjar formeln.
COUNTROWS COUNTROWS räknar antalet rader i tabellen Datum
() Öppna och stänga parenteser anger argument.
DATESBETWEEN Funktionen DATESBETWEEN returnerar datumen mellan det sista datumet för varje värde i kolumnen Datum i tabellen Datum.
'Date' Anger tabellen Datum. Tabeller finns inom enkla citattecken.
[Date] Anger kolumnen Datum i tabellen Datum. Kolumnerna är inom hakparenteser.
,
STARTOFQUARTER Funktionen STARTOFQUARTER returnerar datumet för början av kvartalet.
LASTDATE Funktionen LASTDATE returnerar det sista datumet i kvartalet.
'Date' Anger tabellen Datum.
[Date] Anger kolumnen Datum i tabellen Datum.
,
ENDOFQUARTER Funktionen ENDOFQUARTER
'Date' Anger tabellen Datum.
[Date] Anger kolumnen Datum i tabellen Datum.

Använda formeln Komplettera automatiskt

Komplettera automatiskt hjälper dig att ange en giltig formelsyntax genom att ge dig alternativ för varje element i formeln.

  • Du kan använda formeln Komplettera automatiskt 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 förblir oförändrad.

  • AutoComplete lägger inte till den avslutande parentesen för funktioner eller matchar automatiskt parenteser. Du måste se till att varje funktion är syntaktiskt korrekt eller att du inte kan 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 argument för en annan funktion. Du kan kapsla upp till 64 funktioner i beräknade kolumner. Kapsling kan dock göra det svårt att skapa eller felsöka formler. Många 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 måste anges som indata till en tabellfunktion. Till exempel kräver funktionerna SUMX, AVERAGEX och MINX alla en tabell som det första argumentet.

Funktioner

En funktion är en namngiven formel i ett uttryck. De flesta funktioner har obligatoriska och valfria argument, även kallade parametrar, som indata. När funktionen körs returneras ett värde. DAX innehåller funktioner som du kan använda för att utföra beräkningar med datum och tider, skapa villkorsvärden, arbeta med strängar, utföra sökningar baserat på relationer och möjligheten att iterera över en tabell för att utföra rekursiva beräkningar. Om du är bekant med Excel-formler kommer många av dessa funktioner att se mycket lika ut. DAX-formler skiljer sig dock åt på följande viktiga sätt:

  • En DAX-funktion refererar alltid till en fullständig kolumn eller en tabell. Om du bara vill använda vissa värden från en tabell eller kolumn kan du lägga till filter i formeln.

  • Om du behöver anpassa beräkningar rad för rad tillhandahåller DAX funktioner som gör att du kan använda det aktuella radvärdet eller ett relaterat värde som en typ av parameter för att utföra beräkningar som varierar beroende på kontext. Information om hur dessa funktioner fungerar finns i Kontext i den här artikeln.

  • DAX innehåller många funktioner som returnerar en tabell i stället för ett värde. Tabellen visas inte i en rapportklient, men används för att ge indata till andra funktioner. Du kan till exempel hämta en tabell och sedan räkna de distinkta värdena i den, eller beräkna dynamiska summor i filtrerade tabeller eller kolumner.

  • DAX-funktioner innehåller en mängd olika tidsinformationsfunktioner . Med de här funktionerna kan du definiera eller välja datumintervall och utföra dynamiska beräkningar baserat på dessa datum eller intervall. Du kan till exempel jämföra summor mellan parallella perioder.

Aggregeringsfunktioner

Sammansättningsfunktioner beräknar ett (skalärt) värde, till exempel antal, summa, medelvärde, minimum eller maximum för alla rader i en kolumn eller tabell som definierats av uttrycket. Mer information finns i Sammansättningsfunktioner.

Översikt över datum- och tidsfunktioner

Datum- och tidsfunktionerna i DAX liknar datum- och tidsfunktioner i Microsoft Excel. DAX-funktioner baseras dock på en datetime-datatyp från och med 1 mars 1900. Mer information finns i Funktioner för datum och tid.

Filterfunktioner

Filterfunktionerna i DAX returnerar specifika datatyper, letar upp värden i relaterade berättelser och filtrerar efter relaterade värden. Uppslagsfunktionerna fungerar med hjälp av tabeller och relationer, till exempel en databas. Med filtreringsfunktionerna kan du ändra datakontexten för att skapa dynamiska beräkningar. Mer information finns i Filterfunktioner.

Finansiella funktioner

De finansiella funktionerna i DAX används i formler som utför finansiella beräkningar, till exempel nuvärde och avkastning. Dessa funktioner liknar finansiella funktioner som används i Microsoft Excel. Mer information finns i Finansiella funktioner.

Informationsfunktioner

En informationsfunktion tittar på cellen eller raden som anges som ett argument och anger om värdet matchar den förväntade typen. Funktionen ISERROR returnerar till exempel TRUE om det värde som du refererar till innehåller ett fel. Mer information finns i Informationsfunktioner.

Logiska funktioner

Logiska funktioner fungerar på ett uttryck för att returnera information om värdena i uttrycket. Funktionen TRUE låter dig till exempel veta om ett uttryck som du utvärderar returnerar ett TRUE-värde. Mer information finns i Logiska funktioner.

Matematiska och trigonometriska funktioner

De matematiska funktionerna i DAX liknar de matematiska och trigonometriska funktionerna i Excel. Vissa mindre skillnader finns i de numeriska datatyper som används av DAX-funktioner. Mer information finns i Matematik- och trigfunktioner.

Andra funktioner

Dessa funktioner utför unika åtgärder som inte kan definieras av någon av de kategorier som de flesta andra funktioner tillhör. Mer information finns i Andra funktioner.

Relationsfunktioner

Med relationsfunktioner i DAX kan du returnera värden från en annan relaterad tabell, ange en viss relation som ska användas i ett uttryck och ange korsfiltreringsriktning. Mer information finns i Relationsfunktioner.

Statistiska funktioner

Statistiska funktioner beräknar värden relaterade till statistiska fördelningar och sannolikhet, till exempel standardavvikelse och antal permutationer. Mer information finns i Statistiska funktioner.

Textfunktioner

Textfunktioner i DAX liknar deras motsvarigheter i Excel. Du kan returnera en del av en sträng, söka efter text i en sträng eller sammanfoga strängvärden. DAX innehåller också funktioner för att styra formaten för datum, tider och tal. Mer information finns i Textfunktioner.

Tidsinformationsfunktioner

Med tidsinformationsfunktionerna i DAX kan du skapa beräkningar som använder inbyggd kunskap om kalendrar och datum. Genom att använda tids- och datumintervall i kombination med aggregeringar eller beräkningar kan du skapa meningsfulla jämförelser mellan jämförbara tidsperioder för försäljning, inventering och så vidare. Mer information finns i Tidsinformationsfunktioner (DAX).

Funktioner för tabellmanipulering

Dessa funktioner returnerar en tabell eller ändrar befintliga tabeller. Genom att till exempel använda ADDCOLUMNS kan du lägga till beräknade kolumner i en angiven tabell, eller så kan du returnera en sammanfattningstabell över en uppsättning grupper med funktionen SUMMARIZECOLUMNS. Mer information finns i Funktioner för tabellmanipulering.

Variabler

Du kan skapa variabler i ett uttryck med hjälp av VAR. VAR är tekniskt sett inte en funktion, det är ett nyckelord för att lagra resultatet av ett uttryck som en namngiven variabel. Variabeln kan sedan skickas som ett argument till andra måttuttryck. Till exempel:

VAR
    TotalQty = SUM ( Sales[Quantity] )

Return

    IF (
        TotalQty > 1000,
        TotalQty * 0.95,
        TotalQty * 1.25
        )

I det här exemplet kan TotalQty skickas som en namngiven variabel till andra uttryck. Variabler kan vara av valfri skalbar datatyp, inklusive tabeller. Att använda variabler i DINA DAX-formler kan vara otroligt kraftfullt.

Datatyper

Du kan importera data till en modell från många olika datakällor som kan ha stöd för olika datatyper. När du importerar data till en modell konverteras data till någon av datatyperna för tabellmodellen. När modelldata används i en beräkning konverteras data sedan till en DAX-datatyp för beräkningens varaktighet och utdata. När du skapar en DAX-formel avgör de termer som används i formeln automatiskt den värdedatatyp som returneras.

DAX stöder följande datatyper:

Datatyp i modell Datatyp i DAX Description
Heltal Ett heltal på 64 bitar (åtta byte) 1, 2 Tal som inte har några decimaler. Heltal kan vara positiva eller negativa tal, men måste vara heltal mellan -9 223 372 036 854 775 808 (-2^63) och 9 223 372 036 854 775 807 (2^63-1).
Decimaltal Ett 64-bitars (åtta byte) reellt nummer 1, 2 Verkliga tal är tal som kan ha decimaler. Verkliga tal täcker ett stort antal värden:

Negativa värden från -1,79E +308 till -2,23E -308

Noll

Positiva värden från 2.23E -308 till 1.79E + 308

Antalet signifikanta siffror är dock begränsat till 17 decimaler.
Boolean Boolean Antingen ett sant eller falskt värde.
Text String En Unicode-teckendatasträng. Kan vara strängar, siffror eller datum som representeras i ett textformat.
Date Datum/tid Datum och tider i en godkänd datum-tid-representation.

Giltiga datum är alla datum efter den 1 mars 1900.
Valuta Valuta Valutadatatyp tillåter värden mellan -922 337 203 685 477,5808 till 922 337 203 685 477 5807 med fyra decimalsiffror med fast precision.
Inte tillgänglig Blank Ett tomt värde är en datatyp i DAX som representerar och ersätter SQL-nullvärden. Du kan skapa ett tomt värde med hjälp av funktionen BLANK och testa blanksteg med hjälp av den logiska funktionen ISBLANK.

Tabelldatamodeller innehåller även tabelldatatypen som indata eller utdata till många DAX-funktioner. Funktionen FILTER tar till exempel en tabell som indata och matar ut en annan tabell som endast innehåller de rader som uppfyller filtervillkoren. Genom att kombinera tabellfunktioner med sammansättningsfunktioner kan du utföra komplexa beräkningar över dynamiskt definierade datauppsättningar.

Även om datatyper vanligtvis anges automatiskt är det viktigt att förstå datatyper och hur de tillämpas, särskilt på DAX-formler. Fel i formler eller oväntade resultat orsakas till exempel ofta av en viss operator som inte kan användas med en datatyp som anges i ett argument. Formeln , = 1 & 2returnerar till exempel ett strängresultat på 12. Formeln = "1" + "2"returnerar dock ett heltalsresultat på 3.

Sammanhang

Kontext är ett viktigt begrepp att förstå när du skapar DAX-formler. Kontext är det som gör att du kan utföra dynamisk analys, eftersom resultatet av en formel ändras för att återspegla den aktuella rad- eller cellmarkeringen och även relaterade data. Att förstå kontext och använda kontext effektivt är avgörande för att skapa högpresterande, dynamiska analyser och för felsökning av problem i formler.

Formler i tabellmodeller kan utvärderas i en annan kontext, beroende på andra designelement:

  • Filter som används i en pivottabell eller rapport
  • Filter som definierats i en formel
  • Relationer som anges med hjälp av specialfunktioner i en formel

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

Radkontext

Radkontext kan betraktas som "den aktuella raden". 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, = [Freight] + [Tax], som lägger till värden från två kolumner, Frakt och Skatt, från samma tabell. Den här formeln hämtar automatiskt endast värdena från den aktuella raden i de angivna kolumnerna.

Radkontexten följer även alla relationer som har definierats mellan tabeller, inklusive relationer som definierats i en beräknad kolumn med hjälp av DAX-formler, för att avgöra vilka rader i relaterade tabeller som är associerade med den aktuella raden.

Följande formel använder till exempel funktionen RELATED för att hämta ett skattevärde från en relaterad tabell, baserat på den region som ordern levererades till. Skattevärdet bestäms med hjälp av värdet för regionen i den aktuella tabellen, letar upp regionen i den relaterade tabellen och hämtar sedan skattesatsen för den regionen från den relaterade tabellen.

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

Den här formeln hämtar skattesatsen för den aktuella regionen från tabellen Region och lägger till den i värdet för kolumnen Frakt. I DAX-formler behöver du inte känna till eller ange den specifika relation som ansluter tabellerna.

Kontext för flera rader

DAX innehåller funktioner som itererar beräkningar över en tabell. Dessa funktioner kan ha flera aktuella rader, var och en med sin egen radkontext. I grund och botten kan du med dessa funktioner skapa formler som utför åtgärder rekursivt över en inre och yttre loop.

Anta till exempel att din modell innehåller en produkttabell och en sales-tabell . Användarna kanske vill gå igenom hela försäljningstabellen, som är full av transaktioner som omfattar flera produkter, och hitta den största kvantiteten som beställts för varje produkt i en transaktion.

Med DAX kan du skapa en enda formel som returnerar rätt värde och resultatet uppdateras automatiskt när en användare lägger till data i tabellerna.

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

Ett detaljerat exempel på den här formeln finns i EARLIER.

För att sammanfatta lagrar funktionen EARLIER radkontexten från den åtgärd som föregick den aktuella åtgärden. Funktionen lagrar hela tiden två kontextuppsättningar i minnet: en uppsättning kontext representerar den aktuella raden för formelns inre loop och en annan uppsättning kontext representerar den aktuella raden för formelns yttre loop. DAX matar automatiskt in värden mellan de två looparna så att du kan skapa komplexa aggregeringar.

Frågekontext

Frågekontext refererar till den delmängd av data som implicit hämtas för en formel. När en användare till exempel placerar ett mått eller fält i en rapport undersöker motorn rad- och kolumnrubriker, utsnitt och rapportfilter för att fastställa kontexten. De nödvändiga frågorna körs sedan mot modelldata för att hämta rätt delmängd av data, göra de beräkningar som definieras av formeln och sedan fylla i värden i rapporten.

Eftersom kontexten ändras beroende på var du placerar formeln kan även resultatet av formeln ändras. Anta till exempel att du skapar en formel som summerar värdena i kolumnen Vinst i tabellen Sales: = SUM('Sales'[Profit]). 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 . Resultaten kommer att ha vinst för alla regioner, alla produkter, alla år och så vidare.

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

I en rapport ändras kontexten genom att filtrera, lägga till eller ta bort fält och använda utsnitt. För varje ändring, frågekontexten där måttet utvärderas. Därför utvärderas samma formel, som används i ett mått, i en annan frågekontext för varje cell.

Filterkontext

Filterkontext är den uppsättning värden som tillåts i varje kolumn eller i de värden som hämtas från en relaterad tabell. Filter kan tillämpas på kolumnen i designern eller i presentationsskiktet (rapporter och pivottabeller). Filter kan också definieras explicit av filteruttryck i formeln.

Filterkontext läggs till när du anger filterbegränsningar för den uppsättning värden som tillåts i en kolumn eller tabell med hjälp av argument i en formel. Filterkontexten tillämpas ovanpå andra kontexter, till exempel radkontext eller frågekontext.

I tabellmodeller finns det många sätt att skapa filterkontext. I kontexten för klienter som kan använda modellen, till exempel Power BI-rapporter, kan användarna skapa filter direkt genom att lägga till utsnitt eller rapportfilter på rad- och kolumnrubrikerna. Du kan också ange filteruttryck direkt i formeln, ange relaterade värden, filtrera tabeller som används som indata eller dynamiskt hämta kontext för de värden som används i beräkningar. Du kan också helt rensa eller selektivt rensa filtren på vissa kolumner. Detta är mycket användbart när du skapar formler som beräknar totalsummor.

Mer information om hur du skapar filter i formler finns i FILTER-funktionen (DAX).
Ett exempel på hur filter kan rensas för att skapa totalsummor finns i DAX (ALL Function).

Exempel på hur du selektivt rensar och tillämpar filter i formler finns i ALLEXCEPT.

Fastställa kontext i formler

När du skapar en DAX-formel testas formeln först för giltig syntax och testas sedan för att se till att namnen på kolumnerna och tabellerna som ingår i formeln finns i den aktuella kontexten. Om det inte går att hitta någon kolumn eller tabell som anges av formeln returneras ett fel.

Kontexten under valideringen (och omberäkningsåtgärderna) bestäms enligt beskrivningen i föregående avsnitt, med hjälp av de tillgängliga tabellerna i modellen, 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 den inte är relaterad till andra tabeller (och du inte har tillämpat några filter) är den aktuella kontexten hela uppsättningen kolumner i tabellen. Om tabellen är länkad av relationer till andra tabeller innehåller den aktuella kontexten de relaterade tabellerna. Om du lägger till en kolumn från tabellen i en rapport som har utsnitt och kanske några rapportfilter, är kontexten för formeln delmängden av data i varje cell i rapporten.

Kontext är ett kraftfullt begrepp 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 kontexten fungerar. Följande avsnitt innehåller några exempel på hur formler använder olika typer av kontext för att dynamiskt returnera resultat.

Operatorer

DAX-språket använder fyra olika typer av beräkningsoperatorer i formler:

  • Jämförelseoperatorer för att jämföra värden och returnera ett logiskt TRUE\FALSE-värde.
  • Aritmetiska operatorer för att utföra aritmetiska beräkningar som returnerar numeriska värden.
  • Operatorer för sammanfogning av text för att koppla två eller flera textsträngar.
  • Logiska operatorer som kombinerar två eller flera uttryck för att returnera ett enda resultat.

Detaljerad information om operatorer som används i DAX-formler finns i DAX-operatorer.

Arbeta med tabeller och kolumner

Tabeller i tabelldatamodeller ser ut som Excel-tabeller, men skiljer sig åt i hur de fungerar med data och med formler:

  • Formler fungerar bara med tabeller och kolumner, inte med enskilda celler, intervallreferenser eller matriser.
  • Formler kan använda relationer för att hämta värden från relaterade tabeller. De värden som hämtas är alltid relaterade till det aktuella radvärdet.
  • Du kan inte ha oregelbundna eller "ojämna" data som du kan i ett Excel-kalkylblad. Varje rad i en tabell måste innehålla samma antal kolumner. Du kan dock ha tomma värden i vissa kolumner. Excel-datatabeller och tabellmodelldatatabeller är inte utbytbara.
  • Eftersom en datatyp har angetts för varje kolumn måste varje värde i den kolumnen vara av samma typ.

Referera till tabeller och kolumner i formler

Du kan referera till valfri tabell och kolumn med hjälp av dess namn. Följande formel illustrerar till exempel hur du refererar till kolumner från två tabeller med hjälp av det fullständigt kvalificerade namnet:


= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])  

När en formel utvärderas söker modelldesignern först efter allmän syntax och kontrollerar sedan namnen på kolumner och tabeller som du anger mot möjliga kolumner och tabeller i den aktuella kontexten. Om namnet är tvetydigt eller om kolumnen eller tabellen inte kan hittas får du ett fel på formeln (en #ERROR sträng i stället för ett datavärde i celler där felet uppstår). Mer information om namngivningskrav för tabeller, kolumner och andra objekt finns i Namngivningskrav i DAX-syntax.

Tabellrelationer

Genom att skapa relationer mellan tabeller får du möjlighet att använda relaterade värden i andra tabeller i beräkningar. Du kan till exempel använda en beräknad kolumn för att fastställa alla leveransposter som är relaterade till den aktuella återförsäljaren och sedan summera fraktkostnaderna för var och en. I många fall kanske dock inte en relation är nödvändig. Du kan använda funktionen LOOKUPVALUE i en formel för att returnera värdet i result_columnName för raden som uppfyller villkoren som anges i argumenten search_column och search_value .

Många DAX-funktioner kräver att det finns en relation mellan tabellerna, eller mellan flera tabeller, för att hitta de kolumner som du har refererat till och returnera resultat som är meningsfulla. Andra funktioner försöker identifiera relationen. För bästa resultat bör du dock alltid skapa en relation där det är möjligt. Tabelldatamodeller stöder flera relationer mellan tabeller. För att undvika förvirring eller felaktiga resultat anges endast en relation i taget som den aktiva relationen, men du kan ändra den aktiva relationen efter behov för att passera olika anslutningar i data i beräkningar. Funktionen USERELATIONSHIP kan användas för att ange en eller flera relationer som ska användas i en specifik beräkning.

Det är viktigt att observera dessa formeldesignregler när du använder relationer:

  • När tabeller är anslutna av en relation måste du se till att de två kolumner som används som nycklar har värden som matchar. Referensintegritet tillämpas inte, därför är det möjligt att ha icke-matchande värden i en nyckelkolumn och fortfarande skapa en relation. Om detta händer bör du vara medveten om att tomma värden eller icke-matchande värden kan påverka resultatet av formler.

  • När du länkar tabeller i din modell med hjälp av relationer förstorar du omfånget, eller kontexten, där dina formler utvärderas. Ändringar i kontexten till följd av tillägg av nya tabeller, nya relationer eller ändringar i den aktiva relationen kan leda till att dina resultat ändras på sätt som du kanske inte förväntar dig. Mer information finns i Kontext i den här artikeln.

Bearbeta och uppdatera

Process och omberäkning är två separata men relaterade åtgärder. Du bör noggrant förstå dessa begrepp när du utformar en modell som innehåller komplexa formler, stora mängder data eller data som hämtas från externa datakällor.

Processen (uppdateringen) uppdaterar data i en modell med nya data från en extern datakälla.

Omberäkning är processen att uppdatera resultatet av formler för att återspegla eventuella ändringar i själva formler och för att återspegla ändringar i underliggande data. Omberäkning kan påverka prestanda på följande sätt:

  • Värdena i en beräknad kolumn beräknas och lagras i modellen. Om du vill uppdatera värdena i den beräknade kolumnen måste du bearbeta modellen med något av tre bearbetningskommandon – Process Full, Process Data eller Process Recalc. Resultatet av formeln måste alltid beräknas om för hela kolumnen när du ändrar formeln.

  • Värdena som beräknas av mått utvärderas dynamiskt när en användare lägger till måttet i en pivottabell eller öppnar en rapport. när användaren ändrar kontexten, returneras värden som returneras av måttändringen. Resultatet av måttet återspeglar alltid det senaste i minnesintern cacheminnet.

Bearbetning och omberäkning har ingen effekt på säkerhetsformler på radnivå om inte resultatet av en omberäkning returnerar ett annat värde, vilket gör raden frågebar eller inte frågebar av rollmedlemmar.

Uppdateringar

DAX förbättras ständigt. Nya och uppdaterade funktioner släpps med nästa tillgängliga uppdatering, som vanligtvis är månadsvis. Tjänsterna uppdateras först, följt av installerade program som Power BI Desktop, Excel, SQL Server Management Studio (SSMS) och Analysis Services-projekttillägget för Visual Studio (SSDT). SQL Server Analysis Services uppdateras med nästa kumulativa uppdatering. Nya funktioner tillkännages först och beskrivs i DAX-funktionsreferensen som sammanfaller med Power BI Desktop-uppdateringar.

Alla funktioner stöds inte i tidigare versioner av SQL Server Analysis Services och Excel.

Felsökning

Om du får ett fel när du definierar en formel kan formeln innehålla antingen ett syntaktiskt fel, ett semantiskt fel eller ett beräkningsfel.

Syntaktiska fel är de enklaste att lösa. De omfattar vanligtvis en parentes eller kommatecken som saknas.

Den andra typen av fel inträffar när syntaxen är korrekt, men värdet eller en kolumn som refereras är inte meningsfull i formelns kontext. 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 typmatchningsfel och genererar ett fel.
  • Formeln skickar ett felaktigt antal eller en typ av argument till en funktion.
  • Formeln refererar till en annan kolumn som har 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ått DAX ut kolumnen för att indikera att kolumnen är i ett obearbetat tillstånd.

Appar och verktyg

Power BI Desktop

Power BI Desktop

Power BI Desktop är ett kostnadsfritt datamodellerings- och rapporteringsprogram. Modelldesignern innehåller en DAX-redigerare för att skapa DAX-beräkningsformler.

Power Pivot i Excel

Power Pivot in Excel

Power Pivot i Excel-modelldesignern innehåller en DAX-redigerare för att skapa DAX-beräkningsformler.

Visual Studio

Visual Studio

Visual Studio med Analysis Services-projekttillägg (VSIX) används för att skapa Analysis Services-modellprojekt. Tabellmodelldesignern som installeras med projekttillägget innehåller en DAX-redigerare.

SQL Server Management Studio

SQL Server Management Studio

SQL Server Management Studio (SSMS) är ett viktigt verktyg för att arbeta med Analysis Services. SSMS innehåller en DAX-frågeredigerare för att fråga både tabellmodeller och flerdimensionella modeller.

DAX Studio

DAX Studio icon

DAX Studio är ett klientverktyg med öppen källkod för att skapa och köra DAX-frågor mot Analysis Services, Power BI Desktop och Power Pivot i Excel-modeller.

Tabular Editor

Tabular Editor icon

Tabellredigeraren är ett verktyg med öppen källkod som ger en intuitiv, hierarkisk vy över varje objekt i tabellmodellmetadata. Tabellredigeraren innehåller en DAX-redigerare med syntaxmarkering, vilket ger ett enkelt sätt att redigera mått, beräknad kolumn och beräknade tabelluttryck.

Utbildningsresurser

När du lär dig DAX är det bäst att använda det program som du använder för att skapa dina datamodeller. Analysis Services, Power BI Desktop och Power Pivot i Excel har alla artiklar och självstudier som innehåller lektioner om hur du skapar mått, beräknade kolumner och radfilter med hjälp av DAX. Här är några ytterligare resurser:

Videor

Använd DAX i Power BI Desktop-utbildningsvägen .

The Definitive Guide to DAX av Alberto Ferrari och Marco Russo (Microsoft Press). Nu i sin andra utgåva ger den här omfattande guiden grunderna till innovativa högpresterande tekniker för att starta datamodellerare och BI-proffs.

The Definitive Guide to DAX book image

Community

DAX har en livlig community som alltid är villig att dela med sig av sin expertis. Microsoft Power BI Community har ett särskilt diskussionsforum för DAX, DAX-kommandon och tips.