DAX syntaks
I den här artikeln beskrivs and syntaxkrav för DAX formeluttrycksspråk.
Syntaxkrav
En DAX-formel börjar alltid med ett likhetstecken sign (=
). När det är lika med signkan du ange valfritt uttryck som utvärderas till en skalär, or ett uttryck som kan konverteras till en skalär. Dessa inkluderar följande:
En konstant i form av en skalär, ett or-uttryck som använder en skaläroperator (
+,-,*,/,>=,...,&&, ...
)Referenser till kolumnerna i tabellerna or. Det DAX språket använder alltid tabeller and kolumner som indata till funktioner, aldrig en matris or godtycklig uppsättning values.
Operatorer, konstanter andvalues tillhandahålls som en del av ett uttryck.
Resultatet av en funktion and är de argument som krävs. Vissa DAX funktioner returnerar en tabell i stället för en skalär, and måste omslutas i en funktion som utvärderar tabellen and returnerar en skalär. om tabellen inte är en enskild kolumn, en radtabell, behandlas den som en skalär value.
De flesta DAX funktioner kräver en or fler argument, som kan innehålla tabeller, kolumner, uttryck andvalues. Vissa funktioner, till exempel PI, kräver dock not alla argument, men kräver alltid parenteser för att indikera null-argumentet. Du måste till exempel alltid skriva PI(), notPI. Du kan också kapsla funktioner i andra funktioner.
Uttryck. Ett uttryck kan innehålla alla orall av följande: operatorer, konstanter, or referenser till kolumner.
Följande är till exempel all giltiga formler.
Formel | Resultat |
---|---|
= 3 |
3 |
= "Sales" |
Försäljning |
= 'Sales'[Amount] |
If du använder den här formeln i tabellen Försäljning, får du value av kolumnen Belopp i tabellen Försäljning för den aktuella raden. |
= (0.03 *[Amount]) =0.03 * [Amount] |
Tre procent av value i kolumnen Belopp i den aktuella tabellen. Även om den här formeln kan användas för att calculate en procentsats visas resultatet not som en procentandel om du inte använder formatering i tabellen. |
= PI() |
value av konstanten pi. |
Formler kan bete sig annorlunda beroende på hur de används. Du måste alltid vara medveten om kontexten för and hur den data som du använder i formeln är relaterade related till annan data som kan användas i beräkningen.
Namngivningskrav
En datamodell contains ofta flera tabeller. Tillsammans utgör tabellerna and och deras kolumner en databas som lagras i analysmotorn för in-memory (VertiPaq). I databasen måste all tabeller ha unika namn. Namnen på kolumnerna måste också vara unika i varje tabell. All objektnamn är skiftlägesokänsliga; Till exempel skulle namnen SALESandSales representera samma tabell.
Varje kolumn andmeasure du lägger till i en befintlig datamodell måste tillhöra en specifik tabell. Du anger den tabell som contains kolumnen implicit när du skapar en beräknad kolumn i en tabell or explicit när du skapar en measureand ange namnet på tabellen där measure definition ska lagras.
När du använder en tabell or kolumn som indata till en funktion måste du vanligtvis 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 argument för funktionen
VALUES
Som argument för funktionerna
ALL
orALLEXCEPT
I ett filter argument för funktionerna
CALCULATE
orCALCULATETABLE
Som argument för funktionen
RELATEDTABLE
Som argument för någon time intelligensfunktion
Ett okvalificerat kolumnnamn är bara namnet på kolumnen, som omges av hakparenteser: till exempel [Försäljningsbelopp]. När du till exempel refererar till en skalär value från samma rad i den aktuella tabellen kan du använda det okvalificerade kolumnnamnet.
If namnet på en tabell contains blanksteg, reserverade nyckelord, or otillåtna tecken, måste du omsluta tabellnamnet inom enkla citattecken. Du måste också omsluta tabellnamn i citattecken if namnet contains tecken som inte är alfanumeriska ANSI-tecken range, oavsett om din lokala språkvariant stöder teckenuppsättningen ornot. Om du till exempel if du öppnar en arbetsbok som contains tabellnamn skrivna med kyrilliska tecken, till exempel "Таблица", måste tabellnamnet omges av citattecken, even även om det not innehåller blanksteg.
Not
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 if de innehåller blanksteg, andra specialtecken or alfanumeriska tecken som inte är engelska.
Åtgärder
Measure namn måste alltid vara inom hakparenteser.
Measure namn kan innehålla blanksteg.
Varje measure namn måste vara unikt i en modell. Därför är tabellnamnet valfritt framför ett measure namn när du refererar till en befintlig measure. Men när du skapar en measure måste du alltid ange en tabell där measure definition 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 utan att referera till den bastabell som de tillhör, except när det kan finnas en namnkonflikt för att lösa or med vissa funktioner som kräver att kolumnnamn är fullständigt kvalificerade.
Reserverade nyckelord
If Om namnet som du använder för en tabell är detsamma som ett reserverat nyckelord i Analysis Services, uppstår ett error och and du måste byta namn på tabellen. Du kan dock använda nyckelord i objektnamn if objektnamnet omges av hakparenteser (för kolumner) or citattecken (för tabeller).
Not
Citattecken kan representeras av flera olika tecken, beroende på programmet. If du klistrar in formler från ett externt dokument or webbsida kontrollerar du ASCII-koden för det tecken som används för att öppna and avslutande 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 and teckentyper är not giltiga i namnen på tabeller, kolumner, or mått:
Inledande or avslutande blanksteg; om inte blankstegen omges av namnavgränsare, hakparenteser or enstaka apostrofer.
Kontrollera tecken
Följande tecken som är not 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 If tabellnamnet not innehåller blanksteg eller or andra specialtecken, måste namnet not omges av citattecken. |
Tabellnamn | "Kanadaförsäljning" | If namnet innehåller contains blanksteg, flikar eller or andra specialtecken, omge namnet med enkelcitattecken. |
Fullständigt kvalificerat kolumnnamn | Försäljning[Belopp] | Tabellnamnet föregår kolumnnamnet and kolumnnamnet omges av hakparenteser. |
Fullständigt kvalificerat measure namn | Försäljning[Vinst] | Tabellnamnet föregår det measure-namnet, medan andmeasure-namnet 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 innehåller formler i en beräknad kolumn i samma tabell, or i en aggregeringsfunktion som söker igenom samma tabell. |
Fullständigt kvalificerad kolumn i en tabell med mellanslag | 'Kanadaförsäljning'[Antal] | Tabellnamnet contains innehåller blanksteg, så det måste omges av enkla citattecken. |
Andra begränsningar
Den syntax som krävs för varje funktion, and 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 all formler and uttryck:
DAX formler and uttryck kan inte ändra or infoga enskilda values i tabeller.
Du kan inte skapa beräknade rader med hjälp av DAX. Du kan bara skapa beräknade kolumner and mått.
När du definierar beräknade kolumner kan du kapsla funktioner till valfri nivå.
DAX har flera funktioner som returnerar en tabell. Normalt använder du values som returneras av dessa funktioner som indata till andra funktioner, som kräver en tabell som indata.
DAX operatorer and 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.
Operatortyp | Användning av symbol and |
---|---|
Parentesoperator |
() prioritetsordning and gruppering av argument |
Aritmetiska operatorer |
+ (tillägg)- (subtraktion)* (multiplikation)/ (division)^ (upphöjning) |
Jämförelseoperatorer |
= (lika med)> (större än)< (mindre än)>= (större än or, lika med)<= (mindre än or lika med)<> (not lika med) |
Textsammanfogningsoperator |
& (sammanlänkning) |
Logikoperatorer |
&& (and)|| (or) |
datatyper
Du behöver not kasta, convert, or annars specificera datatypen för en kolumn orvalue 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 and av values som du skriver in, and utför implicita konverteringar vid behov för att slutföra den angivna åtgärden.
if du till exempel försöker lägga till ett tal i en datevaluetolkar motorn åtgärden i kontexten för funktionen, andconvert talen till en gemensam datatyp, and sedan presentera resultatet i den avsedda format, en date.
Det finns dock vissa begränsningar på values som kan konverteras framgångsrikt. If en valueor en kolumn har en datatyp som inte är kompatibel med den aktuella åtgärden, och DAX returnerar en error. Dessutom tillhandahåller DAXnot funktioner som gör att du uttryckligen kan ändra convertor omvandla datatypen för befintliga data som du har importerat till en datamodell.
Viktig
DAX stöder not användning av variantdatatypen. Därför förväntas det att när du läser in or importdata till en datamodell har data i varje kolumn vanligtvis en konsekvent datatyp.
Vissa funktioner returnerar skalär values, inklusive strängar, medan andra funktioner arbetar med tal, både heltal och reella tal and, samt datum or och tider and. Den datatyp som krävs för varje funktion beskrivs i avsnittet DAX funktioner.
Du kan använda tabeller som innehåller flera kolumner and flera rader med data som argument till en funktion. Vissa funktioner returnerar också tabeller som lagras i minnet and kan användas som argument till andra funktioner.
Date and time
DAX lagrar dateandtimevalues med datatypen datetime som används av Microsoft SQL Server. Datetime format använder ett flyttalsnummer där Datevalues motsvarar heltalsdelen som representerar antalet dagar sedan den 30 december 1899. Time values motsvarar decimaldelen av en datevalue där Timmar, minuter, and sekunder representeras av decimaltal i en day. DAX date and time funktioner convert implicit argument till datatypen datetime.
Not
Den exact maximala DateTime-value som stöds av DAX är 31 december 9999 00:00:00.
Date and time bokstavlig
Från och med augusti 2021-versionen av Power BI Desktop kan DAXdateand datetime-values anges som en literal i formatdt"YYYY-MM-DD"
, dt"YYYY-MM-DDThh:mm:ss"
, ordt"YYYY-MM-DD hh:mm:ss"
. När det anges som en literal är användningen av DATE, TIME, DATEVALUE, TIMEVALUE-funktionerna i uttrycket not nödvändig.
Följande uttryck använder funktionerna DATE,andochTIME för att filter baserat på OrderDate:
EVALUATE
FILTER (
FactInternetSales,
[OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)
Samma filter uttryck kan anges som en literal:
EVALUATE
FILTER (
FactInternetSales,
[OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)
Not
Den DAXdateand datetime-typade literalen format stöds not i all versioner av Power BI Desktop, Analysis Services andPower Pivot i Excel. Nya and uppdaterade DAX funktioner introduceras vanligtvis first i Power BI Desktop-and och ingår senare i Analysis Services andPower Pivot i Excel.