DAX-operatorer

Dax-språket (Data Analysis Expression) använder operatorer för att skapa uttryck som jämför värden, utför aritmetiska beräkningar eller arbetar med strängar.

Typer av operatorer

Det finns fyra olika typer av beräkningsoperatorer: aritmetik, jämförelse, textsammanfogning och logisk.

Aritmetiska operatorer

För att utföra grundläggande matematiska operationer som addition, subtraktion eller multiplikation; kombinera tal; och ger numeriska resultat använder du följande aritmetiska operatorer.

Aritmetikoperator Innebörd Exempel
+ (plustecken) Tillägg 3+3
– (minustecken) Subtraktion eller tecken 3–1–1
* (asterisk) Multiplikation 3*3
/ (snedstreck) Division 3/3
^ (caret) Exponentiering 16^4

Kommentar

Plustecknet kan fungera både som binär operator och som en unary-operator. En binär operator kräver tal på båda sidor av operatorn och utför addition. När du använder värden i en DAX-formel på båda sidor av den binära operatorn försöker DAX omvandla värdena till numeriska datatyper om de inte redan är tal. Däremot kan den unary operatorn tillämpas på alla typer av argument. Plussymbolen påverkar inte typen eller värdet och ignoreras helt enkelt, medan minusoperatorn skapar ett negativt värde om det tillämpas på ett numeriskt värde.

Jämförelseoperatorer

Du kan jämföra två värden med följande operatorer. När två värden jämförs med dessa operatorer är resultatet ett logiskt värde, antingen TRUE eller FALSE.

Jämförelseoperator Innebörd Exempel
= Lika med [Region] = "USA"
== Strikt lika med [Region] == "USA"
> Större än [Försäljningsdatum] > "Jan 2009"
< Mindre än [Försäljningsdatum] < "Jan 1 2009"
>= Större än eller lika med [Belopp] >= 20000
<= Mindre än eller lika med [Belopp] <= 100
<> Inte lika med [Region] <> "USA"

Alla jämförelseoperatorer utom == behandlar BLANK som lika med tal 0, tom sträng "", DATE(1899, 12, 30) eller FALSE. Därför är [Kolumn] = 0 sant när värdet för [Kolumn] är antingen 0 eller BLANK. [Kolumn] == 0 är däremot bara sant när värdet för [Kolumn] är 0.

Operator för textsammanlänkning

Använd &ersand (&) för att koppla ihop, eller sammanfoga, två eller flera textsträngar för att skapa en enda textdel.

Textoperator Innebörd Exempel
&(&) Anslut, eller sammanfogar, två värden för att skapa ett kontinuerligt textvärde [Region] & ", " & [Stad]

Logiska operatorer

Använd logiska operatorer (&&) och (||) för att kombinera uttryck för att skapa ett enda resultat.

Textoperator Innebörd Exempel
&(dubbla) Skapar ett AND-villkor mellan två uttryck som var och en har ett booleskt resultat. Om båda uttrycken returnerar TRUE returnerar kombinationen av uttrycken även TRUE; annars returnerar kombinationen FALSE. ([Region] = "France") && ([BikeBuyer] = "yes"))
|| (symbol för dubbla rör) Skapar ett OR-villkor mellan två logiska uttryck. Om något av uttrycken returnerar TRUE är resultatet TRUE. endast när båda uttrycken är FALSE är resultatet FALSE. (([Region] = "Frankrike") || ([BikeBuyer] = "yes"))
IN Skapar ett logiskt OR-villkor mellan varje rad som jämförs med en tabell. Obs! Tabellkonstruktorns syntax använder klammerparenteser. 'Product'[Color] IN { "Red", "Blue", "Black" }

Operatorer och prioritetsordning

I vissa fall kan den ordning i vilken beräkningen utförs påverka returvärdet. Därför är det viktigt att förstå hur ordningen bestäms och hur du kan ändra ordningen för att få önskat resultat.

Beräkningsordning

Ett uttryck utvärderar operatorerna och värdena i en viss ordning. Alla uttryck börjar alltid med ett likhetstecken (=). Likhetstecknet anger att de efterföljande tecknen utgör ett uttryck.

Efter likhetstecknet följer de element som ska beräknas (operanderna), som avgränsas med beräkningsoperatorer. Uttryck läses alltid från vänster till höger, men ordningen i vilken elementen grupperas kan i viss mån styras med parenteser.

Prioritet för operator

Om du kombinerar flera operatorer i en enda formel sorteras åtgärderna enligt följande tabell. Om operatorerna har samma prioritetsvärde sorteras de från vänster till höger. Om ett uttryck till exempel innehåller både en multiplikations- och divisionsoperator utvärderas de i den ordning som de visas i uttrycket, från vänster till höger.

