DAX-Abfragen
Berichtstools wie Power BI und Excel führen DAX-Abfragen aus, wann immer visuelle Elemente in einem Bericht dargestellt werden oder ein Feld zu einer Tabelle hinzugefügt wird, und diese DAX-Abfragen werden angepasst, wenn ein Filter angewendet wird. Die Leistungsanalyse in Power BI Desktop kann Ihnen diese DAX-Abfragen anzeigen und sie sogar in der DAX-Abfrageansicht ausführen.
Mithilfe der DAX-Abfrageansicht in Power BI Desktop oder mithilfe von Schreiben von DAX-Abfragen im Power BI-Dienst können Sie eigene DAX-Abfragen erstellen und ausführen. Mit Microsoft Fabric können Sie Ihre Produktivität mit Copilot zum Schreiben von DAX-Abfragen in der DAX-Abfrageansicht der Desktop- oder Webversion erhöhen. Zusätzlich zu Power BI-Tools können DAX-Abfragen in Fabric-Notebooks mithilfe eines semantischen Links ausgeführt werden, um Daten aus semantischen Modellen mit Python zu lesen. Dabei kann auch die REST-API zur Abfrageausführung verwendet werden, die ebenfalls in Power Automate verfügbar ist. Andere Tools wie SQL Server Management Studio (SSMS), Power BI Report Builder und Open-Source-Tools wie DAX Studio ermöglichen Ihnen auch das Erstellen und Ausführen von DAX-Abfragen.
DAX-Abfragen liefern die Ergebnisse direkt im Tool als Tabelle zurück, sodass Sie schnell die Leistung Ihrer DAX-Formeln in Kennzahlen erstellen und testen können oder einfach die Daten in Ihrem semantischen Modell anzeigen. INFO und INFO.VIEW DAX-Funktionen können auch Informationen zu Ihrem semantischen Modell abrufen, wie zum Beispiel eine Auflistung von Tabellen, Spalten, Kennzahlen und vielem mehr.
Bevor Sie sich über Abfragen informieren, ist es wichtig, dass Sie ein solides Verständnis der DAX-Grundlagen haben. Sofern nicht bereits geschehen, lesen Sie die DAX-Übersicht.
Schlüsselwörter
DAX-Abfragen haben eine einfache Syntax, die nur aus einem erforderlichen Schlüsselwort EVALUATEbesteht. Einem Tabellenausdruck folgt EVALUATE, wie z. B. eine DAX-Funktion oder ein Tabellenname, die bzw. der beim Ausführen eine Ergebnistabelle ausgibt. Tabellenausdrücke, die eine Ergebnistabelle ausgeben, umfassen:
- Allgemeine DAX Funktionen, die eine Tabelle ausgeben, z. B. SUMMARIZE, SUMMARIZECOLUMNS, SELECTCOLUMNS, FILTER, UNION, TOPN, ADDCOLUMNS, DATATABLEund viele andere, arbeiten mit EVALUATE zusammen, um eine Ergebnistabelle auszugeben.
- Tabellen im Modell, auf die anhand des Namens verwiesen wird, können mit EVALUATE verwendet werden, um eine Ergebnistabelle mit den Daten in der Tabelle auszugeben. Beispielsweise kann EVALUATE ‘Tabellenname’ als DAX-Abfrage ausgeführt werden.
- Maßnahmen im Modell oder in jeder DAX-Formel, die einen Skalarwert zurückgeben, arbeiten mit EVALUATE, um den Wert als Ergebnistabelle anzuzeigen, wenn er in geschweifte Klammern eingeschlossen ist. Beispielsweise kann EVALUATE {[Gesamtumsatz]} oder EVALUATE {COUNTROWS('Sales')} als DAX-Abfrage ausgeführt werden. Diese werden Tabellenkonstruktoren genannt.
Es gibt mehrere optionale Schlüsselwörter, die für DAX Abfragen spezifisch sind: ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE und COLUMN.
EVALUATE (Erforderlich)
Auf der einfachsten Ebene ist eine DAX Abfrage eine EVALUATE
Anweisung, die einen Tabellenausdruck enthält. Mindestens eine EVALUATE Anweisung ist erforderlich, eine Abfrage kann jedoch eine beliebige Anzahl von EVALUATE Anweisungen enthalten.
EVALUATE-Syntax
EVALUATE <table>
EVALUATE-Parameter
Begriff | Definition |
---|---|
table |
Ein Tabellenausdruck |
EVALUATE-Beispiel
EVALUATE
'Sales Order'
Gibt alle Zeilen und Spalten aus der Tabelle "Verkaufsauftrag" als Ergebnistabelle zurück. Dies kann mit der Verwendung von TOPN oder FILTERbegrenzt und mit ORDER BYsortiert werden.
ORDER BY (optional)
Das optionale ORDER BY
Schlüsselwort definiert eine oder mehrere Spalten in der Abfrage oder Ausdrücke, die zum Sortieren von Abfrageergebnissen verwendet werden. Jeder Ausdruck, der für jede Zeile des Ergebnisses ausgewertet werden kann, ist gültig. Jede Spalte in der Abfrage selbst ist ebenfalls gültig.
Die Sortierung nach Spalteneigenschaft in semantischen Modellen gilt nicht für DAX Abfrageergebnisse. Wenn eine Spalte nach einer anderen Spalte im Modell sortiert werden soll, z. B. im Fall des Monatsnamens, sollte die Sortierung nach Spalte auch in die DAX-Abfrage einbezogen werden, die in ORDER BY verwendet werden soll.
ORDER BY-Syntax
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]
ORDER BY-Parameter
Begriff | Definition |
---|---|
expression |
Ein beliebiger DAX Ausdruck, der einen einzelnen skalaren Wert oder eine Spalte zurückgibt, die in der DAX Abfrage enthalten ist. |
ASC |
(Standard) Aufsteigende Sortierreihenfolge. |
DESC |
Absteigende Sortierreihenfolge |
ORDER BY-Beispiel
EVALUATE
SUMMARIZECOLUMNS(
// Group by columns
'Date'[Month Name],
'Date'[Month of Year],
'Product'[Category],
// Optional filters
FILTER(
VALUES('Product'[Category]),
[Category] = "Clothing"
),
// Measures or explicit DAX formulas to aggregate and analyze the data by row
"Orders", [Orders],
"Avg Profit per Order", DIVIDE(
[Total Sales Profit],
[Orders]
)
)
// DAX queries do not use sort order defined in Power BI,
// sort by columns must be included in the DAX query to be used in order by
ORDER BY 'Date'[Month of Year] ASC
Gibt Bestellungen für Bekleidung und den durchschnittlichen Gewinn pro Bestellung nach Monat in aufsteigender Reihenfolge als Ergebnistabelle zurück
TOPN wählt nicht die angegebene Anzahl von Zeilen aus, die basierend auf der in ORDER BYangegebenen Sortierreihenfolge zurückgegeben werden sollen. Stattdessen verfügt TOPN über eine eigene Syntax, um optional eine Sortierung anzugeben, bevor die obersten 100 Zeilen zurückgegeben werden. ORDER BY sortiert nur die Ergebnistabelle, die von TOPNzurückgegeben wird.
EVALUATE
TOPN(
100,
'Sales Order',
// The way the data is sorted before the top 100 rows are selected
'Sales Order'[SalesOrderLineKey], ASC
)
// The way the data is sorted for the results
ORDER BY
'Sales Order'[Sales Order] ASC,
'Sales Order'[Sales Order Line] ASC
Gibt die obersten 100 Verkaufsaufträge zurück, die nach SalesOrderLienKey aufsteigend sortiert sind, und sortiert die Ergebnisse zuerst nach Verkaufsauftrag und dann nach Verkaufsreihenfolge.
START AT (optional)
Das optionale START AT
-Schlüsselwort wird in einer ORDER BY
-Klausel verwendet. Er definiert den Wert, mit dem die Abfrageergebnisse beginnen.
START AT-Syntax
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]
START AT-Parameter
Begriff | Definition |
---|---|
value |
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-Anmerkungen
START AT-Argumente weisen eine 1:1-Übereinstimmung 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 START AT definiert den Startwert in Spalte 1 der ORDER BY-Spalten. Das zweite Argument in START AT 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
'Sales Order'
ORDER BY 'Sales Order'[Sales Order] ASC
// Start at this order, orders before this order will not be displayed
START AT "SO43661"
Gibt alle Spalten aus der Sales Order-Tabelle (Verkaufsauftrag) in aufsteigender Reihenfolge nach Verkaufsauftrag zurück, beginnend mit SO43661. Zeilen, die dieser Verkaufsbestellung vorausgehen, sind in der Ergebnistabelle nicht enthalten.
DEFINE (optional)
Das optionale DEFINE
Schlüsselwort führt eine oder mehrere berechnete Entitätsdefinitionen ein, die nur für die Dauer der Abfrage vorhanden sind. Im Gegensatz zu EVALUATE
kann es nur einen DEFINE
Block mit einer oder mehreren Definitionen in einer DAX Abfrage geben. DEFINE
müssen der ersten EVALUATE
-Anweisung vorangehen und sind für alle EVALUATE-Anweisungen in der Abfrage gültig. Definitionen können Variablen, Messungen, Tabellen1und Spalten1sein. Definitionen können auf andere Definitionen verweisen, die vor oder nach der aktuellen Definition angezeigt werden. Mindestens eine Definition ist erforderlich, wenn das schlüsselwort DEFINE
in einer Abfrage enthalten ist.
DEFINE MEASURE
ist ein gängiges Szenario, um neue Kennzahlen zu erstellen oder vorhandene Kennzahlen in einem semantischen Modell zu bearbeiten. Wenn die Maßnahme bereits im Modell vorhanden ist, verwendet die Abfrage DAX die in der Abfrage definierte Formel der Maßnahme DAX. Dies ist hilfreich für das Testen von Measures mit einer DAX-Abfrage vor dem Aktualisieren des Modells.
DEFINE MEASURE
ist auch hilfreich, um zusätzliche Analysen mit DAX-Formeln für eine bestimmte DAX-Abfrage zu erstellen, bei der Sie möglicherweise nicht berechtigt sind, ein Modellmeasure hinzuzufügen, oder es ist nicht erforderlich, es im Modell zu haben.
DEFINE-Syntax
[DEFINE
(
(MEASURE <table name>[<measure name>] = <scalar expression>) |
(VAR <var name> = <table or scalar expression>) |
(TABLE <table name> = <virtual table definition>) |
(COLUMN <table name>[<column name>] = <scalar expression>) |
) +
]
(EVALUATE <table expression>) +
DEFINE-Parameter
Begriff | Definition |
---|---|
Entity |
MEASURE, VAR, TABLE1 oder COLUMN1 |
name |
Der Name einer Measure-, VAR-, Tabellen- oder Spaltendefinition. Es darf sich nicht um einen Ausdruck handeln. Der Name muss nicht eindeutig sein. Der Name ist nur für die Dauer der Abfrage vorhanden. |
expression |
Ein DAX-Ausdruck, der eine Tabelle oder einen Skalarwert zurückgibt. Der Ausdruck kann eine der definierten Entitäten verwenden. Wenn ein skalarer Ausdruck in einen Tabellenausdruck konvertiert werden muss, umschließen Sie den Ausdruck in einem Tabellenkonstruktor mit geschweiften Klammern {} , oder verwenden Sie die ROW() -Funktion, um eine einzelne Zeilentabelle zurückzugeben. |
[1]Achtung: Abfragebezogene TABLE- und COLUMN-Definitionen sind nur für die interne Verwendung vorgesehen. Sie können zwar TABLE- und COLUMN-Ausdrücke für eine Abfrage ohne Syntaxfehler definieren, aber sie können Laufzeitfehler erzeugen und werden nicht empfohlen.
DEFINE-Anmerkungen
Eine DAX-Abfrage kann mehrere EVALUATE-Anweisungen enthalten, aber nur eine DEFINE-Anweisung. 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 Modellmaß aus.
VAR-Namen verfügen über eindeutige Einschränkungen. Weitere Informationen finden Sie unter VAR – Parameter.
DEFINE-Beispiel
DEFINE
VAR _firstyear = MIN('Date'[Fiscal Year])
VAR _lastyear = MAX('Date'[Fiscal Year])
TABLE 'Unbought products' = FILTER('Product', [Orders] + 0 = 0)
COLUMN 'Unbought products'[Year Range] = _firstyear & " - " & _lastyear
MEASURE 'Unbought products'[Unbought products] = COUNTROWS('Unbought products')
EVALUATE
'Unbought products'
EVALUATE
{[Unbought products]}
Gibt die in der Abfrage DAX definierte Tabelle zurück, um nicht gekaufte Produkte mit einer zusätzlich definierten Spalte anzuzeigen, die auf definierte Variablen verweist. Ein Measure wird auch definiert und ausgewertet, um die Zeilen von nicht gekauften Produkten zu zählen.
DEFINE
MEASURE 'Pick a sales measure'[Orders] = DISTINCTCOUNT('Sales Order'[Sales Order])
MEASURE 'Pick a sales measure'[Customers] = CALCULATE(
COUNTROWS(Customer),
FILTER(
'Sales',
[Orders] > 0
)
)
MEASURE 'Pick a sales measure'[Orders per Customer] = DIVIDE(
[Orders],
[Customers],
0
)
EVALUATE
SUMMARIZECOLUMNS(
'Date'[Fiscal Year],
"Orders", [Orders],
"Customers", [Customers],
"Orders per Customer", [Orders per Customer]
)
Gibt eine Tabelle zurück, in der drei definierte Kennzahlen ausgewertet werden, um die Ergebnisse nach Geschäftsjahr darzustellen. Alle Measures sind auch im Modell vorhanden, und „Orders per Customer“ (Bestellungen pro Kunde) wird in der Abfrage DAX geändert.
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. Jede Stelle in der Syntax, an der 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 "Parameter" definiert sind und im <STATEMENT>
-Element nicht verwendet werden, generieren eine Fehlerantwort in XMLA.
Parameter, die im <Parameters>
-Element verwendet und nicht definiert wurden, generieren eine Fehlerantwort in XMLA.