DAX-syntaxDAX syntax

I den här artikeln beskrivs syntax och krav för språket för DAX-formeluttryck.This article describes syntax and requirements for the DAX formula expression language.

SyntaxkravSyntax requirements

En DAX-formel börjar alltid med ett likhetstecken (=).A DAX formula always starts with an equal sign (=). Efter likhetstecknet kan du ange ett uttryck som utvärderas till en skalär eller ett uttryck som kan konverteras till en skalär.After the equals sign, you can provide any expression that evaluates to a scalar, or an expression that can be converted to a scalar. Dessa omfattar följande:These include the following:

  • En skalär konstant, eller ett uttryck som använder en skalär operator (+,-,*,/,>=,...,&&, ...)A scalar constant, or expression that uses a scalar operator (+,-,*,/,>=,...,&&, ...)

  • Referenser till kolumner eller tabeller.References to columns or tables. DAX-språket använder alltid tabeller och kolumner som indata till funktioner, aldrig en matris eller godtycklig uppsättning värden.The DAX language always uses tables and columns as inputs to functions, never an array or arbitrary set of values.

  • Operatorer, konstanter och värden tillhandahålls som en del av ett uttryck.Operators, constants, and values provided as part of an expression.

  • Resultatet av en funktion och de argument som krävs.The result of a function and its required arguments. 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, såvida inte tabellen är en enskild kolumn, en tabell med en enda rad. I så fall behandlas den som ett skalärt värde.Some DAX functions return a table instead of a scalar, and must be wrapped in a function that evaluates the table and returns a scalar; unless the table is a single column, single row table, then it is treated as a scalar value.

    De flesta DAX-funktioner kräver ett eller flera argument, som kan omfatta tabeller, kolumner, uttryck och värden.Most DAX functions require one or more arguments, which can include tables, columns, expressions, and values. Vissa funktioner, till exempel PI, kräver dock inte några argument, men kräver alltid parenteser för att indikera null-argumentet.However, some functions, such as PI, do not require any arguments, but always require parentheses to indicate the null argument. Till exempel måste du alltid skriva PI(), inte PI.For example, you must always type PI(), not PI. Du kan även kapsla funktioner i andra funktioner.You can also nest functions within other functions.

  • Uttryck.Expressions. Ett uttryck kan innehålla något eller allt av följande: operatorer, konstanter eller referenser till kolumner.An expression can contain any or all of the following: operators, constants, or references to columns.

Till exempel är alla följande giltiga formler.For example, the following are all valid formulas.

FormelFormula ResultatResult
= 3= 3 33
= "Försäljning"= "Sales" FörsäljningSales
= 'Sales'[Amount]= 'Sales'[Amount] Om du använder den här formeln i tabellen Sales får du värdet för kolumnen Amount i tabellen Sales för den aktuella raden.If you use this formula within the Sales table, you will get the value of the column Amount in the Sales table for the current row.
= (0.03 *[Amount])= (0.03 *[Amount])

=0.03 * [Amount]=0.03 * [Amount]
Tre procent av värdet i kolumnen Amount i den aktuella tabellen.Three percent of the value in the Amount column of the current table.

Även om den här formeln kan användas för att beräkna ett procenttal visas inte resultatet som en procentsats såvida du inte använder formatering i tabellen.Although this formula can be used to calculate a percentage, the result is not shown as a percentage unless you apply formatting in the table.
= PI()= PI() Värdet för konstanten pi.The value of the constant pi.

Anteckning

Formler kan beter sig på olika sätt beroende på om de används i en beräknad kolumn eller i ett mått i en pivottabell.Formulas can behave differently depending on whether they are used in a calculated column, or in a measure within a PivotTable. Du måste alltid känna till kontexten och hur de data som du använder i formeln relaterar till andra data som kanske används i beräkningen.You must always be aware of the context and how the data that you use in the formula is related to other data that might be used in the calculation.

NamngivningskravNaming requirements

En datamodell innehåller ofta flera tabeller.A data model often contains multiple tables. Tillsammans utgör tabeller och deras kolumner en databas som lagras i motorn för minnesintern analys (VertiPaq).Together the tables and their columns comprise a database stored in the in-memory analytics engine (VertiPaq). I den databasen måste alla tabeller ha unika namn.Within that database, all tables must have unique names. Namnen på kolumnerna måste också vara unika i varje tabell.The names of columns must also be unique within each table. Alla objektnamn är skiftlägesokänsliga. Till exempel representerar namnen SALES och Sales samma tabell.All object names are case-insensitive; for example, the names SALES and Sales would represent the same table.

