DAX-syntax

I den här artikeln beskrivs syntax och krav för DAX-formeluttrycksspråket.

Syntaxkrav

En DAX-formel börjar alltid med ett likhetstecken (=). Efter likhetstecknet kan du ange alla uttryck som utvärderas till en skalär eller ett uttryck som kan konverteras till en skalär. Dessa omfattar följande:

  • En skalär konstant eller ett uttryck som använder en skalär operator (+,-,*,/,>=,...,&&, ...)

  • Referenser till kolumner eller tabeller. DAX-språket använder alltid tabeller och kolumner som indata till funktioner, aldrig en matris eller godtycklig uppsättning värden.

  • Operatorer, konstanter och värden som tillhandahålls som en del av ett uttryck.

  • Resultatet av en funktion och dess obligatoriska argument. Vissa DAX-funktioner returnerar en tabell i stället för en skalär och måste omslutas i en funktion som utvärderar tabellen och returnerar en skalär. om inte tabellen är en enskild kolumn, en radtabell, behandlas den som ett skalärt värde.

    De flesta DAX-funktioner kräver ett eller flera argument, som kan innehålla tabeller, kolumner, uttryck och värden. Vissa funktioner, till exempel PI, kräver dock inga argument, men kräver alltid parenteser för att indikera null-argumentet. Du måste till exempel alltid skriva PI(), inte PI. Du kan också kapsla funktioner i andra funktioner.

  • Uttryck. Ett uttryck kan innehålla något av följande: operatorer, konstanter eller referenser till kolumner.

Följande är till exempel alla giltiga formler.

Formel Resultat
= 3 3
= "Försäljning" Försäljning
= 'Sales'[Amount] Om du använder den här formeln i tabellen Försäljning får du värdet för kolumnen Belopp i tabellen Försäljning för den aktuella raden.
= (0,03 *[Belopp])

=0,03 * [Belopp]
Tre procent av värdet i kolumnen Amount i den aktuella tabellen.

Även om den här formeln kan användas för att beräkna en procentandel visas inte resultatet som en procentandel om du inte använder formatering i tabellen.
= PI() Värdet för konstant pi.

Formler kan bete sig annorlunda beroende på hur de används. Du måste alltid vara medveten om kontexten och hur de data som du använder i formeln är relaterade till andra data som kan användas i beräkningen.

Namngivningskrav

En datamodell innehåller ofta flera tabeller. Tillsammans utgör tabellerna och deras kolumner en databas som lagras i analysmotorn i minnet (VertiPaq). I databasen måste alla tabeller ha unika namn. Namnen på kolumnerna måste också vara unika i varje tabell. Alla objektnamn är skiftlägeskänsliga, till exempel skulle namnen SALES och Sales representera samma tabell.

Varje kolumn och mått som du lägger till i en befintlig datamodell måste tillhöra en specifik tabell. Du anger tabellen som innehåller kolumnen antingen implicit när du skapar en beräknad kolumn i en tabell eller uttryckligen när du skapar ett mått och anger namnet på tabellen där måttdefinitionen ska lagras.

När du använder en tabell eller kolumn som indata till en funktion måste du i allmänhet kvalificera kolumnnamnet. Det fullständigt kvalificerade namnet på en kolumn är tabellnamnet följt av kolumnnamnet inom hakparenteser: till exempel "U.S. Sales"[Products]. Ett fullständigt kvalificerat namn krävs alltid när du refererar till en kolumn i följande kontexter:

  • Som ett argument till funktionen, VALUES

  • Som ett argument till funktionerna, ALL eller ALLEXCEPT

  • I ett filterargument för funktionerna CALCULATE eller CALCULATETABLE

  • Som ett argument till funktionen RELATEDTABLE

  • Som ett argument till en tidsinformationsfunktion

Ett okvalificerat kolumnnamn är bara namnet på kolumnen, som omges av hakparenteser: till exempel [Försäljningsbelopp]. När du till exempel refererar till ett skalärt värde från samma rad i den aktuella tabellen kan du använda det okvalificerade kolumnnamnet.

