DAX-Syntax

In diesem Artikel werden die Syntax und die Anforderungen für die Formelausdruckssprache DAX beschrieben.

Syntaxanforderungen

Eine DAX-Formel beginnt immer mit einem Gleichheitszeichen (=). Nach dem Gleichheitszeichen können Sie einen beliebigen Ausdruck angeben, der einen Skalar ergibt oder in einen Skalar konvertiert werden kann. Diese umfassen die folgenden Themen:

  • Eine Skalarkonstante oder ein Ausdruck, der einen Skalaroperator (+,-,*,/,>=,...,&&, ...) verwendet

  • Verweise auf Spalten oder Tabellen: Die DAX-Sprache verwendet als Eingabe für Funktionen immer Tabellen und Spalten, keine Arrays oder willkürliche Werte.

  • Operatoren, Konstanten und Werte, die als Teil eines Ausdrucks bereitgestellt werden.

  • Das Ergebnis einer Funktion und deren erforderlichen Argumente: 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.

    Die meisten DAX-Funktionen erfordern mindestens ein Argument, das Tabellen, Spalten, Ausdrücke und Werte enthalten kann. Einige Funktionen, wie etwa PI, erfordern jedoch keine Argumente, sondern Klammern zur Angabe des NULL-Arguments. So muss es beispielsweise immer „PI()“ heißen, nicht „PI“. Sie können Funktionen auch in andere Funktionen schachteln.

  • Ausdrücke: Ein Ausdruck kann eines oder mehrere der folgenden Elemente enthalten: Operatoren, Konstanten oder Verweise auf Spalten.

Die folgenden Formeln sind beispielsweise alle zulässig:

Formel Ergebnis
=3 3
="Sales" Sales
='Sales'[Betrag] Wenn Sie diese Formel in der Tabelle „Umsätze“ verwenden, erhalten Sie den Wert der Spalte „Betrag“ für die aktuelle Zeile.
=(0,03 *[Betrag])

=0,03 * [Betrag]
Drei Prozent des Werts in der Spalte „Betrag“ der aktuellen Tabelle.

Obwohl diese Formel zur Berechnung eines Prozentsatzes verwendet werden kann, wird das Ergebnis nur als Prozentzahl angezeigt, wenn Sie die Tabelle entsprechend formatieren.
=PI() Wert der Konstante Pi.

Formeln können sich je nach ihrer Verwendung unterschiedlich verhalten. 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.

Benennungsanforderungen

Häufig enthält ein Datenmodell mehrere Tabellen. Die Tabellen und ihre Spalten umfassen eine gemeinsame Datenbank, die in der In-Memory-Analyse-Engine (VertiPaq) gespeichert ist. Innerhalb dieser Datenbank müssen alle Tabellen einen eindeutigen Namen besitzen. Auch innerhalb der einzelnen Tabellen müssen die Spaltennamen eindeutig sein. Bei allen Objektnamen wird die Groß-/Kleinschreibung nicht beachtet. So stellen etwa die Namen UMSÄTZE und Umsätze dieselbe Tabelle dar.

Alle Spalten und Measures, die Sie einem vorhandenen Datenmodell hinzufügen, müssen zu einer bestimmten Tabelle gehören. 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.

Wenn Sie eine Tabelle oder Spalte als Eingabe für eine Funktion verwenden, muss der Spaltenname immer qualifiziert werden. Ein vollqualifizierter Spaltenname besteht aus dem Tabellennamen gefolgt vom Spaltennamen in eckigen Klammern. Beispiel: 'US-Umsätze' [Produkte]. Ein vollqualifizierter Name wird immer dann benötigt, wenn Sie in den folgenden Kontexten auf eine Spalte verweisen:

  • als Argument für die Funktion „VALUES“

  • als Argument für die Funktionen „ALL“ oder „ALLEXCEPT“

  • in einem Filterargument für die Funktionen „CALCULATE“ oder „CALCULATETABLE“

  • als Argument für die Funktion „RELATEDTABLE“

  • als Argument für jede Zeitintelligenzfunktion

Ein nicht qualifizierter Spaltenname besteht nur aus dem in eckigen Klammern eingeschlossenen Spaltennamen. Beispiel: [Umsatzbetrag]. Sie können beispielsweise den nicht qualifizierten Spaltennamen verwenden, wenn Sie aus derselben Zeile der aktuellen Tabelle auf einen Skalarwert verweisen.

