DAX-SyntaxDAX syntax

In diesem Artikel werden die Syntax und die Anforderungen für die Formelausdruckssprache DAX beschrieben.This article describes syntax and requirements for the DAX formula expression language.

SyntaxanforderungenSyntax requirements

Eine DAX-Formel beginnt immer mit einem Gleichheitszeichen (=).A DAX formula always starts with an equal sign (=). Nach dem Gleichheitszeichen können Sie einen beliebigen Ausdruck angeben, der einen Skalar ergibt oder in einen Skalar konvertiert werden kann.After the equals sign, you can provide any expression that evaluates to a scalar, or an expression that can be converted to a scalar. Diese umfassen die folgenden Themen:These include the following:

  • Eine Skalarkonstante oder ein Ausdruck, der einen Skalaroperator (+, -, *, /, >=, && usw.) verwendet.A scalar constant, or expression that uses a scalar operator (+,-,*,/,>=,...,&&, ...)

  • Verweise auf Spalten oder Tabellen:References to columns or tables. Die DAX-Sprache verwendet als Eingabe für Funktionen immer Tabellen und Spalten, keine Arrays oder willkürliche Werte.The DAX language always uses tables and columns as inputs to functions, never an array or arbitrary set of values.

  • Operatoren, Konstanten und Werte, die als Teil eines Ausdrucks bereitgestellt werden.Operators, constants, and values provided as part of an expression.

  • Das Ergebnis einer Funktion und deren erforderlichen Argumente:The result of a function and its required arguments. Einige DAX-Funktionen geben anstelle eines Skalars eine Tabelle zurück. Diese müssen in eine Funktion eingeschlossen werden, die die Tabelle auswertet und einen Skalar zurückgibt. Handelt es sich jedoch um eine Tabelle mit einer einzelnen Spalte und einer einzelnen Zeile, wird sie als Skalarwert behandelt.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.

    Die meisten DAX-Funktionen erfordern mindestens ein Argument, das Tabellen, Spalten, Ausdrücke und Werte enthalten kann.Most DAX functions require one or more arguments, which can include tables, columns, expressions, and values. Einige Funktionen, wie etwa PI, erfordern jedoch keine Argumente, sondern Klammern zur Angabe des NULL-Arguments.However, some functions, such as PI, do not require any arguments, but always require parentheses to indicate the null argument. So muss es beispielsweise immer „PI()“ heißen, nicht „PI“.For example, you must always type PI(), not PI. Sie können Funktionen auch in andere Funktionen schachteln.You can also nest functions within other functions.

  • Ausdrücke:Expressions. Ein Ausdruck kann eines oder mehrere der folgenden Elemente enthalten: Operatoren, Konstanten oder Verweise auf Spalten.An expression can contain any or all of the following: operators, constants, or references to columns.

Die folgenden Formeln sind beispielsweise alle zulässig:For example, the following are all valid formulas.

FormelFormula ErgebnisResult
=3= 3 33
="Sales"= "Sales" SalesSales
='Sales'[Betrag]= 'Sales'[Amount] Wenn Sie diese Formel in der Tabelle „Umsätze“ verwenden, erhalten Sie den Wert der Spalte „Betrag“ für die aktuelle Zeile.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 *[Betrag])= (0.03 *[Amount])

=0,03 * [Betrag]=0.03 * [Amount]
Drei Prozent des Werts in der Spalte „Betrag“ der aktuellen Tabelle.Three percent of the value in the Amount column of the current table.

Obwohl diese Formel zur Berechnung eines Prozentsatzes verwendet werden kann, wird das Ergebnis nur als Prozentzahl angezeigt, wenn Sie die Tabelle entsprechend formatieren.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() Wert der Konstante Pi.The value of the constant pi.

Hinweis

