Freigeben über


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:

  1. 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.
  2. 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.
  3. 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.

Screenshot, der zeigt, wie Sie EVALUATE für eine DAX-Abfrage in der DAX-Abfrageansicht von Power BI Desktop verwenden

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

Screenshot, der zeigt, wie Sie ORDER BY für eine DAX-Abfrage in der DAX-Abfrageansicht von Power BI Desktop verwenden

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.

Screenshot zur Verwendung von TOPN und ORDER BY für eine DAX-Abfrage in der DAX-Abfrageansicht von Power BI Desktop

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.

Screenshot zur Verwendung von ORDER BY und START AT für eine DAX-Abfrage in der DAX-Abfrageansicht von Power BI Desktop

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

Screenshot, der zeigt, wie Sie DEFINE für eine DAX-Abfrage in der DAX-Abfrageansicht von Power BI Desktop verwenden

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.

Screenshot, der zeigt, wie Sie DEFINEMEASURE für eine DAX-Abfrage in der DAX-Abfrageansicht von Power BI Desktop verwenden

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.

DAX-AnweisungenSUMMARIZECOLUMNS