Om namnet på en tabell innehåller blanksteg, reserverade nyckelord eller otillåtna tecken måste du omsluta tabellnamnet inom enkla citattecken. Du måste också omsluta tabellnamn inom citattecken om namnet innehåller tecken utanför det alfanumeriska ANSI-teckenintervallet, oavsett om språkvarianten stöder teckenuppsättningen eller inte. Om du till exempel öppnar en arbetsbok som innehåller tabellnamn skrivna med kyrilliska tecken, till exempel "Таблица", måste tabellnamnet omges av citattecken, även om det inte innehåller blanksteg.

Kommentar

Om du vill göra det enklare att ange de fullständigt kvalificerade namnen på kolumner använder du funktionen Komplettera automatiskt i formelredigeraren.

Tabeller

  • Tabellnamn krävs när kolumnen kommer från en annan tabell än den aktuella tabellen. Tabellnamn måste vara unika i databasen.

  • Tabellnamn måste omges av enkla citattecken om de innehåller blanksteg, andra specialtecken eller alfanumeriska tecken som inte är engelska.

Mått

  • Måttnamn måste alltid vara inom hakparenteser.

  • Måttnamn kan innehålla blanksteg.

  • Varje måttnamn måste vara unikt i en modell. Därför är tabellnamnet valfritt framför ett måttnamn när du refererar till ett befintligt mått. Men när du skapar ett mått måste du alltid ange en tabell där måttdefinitionen ska lagras.

Kolumner

Kolumnnamn måste vara unika i kontexten för en tabell. Flera tabeller kan dock ha kolumner med samma namn (tvetydighet kommer med tabellnamnet).

I allmänhet kan kolumner refereras till utan att referera till den bastabell som de tillhör, förutom när det kan finnas en namnkonflikt att lösa eller med vissa funktioner som kräver att kolumnnamn är fullständigt kvalificerade.

Reserverade nyckelord

Om namnet som du använder för en tabell är detsamma som ett reserverat Analysis Services-nyckelord utlöses ett fel och du måste byta namn på tabellen. Du kan dock använda nyckelord i objektnamn om objektnamnet omges av hakparenteser (för kolumner) eller citattecken (för tabeller).

Kommentar

Citattecken kan representeras av flera olika tecken, beroende på programmet. Om du klistrar in formler från ett externt dokument eller en webbsida kontrollerar du ASCII-koden för det tecken som används för att öppna och stänga citattecken för att säkerställa att de är desamma. Annars kanske DAX inte kan identifiera symbolerna som citattecken, vilket gör referensen ogiltig.

Specialtecken

Följande tecken och teckentyper är inte giltiga i namnen på tabeller, kolumner eller mått:

  • Inledande eller avslutande blanksteg; om inte blankstegen omges av namnavgränsare, hakparenteser eller enstaka apostrofer.

  • Kontrollera tecken

  • Följande tecken som inte är giltiga i objektens namn:

    .,;':/\*|? &%$!+=()[]{}<>

Exempel på objektnamn

I följande tabell visas exempel på några objektnamn:

Objekttyper Exempel Kommentar
Tabellnamn Försäljning Om tabellnamnet inte innehåller blanksteg eller andra specialtecken behöver namnet inte omges av citattecken.
Tabellnamn "Försäljning i Kanada" Om namnet innehåller blanksteg, flikar eller andra specialtecken omger du namnet inom enkla citattecken.
Fullständigt kvalificerat kolumnnamn Sales[Amount] Tabellnamnet föregår kolumnnamnet och kolumnnamnet omges av hakparenteser.
Fullständigt kvalificerat måttnamn Sales[Profit] Tabellnamnet föregår måttnamnet och måttnamnet omges av hakparenteser. I vissa sammanhang krävs alltid ett fullständigt kvalificerat namn.
Namn på okvalificerad kolumn [Belopp] Det okvalificerade namnet är bara kolumnnamnet inom hakparenteser. Kontexter där du kan använda det okvalificerade namnet inkluderar formler i en beräknad kolumn i samma tabell eller i en aggregeringsfunktion som genomsöker över samma tabell.
Fullständigt kvalificerad kolumn i tabell med blanksteg 'Canada Sales'[Qty] Tabellnamnet innehåller blanksteg, så det måste vara omgivet av enkla citattecken.

Andra begränsningar