Varje kolumn och mått som du lägger till i en befintlig datamodell måste tillhöra en specifik tabell.Each column and measure you add to an existing data model must belong to a specific table. Du anger den tabell som innehåller kolumnen implicit när du skapar en beräknad kolumn i en tabell, eller explicit när du skapar ett mått och anger namnet på den tabell där måttdefinitionen ska lagras.You specify the table that contains the column either implicitly, when you create a calculated column within a table, or explicitly, when you create a measure and specify the name of the table where the measure definition should be stored.

När du använder en tabell eller kolumn som indatatyp i en funktion måste du generellt kvalificera kolumnnamnet.When you use a table or column as an input to a function, you must generally qualify the column name. Det fullständigt kvalificerade namnet på en kolumn är tabellnamnet följt av kolumnnamnet inom hakparenteser, till exempel 'U.S. Sales'[Products].The fully qualified name of a column is the table name, followed by the column name in square brackets: for examples, 'U.S. Sales'[Products]. Ett fullständigt kvalificerat namn krävs alltid när du refererar till en kolumn i följande kontexter:A fully qualified name is always required when you reference a column in the following contexts:

  • Som ett argument till funktionen VALUESAs an argument to the function, VALUES

  • Som ett argument till funktionen ALL eller ALLEXCEPTAs an argument to the functions, ALL or ALLEXCEPT

  • I ett filterargument för funktionen CALCULATE eller CALCULATETABLEIn a filter argument for the functions, CALCULATE or CALCULATETABLE

  • Som ett argument till funktionen RELATEDTABLEAs an argument to the function, RELATEDTABLE

  • Som ett argument till en tidsinformationsfunktionAs an argument to any time intelligence function

Ett okvalificerat kolumnnamn är bara namnet på kolumnen inom av hakparenteser, till exempel [Sales Amount].An unqualified column name is just the name of the column, enclosed in brackets: for example, [Sales Amount]. Om 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.For example, when you are referencing a scalar value from the same row of the current table, you can use the unqualified column name.

Om namnet på en tabell innehåller blanksteg, reserverade nyckelord eller otillåtna tecken måste du sätta tabellnamnet inom enkla citattecken.If the name of a table contains spaces, reserved keywords, or disallowed characters, you must enclose the table name in single quotation marks. Du måste även ange tabellnamn inom citattecken om namnet innehåller tecken utanför intervallet med alfanumeriska ANSI-tecken, oavsett om teckenuppsättningen har stöd i dina nationella inställningar eller ej.You must also enclose table names in quotation marks if the name contains any characters outside the ANSI alphanumeric character range, regardless of whether your locale supports the character set or not. 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.For example, if you open a workbook that contains table names written in Cyrillic characters, such as 'Таблица', the table name must be enclosed in quotation marks, even though it does not contain spaces.

Anteckning

Du kan göra det enklare att ange kolumners fullständigt kvalificerade namn genom att använda funktionen AutoComplete i formulärredigeraren.To make it easier to enter the fully qualified names of columns, use the AutoComplete feature in the formula editor.

TabellerTables

  • Tabellnamn krävs när kolumnen kommer från en annan tabell än den aktuella tabellen.Table names are required whenever the column is from a different table than the current table. Tabellnamn måste vara unika i databasen.Table names must be unique within the database.

  • Tabellnamn måste omges av enkla citattecken om de innehåller blanksteg, andra specialtecken eller alfanumeriska tecken som inte är engelska.Table names must be enclosed in single quotation marks if they contain spaces, other special characters or any non-English alphanumeric characters.

MåttMeasures

  • Måttnamn måste alltid vara inom hakparenteser.Measure names must always be in brackets.

  • Måttnamn kan innehålla blanksteg.Measure names can contain spaces.

  • Varje måttnamn måste vara unikt i en modell.Each measure name must be unique within a model. Därför är tabellnamnet valfritt framför ett måttnamn när du refererar till ett befintligt mått.Therefore, the table name is optional in front of a measure name when referencing an existing measure. Men när du skapar ett mått måste du alltid ange en tabell där måttdefinitionen ska lagras.However, when you create a measure you must always specify a table where the measure definition will be stored.

KolumnerColumns

Kolumnnamn måste vara unika i kontexten för en tabell. Däremot kan flera tabeller ha kolumner med samma namn (tvetydigheten kommer från tabellnamnet).Column names must be unique in the context of a table; however, multiple tables can have columns with the same names (disambiguation comes with the table name).

