DAX-Abfragen
Berichterstellungsclients wie Power BI und Excel führen DAX-Abfragen aus, wenn ein Feld in einem Bericht platziert oder wenn ein Filter angewendet wird. Mit SQL Server Management Studio (SSMS), Power BI Report Builder und Open-Source-Tools wie DAX Studio können Sie eigene DAX-Abfragen erstellen und ausführen. DAX-Abfragen geben Ergebnisse direkt im Tool als Tabelle zurück, sodass Sie schnell DAX-Formeln erstellen und deren Leistung testen können.
Bevor Sie sich näher mit Abfragen beschäftigen, sollten Sie über ein solides Verständnis der DAX-Grundlagen verfügen. Sofern nicht bereits geschehen, lesen Sie die DAX-Übersicht.
Keywords
DAX-Abfragen verfügen über eine einfache Syntax, die nur aus dem erforderlichen Schlüsselwort EVALUATE und mehreren optionalen Schlüsselwörtern besteht: ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE und COLUMN. Jedes Schlüsselwort definiert eine Anweisung, die für die Dauer der Abfrage verwendet wird.
EVALUATE (erforderlich)
Auf der grundlegendsten Ebene ist eine DAX-Abfrage eine EVALUATE-Anweisung mit einem Tabellenausdruck. Mindestens eine EVALUATE-Anweisung ist erforderlich. Allerdings kann eine Abfrage eine beliebige Anzahl von EVALUATE-Anweisungen enthalten.
EVALUATE – Syntax
EVALUATE <table>
EVALUATE – Parameter
Begriff | Definition |
---|---|
Tabelle | Ein Tabellenausdruck. |
EVALUATE – Beispiel
EVALUATE
'Internet Sales'
Gibt alle Zeilen und Spalten aus der Internet Sales-Tabelle als Tabelle zurück.
ORDER BY (optional)
Das optionale Schlüsselwort ORDER BY definiert mindestens einen Ausdruck zum Sortieren von Abfrageergebnissen. Ein Ausdruck, der für jede Zeile des Ergebnisses ausgewertet werden kann.
ORDER BY – Syntax
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]
ORDER BY – Parameter
Begriff | Definition |
---|---|
expression | Ein DAX-Ausdruck, der einen einzelnen Skalarwert zurückgibt. |
ASC | (Standard) Aufsteigende Sortierreihenfolge. |
DESC | Absteigende Sortierreihenfolge. |
ORDER BY – Beispiel
EVALUATE
'Internet Sales'
ORDER BY
'Internet Sales'[Order Date]
Gibt alle Zeilen und Spalten aus der Internet Sales-Tabelle als Tabelle zurück, die in aufsteigender Reihenfolge nach „Order Date“ sortiert ist.
START AT (optional)
Das optionale Schlüsselwort START AT wird innerhalb einer ORDER BY-Klausel verwendet. Es definiert den Wert, bei dem die Abfrageergebnisse anfangen.
START AT – Syntax
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]
START AT – Parameter
Begriff | Definition |
---|---|
Wert | Ein konstanter Wert. Es kann sich nicht um einen Ausdruck handeln. |
parameter | Der Name eines Parameters in einer XMLA-Anweisung, dem ein @ -Zeichen vorangestellt ist. |
START AT – Hinweise
START AT-Argumente weisen eine Eins-zu-Eins-Entsprechung mit den Spalten in der ORDER BY-Klausel auf. Es kann so viele Argumente in der START AT-Klausel geben wie in der ORDER BY-Klausel, aber nicht mehr. Das erste Argument in der START AT-Klausel definiert den Startwert in Spalte 1 der ORDER BY-Spalten. Das zweite Argument in der START AT-Klausel definiert den Startwert in Spalte 2 der ORDER BY-Spalten innerhalb der Zeilen, die dem ersten Wert für Spalte 1 entsprechen.
START AT – Beispiel
EVALUATE
'Internet Sales'
ORDER BY
'Internet Sales'[Sales Order Number]
START AT "SO7000"
Gibt alle Zeilen und Spalten aus der Internet Sales-Tabelle beginnend bei SO7000 in aufsteigender Reihenfolge nach „Sales Order Number“ sortiert zurück.
DEFINE (optional)
Das optionale Schlüsselwort DEFINE führt eine oder mehrere berechnete Entitätsdefinitionen ein, die nur für die Dauer der Abfrage vorhanden sind. Definitionen stehen in der Regel vor der EVALUATE-Anweisung und gelten für alle EVALUATE-Anweisungen in der Abfrage. Definitionen können Variablen, Measures, Tabellen1 und Spalten1 sein. Definitionen können auf andere Definitionen verweisen, die vor oder nach der aktuellen Definition angezeigt werden. Mindestens eine Definition ist erforderlich, wenn das DEFINE-Schlüsselwort in einer Abfrage enthalten ist.
DEFINE – Syntax
[DEFINE
(
(MEASURE <table name>[<measure name>] = <scalar expression>) |
(VAR <var name> = <table or scalar expression>) |
(TABLE <table name> = <table expression>) |
(COLUMN <table name>[<column name>] = <scalar expression>) |
) +
]
(EVALUATE <table expression>) +
DEFINE – Parameter
Begriff | Definition |
---|---|
Entität | MEASURE, VAR, TABLE1 oder COLUMN1. |
name | Der Name einer Measure-, Var-, Tabellen- oder Spaltendefinition. Es darf kein Ausdruck sein. Der Name muss nicht eindeutig sein. Der Name existiert nur für die Dauer der Abfrage. |
expression | Ein DAX-Ausdruck, der eine Tabelle oder einen Skalarwert zurückgibt. Der Ausdruck kann eine beliebige der definierten Entitäten verwenden. Wenn ein Skalarausdruck in einen Tabellenausdruck konvertiert werden muss, geben Sie den Ausdruck in geschweiften Klammern {} in einem Tabellenkonstruktor an oder verwenden Sie die ROW() -Funktion, um eine Tabelle mit einer einzelnen Zeile zurückzugeben. |
[1]Vorsicht: Abfragebezogene TABLE- und COLUMN-Definitionen sind nur für die interne Verwendung vorgesehen. Obwohl Sie TABLE- und COLUMN-Ausdrücke für eine Abfrage definieren können, ohne Syntaxfehler zu erhalten, können diese Ausdrücke Laufzeitfehler erzeugen und werden nicht empfohlen werden.
DEFINE – Hinweise
Eine DAX-Abfrage kann mehrere EVALUATE-Anweisungen, jedoch nur eine DEFINE-Anweisung enthalten. Definitionen in der DEFINE-Anweisung können auf beliebige EVALUATE-Anweisungen in der Abfrage angewendet werden.
Mindestens eine Definition ist in einer DEFINE-Anweisung erforderlich.
Measuredefinitionen für ein Abfrage überschreiben gleichnamige Modellmeasures, werden jedoch nur innerhalb der Abfrage verwendet. Sie wirken sich nicht auf das Modellmeasure aus.
VAR-Namen verfügen über eindeutige Einschränkungen. Weitere Informationen finden Sie unter VAR – Parameter.
DEFINE – Beispiel
DEFINE
MEASURE 'Internet Sales'[Internet Total Sales] =
SUM ( 'Internet Sales'[Sales Amount] )
EVALUATE
SUMMARIZECOLUMNS (
'Date'[Calendar Year],
TREATAS (
{
2013,
2014
},
'Date'[Calendar Year]
),
"Total Sales", [Internet Total Sales],
"Combined Years Total Sales",
CALCULATE (
[Internet Total Sales],
ALLSELECTED ( 'Date'[Calendar Year] )
)
)
ORDER BY [Calendar Year]
Gibt den berechneten Gesamtumsatz für die Jahre 2013 und 2014 und den kombinierten berechneten Gesamtumsatz für die Jahre 2013 und 2014 als Tabelle zurück. Das Measure in der DEFINE-Anweisung, Internet Total Sales, wird sowohl in den Ausdrücken „Total Sales“ als auch „Combined Years Total Sales“ verwendet.
Parameter in DAX-Abfragen
Eine klar definierte DAX-Abfrageanweisung kann parametrisiert und dann immer wieder verwendet werden, wobei lediglich die Parameterwerte geändert werden.
Die Execute (XMLA)-Methode verfügt über eine Parameters Element (XMLA)-Sammlung, die es ermöglicht, Parameter zu definieren und einem Wert zuzuweisen. Innerhalb der Sammlung definiert jedes Parameter Element (XMLA)-Element den Namen des Parameters und einen zugehörigen Wert.
Verweisen Sie auf XMLA-Parameter, indem Sie dem Namen des Parameters ein @
-Zeichen voranstellen. An jeder Stelle in der Syntax, wo ein Wert zulässig ist, kann der Wert durch einen Parameteraufruf ersetzt werden. Alle XMLA-Parameter werden als Text eingegeben.
Wichtig
Parameter, die im Abschnitt für Parameter definiert und im Element <STATEMENT> nicht verwendet werden, führen zu einer Fehlerantwort in XMLA. Parameter, die im Element <Parameter> verwendet und nicht definiert werden, führen zu einer Fehlerantwort in XMLA.