Das Verhalten von Formeln kann variieren, je nachdem, ob sie in einer berechneten Spalte oder einem Measure in einer PivotTable verwendet werden.Formulas can behave differently depending on whether they are used in a calculated column, or in a measure within a PivotTable. Beachten Sie daher immer den Kontext und die Beziehung der Daten in der Formel zu anderen Daten, die möglicherweise in der Berechnung verwendet werden.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.

BenennungsanforderungenNaming requirements

Häufig enthält ein Datenmodell mehrere Tabellen.A data model often contains multiple tables. Die Tabellen und ihre Spalten umfassen eine gemeinsame Datenbank, die in der In-Memory-Analyse-Engine (VertiPaq) gespeichert ist.Together the tables and their columns comprise a database stored in the in-memory analytics engine (VertiPaq). Innerhalb dieser Datenbank müssen alle Tabellen einen eindeutigen Namen besitzen.Within that database, all tables must have unique names. Auch innerhalb der einzelnen Tabellen müssen die Spaltennamen eindeutig sein.The names of columns must also be unique within each table. Bei allen Objektnamen wird die Groß-/Kleinschreibung nicht beachtet. So stellen etwa die Namen UMSÄTZE und Umsätze dieselbe Tabelle dar.All object names are case-insensitive; for example, the names SALES and Sales would represent the same table.

Alle Spalten und Measures, die Sie einem vorhandenen Datenmodell hinzufügen, müssen zu einer bestimmten Tabelle gehören.Each column and measure you add to an existing data model must belong to a specific table. Dabei geben Sie die Tabelle, die die Spalte enthält, entweder implizit an, wenn Sie eine berechnete Spalte in einer Tabelle erstellen, oder explizit, wenn Sie ein Measure erstellen und den Namen der Tabelle angeben, in der die Measuredefinition gespeichert werden soll.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.

Wenn Sie eine Tabelle oder Spalte als Eingabe für eine Funktion verwenden, muss der Spaltenname immer qualifiziert werden.When you use a table or column as an input to a function, you must generally qualify the column name. Ein vollqualifizierter Spaltenname besteht aus dem Tabellennamen gefolgt vom Spaltennamen in eckigen Klammern. Beispiel: 'US-Umsätze' [Produkte].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]. Ein vollqualifizierter Name wird immer dann benötigt, wenn Sie in den folgenden Kontexten auf eine Spalte verweisen:A fully qualified name is always required when you reference a column in the following contexts:

  • als Argument für die Funktion „VALUES“As an argument to the function, VALUES

  • als Argument für die Funktionen „ALL“ oder „ALLEXCEPT“As an argument to the functions, ALL or ALLEXCEPT

  • in einem Filterargument für die Funktionen „CALCULATE“ oder „CALCULATETABLE“In a filter argument for the functions, CALCULATE or CALCULATETABLE

  • als Argument für die Funktion „RELATEDTABLE“As an argument to the function, RELATEDTABLE

  • als Argument für jede ZeitintelligenzfunktionAs an argument to any time intelligence function

Ein nicht qualifizierter Spaltenname besteht nur aus dem in eckigen Klammern eingeschlossenen Spaltennamen. Beispiel: [Umsatzbetrag].An unqualified column name is just the name of the column, enclosed in brackets: for example, [Sales Amount]. Sie können beispielsweise den nicht qualifizierten Spaltennamen verwenden, wenn Sie aus derselben Zeile der aktuellen Tabelle auf einen Skalarwert verweisen.For example, when you are referencing a scalar value from the same row of the current table, you can use the unqualified column name.

Enthält ein Tabellenname Leerzeichen, reservierte Schlüsselwörter oder unzulässige Zeichen, müssen Sie den Tabellennamen in einfache Anführungszeichen einschließen.If the name of a table contains spaces, reserved keywords, or disallowed characters, you must enclose the table name in single quotation marks. Dasselbe gilt für Zeichen außerhalb des alphanumerischen ANSI-Zeichenbereichs, und zwar unabhängig davon, ob dieser Zeichensatz in Ihrem Gebietsschema unterstützt wird oder nicht.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. Wenn Sie z. B. eine Arbeitsmappe öffnen, die Tabellennamen in kyrillischen Zeichen enthält, wie etwa „Таблица“, muss der Tabellenname auch dann in Anführungszeichen eingeschlossen werden, wenn er keine Leerzeichen enthält.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.