I allmänhet kan kolumner refereras till utan referens 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.In general, columns can be referenced without referencing the base table that they belong to, except when there might be a name conflict to resolve or with certain functions that require column names to be fully qualified.

Reserverade nyckelordReserved keywords

Om det namn som du använder för en tabell är detsamma som ett reserverat nyckelord i Analysis Services uppstår ett fel, och du måste byta namn på tabellen.If the name that you use for a table is the same as an Analysis Services reserved keyword, an error is raised, and you must rename the table. Du kan dock använda nyckelord i objektnamn om objektnamnet omges av hakparenteser (för kolumner) eller citattecken (för tabeller).However, you can use keywords in object names if the object name is enclosed in brackets (for columns) or quotation marks (for tables).

Anteckning

Citattecken kan representeras av flera olika tecken, beroende på programmet.Quotation marks can be represented by several different characters, depending on the application. Om du klistrar in formler från ett externt dokument eller en webbplats ska du kontrollera att ASCII-koden för det tecken som används för att öppna och stänga citattecken är densamma.If you paste formulas from an external document or Web page, make sure to check the ASCII code of the character that is used for opening and closing quotes, to ensure that they are the same. Annars kan DAX kanske inte identifiera symbolerna som citattecken, vilket gör referensen ogiltig.Otherwise DAX may be unable to recognize the symbols as quotation marks, making the reference invalid.

SpecialteckenSpecial characters

Följande tecken och teckentyper är inte giltiga i namnen på tabeller, kolumner eller mått:The following characters and character types are not valid in the names of tables, columns, or measures:

  • Inledande eller avslutande blanksteg, såvida inte blankstegen omges av namnavgränsare, hakparenteser eller enkla apostrofer.Leading or trailing spaces; unless the spaces are enclosed by name delimiters, brackets, or single apostrophes.

  • KontrollteckenControl characters

  • Följande tecken är ogiltiga i namn på objekt:The following characters that are not valid in the names of objects:

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

Exempel på objektnamnExamples of object names

I följande tabell visas exempel på några objektnamn:The following table shows examples of some object names:

ObjekttyperObject Types ExempelExamples KommentarComment
TabellnamnTable name FörsäljningSales Om tabellnamnet inte innehåller blanksteg eller andra specialtecken behöver namnet inte omges av citattecken.If the table name does not contain spaces or other special characters, the name does not need to be enclosed in quotation marks.
TabellnamnTable name 'Canada Sales''Canada Sales' Om namnet innehåller blanksteg, tabbar eller andra specialtecken omger du namnet med enkla citattecken.If the name contains spaces, tabs or other special characters, enclose the name in single quotation marks.
Fullständigt kvalificerat kolumnnamnFully qualified column name Sales[Amount]Sales[Amount] Tabellnamnet föregår kolumnnamnet och kolumnnamnet omges av hakparenteser.The table name precedes the column name, and the column name is enclosed in brackets.
Fullständigt kvalificerat måttnamnFully qualified measure name Sales[Profit]Sales[Profit] Tabellnamnet föregår måttnamnet och måttnamnet omges av hakparenteser.The table name precedes the measure name, and the measure name is enclosed in brackets. I vissa sammanhang krävs alltid ett fullständigt kvalificerat namn.In certain contexts, a fully qualified name is always required.
Okvalificerat kolumnnamnUnqualified column name [Amount][Amount] Det okvalificerade namnet är bara kolumnnamnet inom hakparenteser.The unqualified name is just the column name, in brackets. Kontexter där du kan använda det okvalificerade namnet omfattar formler i en beräknad kolumn i samma tabell, eller i en aggregeringsfunktion som genomsöker samma tabell.Contexts where you can use the unqualified name include formulas in a calculated column within the same table, or in an aggregation function that is scanning over the same table.
Fullständigt kvalificerad kolumn i tabell med blankstegFully qualified column in table with spaces 'Canada Sales'[Qty]'Canada Sales'[Qty] Tabell namnet innehåller blanksteg, så det måste omges av enkla citattecken.The table name contains spaces, so it must be surrounded by single quotes.

Övriga begränsningarOther restrictions

