DAX-operatorerDAX operators

DAX-språket (Data Analysis Expression) använder operatorer till att skapa uttryck som jämför värden, utför aritmetiska beräkningar eller arbetar med strängar.The Data Analysis Expression (DAX) language uses operators to create expressions that compare values, perform arithmetic calculations, or work with strings. I det här avsnittet beskrivs hur du använder varje operator.This section describes the use of each operator.

Typer av operatorerTypes of operators

Det finns fyra olika typer av beräkningsoperatorer: aritmetisk, jämförelse, textsammanfogning och logisk.There are four different types of calculation operators: arithmetic, comparison, text concatenation, and logical.

Aritmetiska operatorerArithmetic operators

Om du vill utföra grundläggande matematiska åtgärder som addition, subtraktion eller multiplikation, kombinera tal eller generera numeriska resultat använder du följande aritmetiska operatorer.To perform basic mathematical operations such as addition, subtraction, or multiplication; combine numbers; and produce numeric results, use the following arithmetic operators.

Aritmetisk operatorArithmetic operator InnebördMeaning ExempelExample
+ (plustecken)+ (plus sign) AdditionAddition 3+33+3
- (minustecken)– (minus sign) Subtraktion eller teckenSubtraction or sign 3-1-13–1–1
* (asterisk)* (asterisk) MultiplikationMultiplication 3*33*3
/ (snedstreck)/ (forward slash) DivisionDivision 3/33/3
^ (cirkumflex)^ (caret) ExponentieringExponentiation 16^416^4

Anteckning

Plustecknet kan fungera både som en binär operator och som en enställig operator.The plus sign can function both as a binary operator and as a unary operator. En binär operator kräver tal på båda sidor av operatorn och utför addition.A binary operator requires numbers on both sides of the operator and performs 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 att omvandla värdena till numeriska datatyper om de inte redan är tal.When you use values in a DAX formula on both sides of the binary operator, DAX tries to cast the values to numeric data types if they are not already numbers. Den enställig operator kan däremot användas för alla typer av argument.In contrast, the unary operator can be applied to any type of argument. Plustecknet påverkar inte typen eller värdet och ignoreras, medan minusoperatorn skapar ett negativt värde om det tillämpas på ett numeriskt värde.The plus symbol does not affect the type or value and is simply ignored, whereas the minus operator creates a negative value, if applied to a numeric value.

JämförelseoperatorerComparison operators

Du kan jämföra två värden med följande operatorer.You can compare two values with the following operators. När två värden jämförs med hjälp av dessa operatorer blir resultatet ett logiskt värde, antingen TRUE eller FALSE.When two values are compared by using these operators, the result is a logical value, either TRUE or FALSE.

JämförelseoperatorComparison operator InnebördMeaning ExempelExample
= Lika medEqual to [Region] = ”USA”[Region] = "USA"
== Strikt lika medStrict equal to [Region] == ”USA”[Region] == "USA"
> Större änGreater than [Sales Date] > ”Jan 2009”[Sales Date] > "Jan 2009"
< Mindre änLess than [Sales Date] < ”Jan 1 2009”[Sales Date] < "Jan 1 2009"
>= Större än eller lika medGreater than or equal to [Amount] >= 20000[Amount] >= 20000
<= Mindre än eller lika medLess than or equal to [Amount] <= 100[Amount] <= 100
<> Inte lika medNot equal to [Region] <> ”USA”[Region] <> "USA"

Alla jämförelseoperatorer utom = = behandlar BLANK som lika med nummer 0, tom sträng ””, DATE(1899, 12, 30) eller FALSE.All comparison operators except == treat BLANK as equal to number 0, empty string "", DATE(1899, 12, 30), or FALSE. Därför är [Column] = 0 sant när värdet för [Column] antingen är 0 eller BLANK.As a result, [Column] = 0 will be true when the value of [Column] is either 0 or BLANK. Däremot är [Column] = = 0 sant endast när värdet för [Column] är 0.In contrast, [Column] == 0 is true only when the value of [Column] is 0.