Operatör beskrivning
^ Exponentiering
Logga in (som i –1)
*Och/ Multiplikation och division
+ och – Addition och subtraktion
& Anslut två textsträngar (sammanlänkning)
=,==,<,>,<=,>=,<>,IN Jämförelse
NOT NOT (unary operator)

Använda parenteser för att styra beräkningsordningen

Om du vill ändra utvärderingsordningen bör du omsluta parenteser som en del av formeln som måste beräknas först. Följande formel genererar till exempel 11 eftersom multiplikation beräknas före addition. Formeln multiplicerar 2 med 3 och lägger sedan till 5 i resultatet.

=5+2*3  

Om du däremot använder parenteser för att ändra syntaxen ändras ordningen så att 5 och 2 läggs ihop och resultatet multipliceras med 3 för att skapa 21.

=(5+2)*3  

I följande exempel tvingar parenteserna runt den första delen av formeln beräkningen att utvärdera uttrycket (3 + 0.25) först och dividerar sedan resultatet med resultatet av uttrycket , (3 - 0.25).

=(3 + 0.25)/(3 - 0.25)  

I följande exempel tillämpas exponenteringsoperatorn först, enligt reglerna för prioritet för operatorer, och sedan tillämpas teckenoperatorn. Resultatet för det här uttrycket är -4.

=-2^2  

För att säkerställa att teckenoperatorn tillämpas på det numeriska värdet först kan du använda parenteser för att styra operatorer, som du ser i följande exempel. Resultatet för det här uttrycket är 4.

= (-2)^2  

Kompatibilitet

DAX hanterar och jämför enkelt olika datatyper, ungefär som Microsoft Excel. Den underliggande beräkningsmotorn baseras dock på SQL Server Analysis Services och tillhandahåller ytterligare avancerade funktioner i ett relationsdatalager, inklusive mer omfattande stöd för datum- och tidstyper. I vissa fall kanske resultatet av beräkningar eller funktionsbeteendet inte är samma som i Excel. Dessutom har DAX stöd för fler datatyper än excel. I det här avsnittet beskrivs de viktigaste skillnaderna.

Tvinga datatyper av operander

I allmänhet bör de två operanderna på vänster och höger sida av alla operatorer vara samma datatyp. Men om datatyperna är olika konverterar DAX dem till en gemensam datatyp för att tillämpa operatorn i vissa fall:

  1. Båda operanderna konverteras till den största möjliga gemensamma datatypen.
  2. Operatorn tillämpas om möjligt.

Anta till exempel att du har två tal som du vill kombinera. Ett tal resultat från en formel, till exempel =[Price] * .20, och resultatet kan innehålla många decimaler. Det andra talet är ett heltal som har angetts som ett strängvärde.

I det här fallet konverterar DAX båda talen till verkliga tal i ett numeriskt format med det största numeriska formatet som kan lagra båda typerna av tal. DaX tillämpar sedan multiplikationen.

Beroende på kombinationen av datatyp kan det hända att typtvång inte tillämpas för jämförelseåtgärder. En fullständig lista över datatyper som stöds av DAX finns i Datatyper som stöds i tabellmodeller och Datatyper i Power BI Desktop.

Heltal, Real Number, Currency, Date/time och Blank anses vara numeriska i jämförelsesyfte. Blank utvärderas till noll när du utför en jämförelse. Följande kombinationer av datatyp stöds för jämförelseåtgärder.

Datatyp på vänster sida Datatyp på höger sida
Numerisk Numerisk
Booleskt Booleskt
String String

Andra jämförelser av blandade datatyper returnerar ett fel. Till exempel returnerar en formel som ="1" > 0 ett fel som anger att DAX-jämförelseåtgärder inte stöder jämförelse av värden av typen Text med värden av typen Heltal.

Datatyper som används i DAX Datatyper som används i Excel
Tal (I8, R8) Tal (R8)
String String
Booleskt Booleskt
Datum/tid Variant
Valuta Valuta

Skillnader i prioritetsordning

Prioritetsordningen för åtgärder i DAX-formler är i princip densamma som den som används av Microsoft Excel, men vissa Excel-operatorer stöds inte, till exempel procent. Dessutom stöds inte intervall.

När du kopierar och klistrar in formler från Excel bör du därför granska formeln noggrant eftersom vissa operatorer eller element i formler kanske inte är giltiga. När det råder tvivel om i vilken ordning åtgärderna utförs rekommenderar vi att du använder parenteser för att kontrollera ordningen på åtgärder och ta bort eventuella tvetydigheter om resultatet.

DAX-syntax
DAX-parameternamngivning