Den syntax som krävs för varje funktion, och vilken typ av åtgärd den kan utföra, varierar kraftigt beroende på funktion.The syntax required for each function, and the type of operation it can perform, varies greatly depending on the function. I allmänhet gäller dock följande regler för alla formler och uttryck:In general, however, the following rules apply to all formulas and expressions:

  • DAX-formler och -uttryck kan inte ändra eller infoga enskilda värden i tabeller.DAX formulas and expressions cannot modify or insert individual values in tables.

  • Du kan inte skapa beräknade rader med hjälp av DAX.You cannot create calculated rows by using DAX. Du kan bara skapa beräknade kolumner och mått.You can create only calculated columns and measures.

  • När du definierar beräknade kolumner kan du kapsla funktioner till valfri nivå.When defining calculated columns, you can nest functions to any level.

  • DAX har flera funktioner som returnerar en tabell.DAX has several functions that return a table. Vanligtvis använder du de värden som returneras av dessa funktioner som indata till andra funktioner som kräver en tabell som indata.Typically, you use the values returned by these functions as input to other functions, which require a table as input.

DAX-operatorer och -konstanterDAX operators and constants

I följande tabell visas de operatorer som stöds av DAX.The following table lists the operators that are supported by DAX. Mer information om syntaxen för enskilda operatorer finns i DAX-operatorer.For more information about the syntax of individual operators, see DAX operators.

OperatortypOperator type Symbol och användningSymbol and use
ParentesoperatorParenthesis operator () prioritetsordning och gruppering av argument() precedence order and grouping of arguments
Aritmetiska operatorerArithmetic operators + (addition)+ (addition)

- (subtraktion/- (subtraction/

tecken)sign)

* (multiplikation)* (multiplication)

/ (division)/ (division)

^ (exponentiering)^ (exponentiation)
JämförelseoperatorerComparison operators = (lika med)= (equal to)

> (större än)> (greater than)

< (mindre än)< (less than)

>= (större än eller lika med)>= (greater than or equal to)

<= (mindre än eller lika med)<= (less than or equal to)

<> (inte lika med)<> (not equal to)
Operator för textsammanlänkningText concatenation operator & (sammanlänkning)& (concatenation)
LogikoperatorerLogic operators && (och)&& (and)

|| (eller)|| (or)

DatatyperData types

Du behöver inte typkonvertera, konvertera eller på annat sätt ange datatypen för en kolumn eller ett värde som du använder i en DAX-formel.You do not need to cast, convert, or otherwise specify the data type of a column or value that you use in a DAX formula. 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 där det behövs för att slutföra den angivna åtgärden.When you use data in a DAX formula, DAX automatically identifies the data types in referenced columns and of the values that you type in, and performs implicit conversions where necessary to complete the specified operation.

Om du till exempel försöker lägga till ett tal till ett datumvärde kommer motorn att tolka åtgärden i kontexten för funktionen och konvertera siffrorna till en gemensam datatyp och sedan presentera resultatet i det avsedda formatet – ett datum.For example, if you try to add a number to a date value, the engine will interpret the operation in the context of the function, and convert the numbers to a common data type, and then present the result in the intended format, a date.

Det finns dock vissa begränsningar för de värden som kan konverteras.However, there are some limitations on the values that can be successfully converted. Om ett värde eller en kolumn har en datatyp som inte är kompatibel med den aktuella åtgärden returnerar DAX ett fel.If a value or a column has a data type that is incompatible with the current operation, DAX returns an error. DAX tillhandahåller inte heller funktioner som gör att du explicit kan ändra, konvertera eller typkonvertera datatypen för befintliga data som du har importerat till en datamodell.Also, DAX does not provide functions that let you explicitly change, convert, or cast the data type of existing data that you have imported into a data model.

Viktigt

DAX stöder inte användning av datatypen variant.DAX does not support use of the variant data type. När du läser in eller importerar data till en datamodell förväntas därför data i varje kolumn vanligtvis ha en konsekvent datatyp.Therefore, when you load or import data into a data model, it's expected the data in each column is generally of a consistent data type.

Vissa funktioner returnerar skalära värden, inklusive strängar, medan andra funktioner arbetar med siffror, både heltal och reella tal, eller datum och tider.Some functions return scalar values, including strings, whereas other functions work with numbers, both integers and real numbers, or dates and times. Den datatyp som krävs för varje funktion beskrivs i avsnittet DAX-funktioner.The data type required for each function is described in the section, DAX functions.

Du kan använda tabeller som innehåller flera kolumner och flera rader med data som argument till en funktion.You can use tables containing multiple columns and multiple rows of data as the argument to a function. Vissa funktioner returnerar även tabeller, som lagras i minnet och kan användas som argument till andra funktioner.Some functions also return tables, which are stored in memory and can be used as arguments to other functions.