Operator för strängsammanfogningText concatenation operator

Använd et-tecknet ( & ) till att koppla eller sammanfoga två eller flera textsträngar och skapa en enda textdel.Use the ampersand (&) to join, or concatenate, two or more text strings to produce a single piece of text.

TextoperatorText operator InnebördMeaning ExempelExample
& (et-tecken)& (ampersand) Kopplar eller sammanfogar två värden för att skapa ett kontinuerligt textvärdeConnects, or concatenates, two values to produce one continuous text value [Region] & ”, ” & [City][Region] & ", " & [City]

Logiska operatorerLogical operators

Använd logiska operatorer (&&) och (||) när du kombinerar uttryck för att skapa ett enda resultat.Use logical operators (&&) and (||) to combine expressions to produce a single result.

TextoperatorText operator InnebördMeaning ExempelExamples
&& (dubbelt et-tecken)&& (double ampersand) Skapar ett AND-villkor mellan två uttryck som vart och ett har ett booleskt resultat.Creates an AND condition between two expressions that each have a Boolean result. Om båda uttrycken returnerar TRUE, returnerar kombinationen av uttrycken också TRUE. Annars returnerar kombinationen FALSE.If both expressions return TRUE, the combination of the expressions also returns TRUE; otherwise the combination returns FALSE. ([Region] = "France") && ([BikeBuyer] = "yes"))([Region] = "France") && ([BikeBuyer] = "yes"))
|| (dubbelt vertikalstreck)|| (double pipe symbol) Skapar ett OR-villkor mellan två logiska uttryck.Creates an OR condition between two logical expressions. Om något av uttrycken returnerar TRUE är resultatet TRUE. Resultatet är bara FALSE om båda uttrycken är FALSE.If either expression returns TRUE, the result is TRUE; only when both expressions are FALSE is the result FALSE. (([Region] = "France") || ([BikeBuyer] = "yes"))(([Region] = "France") || ([BikeBuyer] = "yes"))
ININ Skapar ett logiskt OR-villkor mellan varje rad som jämförs med en tabell.Creates a logical OR condition between each row being compared to a table. Obs! Syntaxen för tabellkonstruktorn använder klammerparenteser.Note: the table constructor syntax uses curly braces. 'Product'[Color] IN { "Red", "Blue", "Black" }'Product'[Color] IN { "Red", "Blue", "Black" }

Operatorer och prioritetsordningOperators and precedence order

I vissa fall kan den ordningsföljd som beräkningen utförs i påverka returvärdet. Därför är det viktigt att förstå hur ordningsföljden bestäms och hur du kan ändra den för att få önskat resultat.In some cases, the order in which calculation is performed can affect the Return value; therefore, it is important to understand how the order is determined and how you can change the order to obtain the desired results.

BeräkningsordningCalculation order

Ett uttryck utvärderar operatorer och värden i en speciell ordningsföljd.An expression evaluates the operators and values in a specific order. Alla uttryck inleds alltid med ett likhetstecken (=).All expressions always begin with an equal sign (=). Likhetstecknet anger att efterföljande tecken utgör ett uttryck.The equal sign indicates that the succeeding characters constitute an expression.

Efter likhetstecknet kommer de element som ska beräknas (operanderna), vilka åtskiljs av beräkningsoperatorer.Following the equal sign are the elements to be calculated (the operands), which are separated by calculation operators. Uttryck läses alltid från vänster till höger, men den ordningsföljd som elementen grupperas efter kan till viss grad styras med hjälp av parenteser.Expressions are always read from left to right, but the order in which the elements are grouped can be controlled to some degree by using parentheses.

Prioritet för operatorOperator precedence