Hinweis

Verwenden Sie für eine einfachere Eingabe von vollqualifizierten Spaltennamen die Funktion „AutoVervollständigen“ im Formel-Editor.To make it easier to enter the fully qualified names of columns, use the AutoComplete feature in the formula editor.

TabellenTables

  • Tabellennamen sind immer dann erforderlich, wenn es sich nicht um eine Spalte aus der aktuellen Tabelle handelt.Table names are required whenever the column is from a different table than the current table. Innerhalb der Datenbank müssen Tabellennamen eindeutig sein.Table names must be unique within the database.

  • Tabellennamen müssen in einfache Anführungszeichen eingeschlossen werden, wenn sie Leerzeichen, andere Sonderzeichen oder nicht englische alphanumerische Zeichen enthalten.Table names must be enclosed in single quotation marks if they contain spaces, other special characters or any non-English alphanumeric characters.

MeasuresMeasures

  • Measurenamen müssen immer in eckige Klammern gesetzt werden.Measure names must always be in brackets.

  • Measurenamen können Leerzeichen enthalten.Measure names can contain spaces.

  • Innerhalb eines Modells müssen Measurenamen eindeutig sein.Each measure name must be unique within a model. Wird auf ein vorhandenes Measure verwiesen, ist die Angabe des Tabellennamens vor dem Measurenamen daher optional.Therefore, the table name is optional in front of a measure name when referencing an existing measure. Beim Erstellen eines Measures müssen Sie jedoch immer eine Tabelle angeben, in der die Measuredefinition gespeichert werden soll.However, when you create a measure you must always specify a table where the measure definition will be stored.

SpaltenColumns

Spaltennamen müssen im Kontext einer Tabelle eindeutig sein. Andere Tabellen dürfen jedoch denselben Spaltennamen enthalten, da durch den Tabellennamen eine eindeutige Zuordnung erreicht wird.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).

Im Allgemeinen können Sie auf Spalten verweisen, ohne auf die Basistabelle verweisen zu müssen, zu der sie gehören. Dies ist nur bei Namenskonflikten oder bestimmten Funktionen erforderlich, die vollqualifizierte Spaltennamen benötigen.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.

Reservierte SchlüsselwörterReserved keywords

Entspricht der von Ihnen gewählte Tabellenname einem für Analysis Services reservierten Schlüsselwort, wird ein Fehler ausgelöst, und Sie müssen die Tabelle umbenennen.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. Wird der Objektname jedoch in eckige Klammern (für Spalten) oder Anführungszeichen (für Tabellen) gesetzt, können Sie darin Schlüsselwörter verwenden.However, you can use keywords in object names if the object name is enclosed in brackets (for columns) or quotation marks (for tables).

Hinweis

Anführungszeichen können je nach Anwendung durch unterschiedliche Zeichen dargestellt werden.Quotation marks can be represented by several different characters, depending on the application. Überprüfen Sie beim Einfügen einer Formel aus einem externen Dokument oder einer Webseite den ASCII-Code des Zeichens, das für öffnende und schließende Anführungszeichen verwendet wird, und vergewissern Sie sich, dass diese identisch sind.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. Andernfalls erkennt DAX die Symbole möglicherweise nicht als Anführungszeichen, und der Verweis ist ungültig.Otherwise DAX may be unable to recognize the symbols as quotation marks, making the reference invalid.

SonderzeichenSpecial characters