Enthält ein Tabellenname Leerzeichen, reservierte Schlüsselwörter oder unzulässige Zeichen, müssen Sie den Tabellennamen in einfache Anführungszeichen einschließen. 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. 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.

Hinweis

Verwenden Sie für eine einfachere Eingabe von vollqualifizierten Spaltennamen die Funktion „AutoVervollständigen“ im Formel-Editor.

Tabellen

  • Tabellennamen sind immer dann erforderlich, wenn es sich nicht um eine Spalte aus der aktuellen Tabelle handelt. Innerhalb der Datenbank müssen Tabellennamen eindeutig sein.

  • Tabellennamen müssen in einfache Anführungszeichen eingeschlossen werden, wenn sie Leerzeichen, andere Sonderzeichen oder nicht englische alphanumerische Zeichen enthalten.

Measures

  • Measurenamen müssen immer in eckige Klammern gesetzt werden.

  • Measurenamen können Leerzeichen enthalten.

  • Innerhalb eines Modells müssen Measurenamen eindeutig sein. Wird auf ein vorhandenes Measure verwiesen, ist die Angabe des Tabellennamens vor dem Measurenamen daher optional. Beim Erstellen eines Measures müssen Sie jedoch immer eine Tabelle angeben, in der die Measuredefinition gespeichert werden soll.

Spalten

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.

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.

Reservierte Schlüsselwörter

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. 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.

Hinweis

Anführungszeichen können je nach Anwendung durch unterschiedliche Zeichen dargestellt werden. Ü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. Andernfalls erkennt DAX die Symbole möglicherweise nicht als Anführungszeichen, und der Verweis ist ungültig.

Sonderzeichen

Die folgenden Zeichen und Zeichentypen sind in Tabellen-, Spalten- oder Measurenamen nicht zulässig:

  • Voran- oder nachgestellte Leerzeichen, sofern diese nicht in Trennzeichen, eckige Klammern oder einzelne Apostrophe eingeschlossen werden.

  • Steuerzeichen

  • Die folgenden Zeichen, die in Objektnamen nicht zulässig sind:

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

Beispiele für Objektnamen

Die folgende Tabelle enthält einige Beispiele für Objektnamen:

Objekttyp Beispiele Kommentieren
Tabellenname Sales Enthält der Tabellenname keine Leerzeichen oder andere Sonderzeichen, muss der Name nicht in Anführungszeichen eingeschlossen werden.
Tabellenname 'Umsätze Kanada' Enthält der Name Leerzeichen, Tabstopps oder andere Sonderzeichen, müssen Sie den Namen in einfache Anführungszeichen einschließen.
Vollqualifizierter Spaltenname Umsätze[Betrag] Der Tabellenname wird dem Spaltennamen vorangestellt und der Spaltenname in eckige Klammern eingeschlossen.
Vollqualifizierter Measurename Umsätze[Profit] Der Tabellenname wird dem Measurenamen vorangestellt und der Measurename in eckige Klammern eingeschlossen. In bestimmten Kontexten ist immer ein vollqualifizierter Name erforderlich.
Nicht qualifizierter Spaltenname [Betrag] Ein nicht qualifizierte Name besteht nur aus dem Spaltennamen in eckigen Klammern. 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.
Vollqualifizierte Spalte in Tabelle mit Leerzeichen 'Umsätze Kanada'[Betrag] Der Tabellenname enthält Leerzeichen und muss in einfache Anführungszeichen eingeschlossen werden.

Weitere Einschränkungen

Die für eine Funktion erforderliche Syntax und der Typ des Vorgangs, der ausgeführt wird, variieren je nach Funktion erheblich. Die folgenden Regeln gelten jedoch für alle Formeln und Ausdrücke:

  • Mit DAX-Formeln und -Ausdrücken können keine einzelnen Werte in einer Tabelle geändert oder eingefügt werden.

  • Sie können keine berechneten Zeilen mithilfe von DAX erstellen. Es können nur berechnete Spalten und Measures erstellt werden.

  • Beim Definieren von berechneten Spalten können Sie Funktionen in jeder beliebigen Ebene schachteln.

  • DAX verfügt über mehrere Funktionen, die eine Tabelle zurückgeben. In der Regel werden die von diesen Funktionen zurückgegebenen Werte als Eingabe für andere Funktionen verwendet, die als Eingabe eine Tabelle erfordern.