Om du kombinerar flera operatorer i en enda formel, sorteras åtgärderna enligt nedanstående tabell.If you combine several operators in a single formula, the operations are ordered according to the following table. Om operatorerna har samma prioritetsvärde sorteras de från vänster till höger.If the operators have equal precedence value, they are ordered from left to right. Om ett uttryck till exempel innehåller både en multiplikations- och en divisionsoperator, utvärderas de i den ordning som de visas i uttrycket, från vänster till höger.For example, if an expression contains both a multiplication and division operator, they are evaluated in the order that they appear in the expression, from left to right.

OperatorOperator BeskrivningDescription
^ ExponentieringExponentiation
- Tecken (som i -1)Sign (as in –1)
* och /* and / Multiplikation och divisionMultiplication and division
!! NOT (enställig operator)NOT (unary operator)
+ och -+ and – Addition och subtraktionAddition and subtraction
& Kopplar ihop två textsträngar (sammanlänkning)Connects two strings of text (concatenation)
=,==,<,>,<=,>=,<>=,==,<,>,<=,>=,<> JämförelseComparison

Använda parenteser till att styra beräkningsordningenUsing parentheses to control calculation order

Om du vill ändra utvärderingsordningen, måste den del av formeln som ska beräknas först omslutas av parenteser.To change the order of evaluation, you should enclose in parentheses that part of the formula that must be calculated first. Nedanstående formel genererar till exempel 11, eftersom multiplikation beräknas före addition.For example, the following formula produces 11 because multiplication is calculated before addition. Formeln multiplicerar 2 med 3 och lägger sedan till 5 i resultatet.The formula multiplies 2 by 3, and then adds 5 to the result.

=5+2*3  

Om du däremot använder parenteser för att ändra syntaxen, ändras ordningen så att 5 och 2 adderas varefter resultatet multipliceras med 3 med resultatet 21.In contrast, if you use parentheses to change the syntax, the order is changed so that 5 and 2 are added together, and the result multiplied by 3 to produce 21.

=(5+2)*3  

I följande exempel kan parenteserna runt den första delen av formeln använda beräkningen för att utvärdera uttrycket (3 + 0.25) först och därefter dividera resultatet med resultatet av uttrycket, (3 - 0.25).In the following example, the parentheses around the first part of the formula force the calculation to evaluate the expression (3 + 0.25) first and then divide the result by the result of the expression, (3 - 0.25).

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

I följande exempel tillämpas exponentoperatorn först, enligt prioritetsreglerna för operatorer och sedan används teckenoperatorn.In the following example, the exponentiation operator is applied first, according to the rules of precedence for operators, and then the sign operator is applied. Resultatet för det här uttrycket är -4.The result for this expression is -4.

=-2^2  

För att se till att teckenoperatorn används på det numeriska värdet först, kan du använda parenteser för att styra operatorerna, vilket du ser i nedanstående exempel.To ensure that the sign operator is applied to the numeric value first, you can use parentheses to control operators, as shown in the following example. Resultatet för det här uttrycket är 4.The result for this expression is 4.

= (-2)^2  

KompatibilitetCompatibility

DAX hanterar och jämför enkelt olika datatyper, ungefär som Microsoft Excel.DAX easily handles and compares various data types, much like Microsoft Excel. Den underliggande beräkningsmotorn baseras dock på SQL Server Analysis Services och innehåller fler avancerade funktioner i ett relationsdatalager, inklusive bättre stöd för datum- och tidstyper.However, the underlying computation engine is based on SQL Server Analysis Services and provides additional advanced features of a relational data store, including richer support for date and time types. I vissa fall är resultatet av beräkningar eller funktioner därför inte likadana som i Excel.Therefore, in some cases the results of calculations or the behavior of functions may not be the same as in Excel. Dessutom stöder DAX fler datatyper än Excel.Moreover, DAX supports more data types than does Excel. I det här avsnittet beskrivs viktiga skillnader.This section describes the key differences.

Konvertera datatyper i operanderCoercing data types of operands

I allmänhet ska de två operanderna på vänster och höger sida i alla operatorer vara av samma datatyp.In general, the two operands on the left and right sides of any operator should be the same data type. Men om datatyperna skiljer sig från varandra kan DAX konvertera dem till en gemensam datatyp så att operatorn kan användas i vissa fall:However, if the data types are different, DAX will convert them to a common data type to apply the operator in some cases:

  1. Båda operanderna konverteras till den största möjliga gemensamma datatypen.Both operands are converted to the largest possible common data type.
  2. Operatorn tillämpas om det är möjligt.The operator is applied, if possible.

Anta till exempel att du har två tal som du vill kombinera.For example, suppose you have two numbers that you want to combine. Ett tal kommer från en formel, till exempel =[Price] * .20 och resultatet kan innehålla flera decimaler.One number results from a formula, such as =[Price] * .20, and the result may contain many decimal places. Det andra talet är ett heltal som har angetts som ett strängvärde.The other number is an integer that has been provided as a string value.

I det här fallet kommer DAX att konvertera båda talen till reella tal i ett numeriskt format, i det största numeriska formatet som kan lagra båda typerna av tal.In this case, DAX will convert both numbers to real numbers in a numeric format, using the largest numeric format that can store both kinds of numbers. DAX tillämpar sedan multiplikationen.Then DAX will apply the multiplication.

Beroende på datatypens kombination är det inte säkert att typkonverteringen kan användas vid jämförelseåtgärder.Depending on the data-type combination, type coercion may not be applied for comparison operations. 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.For a complete list of data types supported by DAX, see Data types supported in tabular models and Data types in Power BI Desktop.

Heltal, reella tal, valuta, datum/tid och tomma värden betraktas som numeriska vid jämförelser.Integer, Real Number, Currency, Date/time and Blank are considered numeric for comparison purposes. Tomma värden utvärderas till noll när en jämförelse utförs.Blank evaluates to zero when performing a comparison. Följande kombinationer av datatyper stöds vid jämförelseåtgärder.The following data-type combinations are supported for comparison operations.

Datatyp på vänster sidaLeft Side Data Type Datatyp på höger sidaRight Side Data Type
NumeriskNumeric NumeriskNumeric
BooleskBoolean BooleskBoolean
SträngString SträngString

Övriga jämförelser med blandade datatyper returnerar ett fel.Other mixed data-type comparisons will return an error. En formel som ="1" > 0 returnerar till exempel ett fel som anger att DAX-jämförelser saknar stöd för att jämföra textvärden med heltalsvärden.For example, a formula such as ="1" > 0 returns an error stating that DAX comparison operations do not support comparing values of type Text with values of type Integer.

Datatyper som används i DAXData Types used in DAX Datatyper som används i ExcelData Types used in Excel
Tal (I8, R8)Numbers (I8, R8) Tal (R8)Numbers (R8)
SträngString SträngString
BooleskBoolean BooleskBoolean
DateTimeDateTime VariantVariant
ValutaCurrency ValutaCurrency

Skillnader i prioritetsordningDifferences in precedence order

Prioritetsordningen för åtgärder i DAX-formler är i princip samma som i Microsoft Excel, men vissa Excel-operatorer stöds inte (exempelvis procent).The precedence order of operations in DAX formulas is basically the same as that used by Microsoft Excel, but some Excel operators are not supported, such as percent. Intervall stöds inte heller.Also, ranges are not supported.

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 formlerna kanske inte är giltiga.Therefore, whenever you copy and paste formulas from Excel, be sure to review the formula carefully, as some operators or elements in the formulas may not be valid. Om du är tveksam om i vilken ordning åtgärder utförs bör du använda parenteser till att styra åtgärdernas ordning.When there is any doubt about the order in which operations are performed, it's recommended you use parentheses to control the order of operations and remove any ambiguity about the result.

Se ävenSee also

DAX-syntaxDAX syntax
Namngivning av DAX-parametrarDAX parameter-naming