Die folgenden Zeichen und Zeichentypen sind in Tabellen-, Spalten- oder Measurenamen nicht zulässig:The following characters and character types are not valid in the names of tables, columns, or measures:

  • Voran- oder nachgestellte Leerzeichen, sofern diese nicht in Trennzeichen, eckige Klammern oder einzelne Apostrophe eingeschlossen werden.Leading or trailing spaces; unless the spaces are enclosed by name delimiters, brackets, or single apostrophes.

  • SteuerzeichenControl characters

  • Die folgenden Zeichen, die in Objektnamen nicht zulässig sind:The following characters that are not valid in the names of objects:

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

Beispiele für ObjektnamenExamples of object names

Die folgende Tabelle enthält einige Beispiele für Objektnamen:The following table shows examples of some object names:

ObjekttypObject Types BeispieleExamples KommentierenComment
TabellennameTable name SalesSales Enthält der Tabellenname keine Leerzeichen oder andere Sonderzeichen, muss der Name nicht in Anführungszeichen eingeschlossen werden.If the table name does not contain spaces or other special characters, the name does not need to be enclosed in quotation marks.
TabellennameTable name 'Umsätze Kanada''Canada Sales' Enthält der Name Leerzeichen, Tabstopps oder andere Sonderzeichen, müssen Sie den Namen in einfache Anführungszeichen einschließen.If the name contains spaces, tabs or other special characters, enclose the name in single quotation marks.
Vollqualifizierter SpaltennameFully qualified column name Umsätze[Betrag]Sales[Amount] Der Tabellenname wird dem Spaltennamen vorangestellt und der Spaltenname in eckige Klammern eingeschlossen.The table name precedes the column name, and the column name is enclosed in brackets.
Vollqualifizierter MeasurenameFully qualified measure name Umsätze[Profit]Sales[Profit] Der Tabellenname wird dem Measurenamen vorangestellt und der Measurename in eckige Klammern eingeschlossen.The table name precedes the measure name, and the measure name is enclosed in brackets. In bestimmten Kontexten ist immer ein vollqualifizierter Name erforderlich.In certain contexts, a fully qualified name is always required.
Nicht qualifizierter SpaltennameUnqualified column name [Betrag][Amount] Ein nicht qualifizierte Name besteht nur aus dem Spaltennamen in eckigen Klammern.The unqualified name is just the column name, in brackets. Nicht qualifizierte Namen können in Kontexten wie etwa Formeln in einer berechneten Spalte innerhalb derselben Tabelle oder in einer Aggregationsfunktion zur Überprüfung derselben Tabelle verwendet werden.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.
Vollqualifizierte Spalte in Tabelle mit LeerzeichenFully qualified column in table with spaces 'Umsätze Kanada'[Betrag]'Canada Sales'[Qty] Der Tabellenname enthält Leerzeichen und muss in einfache Anführungszeichen eingeschlossen werden.The table name contains spaces, so it must be surrounded by single quotes.

Weitere EinschränkungenOther restrictions

Die für eine Funktion erforderliche Syntax und der Typ des Vorgangs, der ausgeführt wird, variieren je nach Funktion erheblich.The syntax required for each function, and the type of operation it can perform, varies greatly depending on the function. Die folgenden Regeln gelten jedoch für alle Formeln und Ausdrücke:In general, however, the following rules apply to all formulas and expressions:

  • Mit DAX-Formeln und -Ausdrücken können keine einzelnen Werte in einer Tabelle geändert oder eingefügt werden.DAX formulas and expressions cannot modify or insert individual values in tables.

  • Sie können keine berechneten Zeilen mithilfe von DAX erstellen.You cannot create calculated rows by using DAX. Es können nur berechnete Spalten und Measures erstellt werden.You can create only calculated columns and measures.

  • Beim Definieren von berechneten Spalten können Sie Funktionen in jeder beliebigen Ebene schachteln.When defining calculated columns, you can nest functions to any level.

  • DAX verfügt über mehrere Funktionen, die eine Tabelle zurückgeben.DAX has several functions that return a table. In der Regel werden die von diesen Funktionen zurückgegebenen Werte als Eingabe für andere Funktionen verwendet, die als Eingabe eine Tabelle erfordern.Typically, you use the values returned by these functions as input to other functions, which require a table as input.