Den syntax som krävs för varje funktion och vilken typ av åtgärd den kan utföra varierar kraftigt beroende på funktionen. I allmänhet gäller dock följande regler för alla formler och uttryck:

  • DAX-formler och uttryck kan inte ändra eller infoga enskilda värden i tabeller.

  • Du kan inte skapa beräknade rader med hjälp av DAX. Du kan bara skapa beräknade kolumner och mått.

  • När du definierar beräknade kolumner kan du kapsla funktioner till valfri nivå.

  • DAX har flera funktioner som returnerar en tabell. Vanligtvis använder du de värden som returneras av dessa funktioner som indata till andra funktioner, som kräver en tabell som indata.

DAX-operatorer och konstanter

I följande tabell visas de operatorer som stöds av DAX. Mer information om syntaxen för enskilda operatorer finns i DAX-operatorer.

Typ av operator Symbol och användning
Parentesoperator () Prioritetsordning och gruppering av argument
Aritmetiska operatorer + (tillägg)

- (subtraktion/

tecken)

* (multiplikation)

/ (division)

^ (exponentiation)
Jämförelseoperatorer = (lika med)

> (större än)

< (mindre än)

>= (större än eller lika med)

<= (mindre än eller lika med)

<> (inte lika med)
Operator för textsammanlänkning & (sammanlänkning)
Logikoperatorer && amp(och)

|| (eller)

Datatyper

Du behöver inte konvertera, konvertera eller på annat sätt ange datatypen för en kolumn eller ett värde som du använder i en DAX-formel. När du använder data i en DAX-formel identifierar DAX automatiskt datatyperna i refererade kolumner och de värden som du skriver in och utför implicita konverteringar vid behov för att slutföra den angivna åtgärden.

Om du till exempel försöker lägga till ett tal i ett datumvärde tolkar motorn åtgärden i kontexten för funktionen och konverterar talen till en gemensam datatyp och visar sedan resultatet i avsett format, ett datum.

Det finns dock vissa begränsningar för de värden som kan konverteras. Om ett värde eller en kolumn har en datatyp som inte är kompatibel med den aktuella åtgärden returnerar DAX ett fel. DAX tillhandahåller inte heller funktioner som gör att du uttryckligen kan ändra, konvertera eller omvandla datatypen för befintliga data som du har importerat till en datamodell.

Viktigt!

DAX stöder inte användning av variantdatatypen. När du läser in eller importerar data till en datamodell förväntas det därför att data i varje kolumn i allmänhet är av en konsekvent datatyp.

Vissa funktioner returnerar skalära värden, inklusive strängar, medan andra funktioner fungerar med tal, både heltal och verkliga tal, eller datum och tider. Den datatyp som krävs för varje funktion beskrivs i avsnittet DAX-funktioner.

Du kan använda tabeller som innehåller flera kolumner och flera rader med data som argument för en funktion. Vissa funktioner returnerar också tabeller som lagras i minnet och kan användas som argument till andra funktioner.

Datum och tid

DAX lagrar datum- och tidsvärden med datatypen datetime som används av Microsoft SQL Server. Datetime-formatet använder ett flyttalsnummer där Datumvärden motsvarar heltalsdelen som representerar antalet dagar sedan den 30 december 1899. Tidsvärden motsvarar decimaldelen av ett datumvärde där Timmar, minuter och sekunder representeras av decimaltal på en dag. DAX-datum- och tidsfunktioner konverterar implicit argument till datatypen datetime.

Kommentar

Det exakta maximala DateTime-värdet som stöds av DAX är 31 december 9999 00:00:00.

Datum- och tidsliteral

Från och med augusti 2021-versionen av Power BI Desktop kan DAX-datum- och datetime-värden anges som en literal i formatet dt"YYYY-MM-DD", dt"YYYY-MM-DDThh:mm:ss"eller dt"YYYY-MM-DD hh:mm:ss". När det anges som en literal är det inte nödvändigt att använda funktionerna DATE, TIME, DATEVALUE och TIMEVALUE i uttrycket.

Följande uttryck använder till exempel funktionerna DATE och TIME för att filtrera på OrderDate:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)

Samma filteruttryck kan anges som en literal:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)

Kommentar

DAX-datum- och datetime-typat literalformat stöds inte i alla versioner av Power BI Desktop, Analysis Services och Power Pivot i Excel. Nya och uppdaterade DAX-funktioner introduceras vanligtvis först i Power BI Desktop och ingår senare i Analysis Services och Power Pivot i Excel.