DAX-Operatoren und Konstanten

In der folgenden Tabelle werden die von DAX unterstützten Operatoren aufgeführt. Weitere Informationen zur Syntax einzelner Operatoren finden Sie unter DAX-Operatoren.

Operatortyp Symbol und Verwendung
Klammeroperator () (Rangfolge und Gruppierung von Argumenten)
Arithmetische Operatoren + (Addition)

- (Subtraktion/

Vorzeichen)

* (Multiplikation)

/ (Division)

^ (Potenzierung)
Vergleichsoperatoren = (ist gleich)

> (größer als)

< (kleiner als)

>= (größer als oder gleich)

<= (kleiner als oder gleich)

<> (ungleich)
Operator für Textverkettung & (Verkettung)
Logische Operatoren && (und)

|| (or)

Datentypen

Sie müssen den Datentyp einer Spalte oder eines Werts, die Sie in einer DAX-Formel verwenden, nicht umwandeln, konvertieren oder anderweitig angeben. 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.

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.

Es können jedoch nicht alle Werte erfolgreich konvertiert werden. Weist ein Wert oder eine Spalte einen Datentyp auf, der mit dem aktuellen Vorgang nicht kompatibel ist, gibt DAX einen Fehler zurück. 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.

Wichtig

DAX unterstützt nicht die Verwendung des Variant-Datentyps. Wenn Sie also Daten in ein Datenmodell laden oder importieren, wird für die Daten in den einzelnen Spalten immer ein konsistenter Datentyp erwartet.

Einige Funktionen geben Skalarwerte zurück (darunter Zeichenfolgen), andere Zahlen (sowohl ganze als auch reelle Zahlen sowie Datums- und Zeitangaben). Die für die einzelnen Funktionen erforderlichen Datentypen werden unter DAX-Funktionen beschrieben.

Sie können Tabellen mit mehreren Datenspalten und -zeilen als Argument für eine Funktion verwenden. Einige Funktionen geben auch Tabellen zurück, die im Arbeitsspeicher gespeichert und als Argumente für andere Funktionen verwendet werden können.

Datum und Uhrzeit

DAX speichert Datums- und Uhrzeitwerte mithilfe des von Microsoft SQL Server verwendeten datetime-Datentyps. Das datetime-Format verwendet eine Gleitkommazahl, wobei Datumswerte dem ganzzahligen Teil entsprechen, der die Anzahl der Tage seit dem 30. Dezember 1899 darstellt. Zeitwerte entsprechen dem Dezimalteil eines Datumswerts, wobei Stunden, Minuten und Sekunden durch Dezimalstellen eines Tages dargestellt werden. Datums- und Uhrzeit-DAX-Funktionen konvertieren Argumente implizit in den datetime-Datentyp.

Hinweis

Der genaue maximale, von DAX unterstützte DateTime-Wert ist der 31. Dezember 9999 00:00:00.

Datums- und Uhrzeitliteral

Ab Power BI Desktop-Version August 2021 können Datums- und Uhrzeit-DAX-Werte im Format dt"YYYY-MM-DD", dt"YYYY-MM-DDThh:mm:ss" oder dt"YYYY-MM-DD hh:mm:ss" als Literal angegeben werden. Bei Angabe als Literal ist die Verwendung der Funktionen DATE, TIME, DATEVALUE und TIMEVALUE im Ausdruck nicht erforderlich.

Im folgenden Ausdruck wird beispielsweise mit den Funktionen DATE und TIME nach OrderDate gefiltert:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)

Derselbe Filterausdruck kann als Literal angegeben werden:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)

Hinweis

Das date- und datetime-Typ-DAX-Literalformat wird nicht in allen Versionen von Power BI Desktop, Analysis Services und Power Pivot in Excel unterstützt. Neue und aktualisierte DAX-Funktionen werden in der Regel zuerst in Power BI Desktop eingeführt und später in Analysis Services und Power Pivot in Excel integriert.