DAX-Operatoren und KonstantenDAX operators and constants

In der folgenden Tabelle werden die von DAX unterstützten Operatoren aufgeführt.The following table lists the operators that are supported by DAX. Weitere Informationen zur Syntax einzelner Operatoren finden Sie unter DAX-Operatoren.For more information about the syntax of individual operators, see DAX operators.

OperatortypOperator type Symbol und VerwendungSymbol and use
KlammeroperatorParenthesis operator () (Rangfolge und Gruppierung von Argumenten)() precedence order and grouping of arguments
Arithmetische OperatorenArithmetic operators + (Addition)+ (addition)

- (Subtraktion/- (subtraction/

Vorzeichen)sign)

* (Multiplikation)* (multiplication)

/ (Division)/ (division)

^ (Potenzierung)^ (exponentiation)
VergleichsoperatorenComparison operators = (ist gleich)= (equal to)

> (größer als)> (greater than)

< (kleiner als)< (less than)

>= (größer als oder gleich)>= (greater than or equal to)

<= (kleiner als oder gleich)<= (less than or equal to)

<> (ungleich)<> (not equal to)
Operator für TextverkettungText concatenation operator & (Verkettung)& (concatenation)
Logische OperatorenLogic operators && (und)&& (and)

|| (oder)|| (or)

DatentypenData types

Sie müssen den Datentyp einer Spalte oder eines Werts, die Sie in einer DAX-Formel verwenden, nicht umwandeln, konvertieren oder anderweitig angeben.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. Wenn Sie Daten in einer DAX-Formel verwenden, identifiziert DAX automatisch die Datentypen in Spalten, auf die verwiesen wird, sowie die Datentypen der von Ihnen eingegebenen Werte. Anschließend werden diese ggf. implizit konvertiert, um den angegebenen Vorgang abzuschließen.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.

Wenn Sie beispielsweise versuchen, einem Datumswert eine Zahl hinzuzufügen, interpretiert die Engine den Vorgang im Kontext der Funktion und konvertiert die Zahlen in einen gemeinsamen Datentyp. Anschließend wird das Ergebnis im vorgesehenen Format (einem Datum) dargestellt.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.

Es können jedoch nicht alle Werte erfolgreich konvertiert werden.However, there are some limitations on the values that can be successfully converted. Weist ein Wert oder eine Spalte einen Datentyp auf, der mit dem aktuellen Vorgang nicht kompatibel ist, gibt DAX einen Fehler zurück.If a value or a column has a data type that is incompatible with the current operation, DAX returns an error. Außerdem verfügt DAX über keine Funktionen, mit denen Sie den Datentyp vorhandener Daten, die Sie in ein Datenmodell importiert haben, explizit ändern, konvertieren oder umwandeln können.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.

Wichtig

DAX unterstützt nicht die Verwendung des Variant-Datentyps.DAX does not support use of the variant data type. Wenn Sie also Daten in ein Datenmodell laden oder importieren, wird für die Daten in den einzelnen Spalten immer ein konsistenter Datentyp erwartet.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.

Einige Funktionen geben Skalarwerte zurück (darunter Zeichenfolgen), andere Zahlen (sowohl ganze als auch reelle Zahlen sowie Datums- und Zeitangaben).Some functions return scalar values, including strings, whereas other functions work with numbers, both integers and real numbers, or dates and times. Die für die einzelnen Funktionen erforderlichen Datentypen werden unter DAX-Funktionen beschrieben.The data type required for each function is described in the section, DAX functions.

Sie können Tabellen mit mehreren Datenspalten und -zeilen als Argument für eine Funktion verwenden.You can use tables containing multiple columns and multiple rows of data as the argument to a function. Einige Funktionen geben auch Tabellen zurück, die im Arbeitsspeicher gespeichert und als Argumente für andere Funktionen verwendet werden können.Some functions also return tables, which are stored in memory and can be used as arguments to other functions.