Partager via


Requêtes DAX

Les clients de création de rapports tels que Power BI et Excel exécutent DAX des requêtes chaque fois que des visuels s’affichent dans un rapport ou un champ ajouté à un tableau, et ces DAX requêtes s’ajustent lorsqu’un filtre est appliqué. L’analyseur de performances dans Power BI Desktop peut vous montrer ces DAX requêtes et même les exécuter en DAX mode requête de Power BI Desktop.

En utilisant Affichage des requêtes DAX dans Power BI Desktop ou Écrire des requêtes DAX dans le service Power BI, vous pouvez créer et exécuter vos propres requêtes DAX. Avec Microsoft Fabric, vous pouvez augmenter votre productivité avec Copilot pour écrire DAX des requêtes dans l’affichage DAX des requêtes de l'ordinateur ou du web. Outre les outils Power BI, DAX les requêtes peuvent être exécutées dans des notebooks Fabric à l’aide d’un lien sémantique pour lire des données à partir de modèles sémantiques avec Python et avec l’API REST Exécuter des requêtes, également disponible dans Power Automate. D’autres outils tels que SQL Server Management Studio (SSMS), Power BI Report Builder et les outils open source comme DAX Studio vous permettent également de créer et d’exécuter DAX des requêtes.

DAX les requêtes retournent des résultats sous forme de table directement dans l’outil, ce qui vous permet de créer et de tester rapidement les performances de vos DAX formules dans des mesures ou simplement d’afficher les données dans votre modèle sémantique. Les fonctions INFO et INFO.VIEW DAX peuvent également fournir des informations sur votre modèle sémantique, comme un listing de tables, de colonnes, de mesures, et bien plus encore.

Avant d’en savoir plus sur les requêtes, il est important d’avoir une bonne compréhension des principes de DAX base. Si ce n’est déjà fait, veillez à consulter DAX la vue d’ensemble.

Mots clés

DAXles requêtes ont une syntaxe simple composée d’un seul mot clé requis. EVALUATE EVALUATE est suivi d’une expression de table, telle qu’une fonction ou un DAX nom de table, qui, lors de l’exécution génère une table de résultats. Les expressions de table qui génèrent une table de résultats sont les suivantes :

  1. Fonctions courantes DAX qui produisent un tableau, telles que SUMMARIZE, SELECTCOLUMNS, TOPN, SUMMARIZECOLUMNS, FILTER, UNION, ADDCOLUMNS, et DATATABLE, bien d’autres, travaillent avec EVALUATE pour produire un tableau de résultats.
  2. Les tables du modèle lorsqu’elles sont référencées par nom fonctionnent avec EVALUATE pour générer une table de résultats montrant les données de la table. Par exemple, EVALUATE « Nom de table » peut être exécuté en tant que DAX requête.
  3. Mesure dans le modèle ou toute formule DAX, qui retourne une valeur scalaire, fonctionne avec EVALUATE pour afficher la valeur sous forme de table de résultats lorsqu’elle est placée entre accolades. Par exemple, EVALUATE {[Total Sales]} ou EVALUATE {COUNTROWS('Sales')} peut être exécuté en tant que DAX requête. On les appelle constructeurs de table.

Il existe plusieurs mots clés facultatifs spécifiques aux DAX requêtes : ORDER BY, , START ATDEFINEMEASURE, , VARTABLE et COLUMN.

EVALUATE (Obligatoire)

Au niveau le plus simple, une DAX requête est une EVALUATE instruction contenant une expression de table. Au moins une EVALUATE instruction est requise, cependant, une requête peut contenir n’importe quel nombre d’instructions EVALUATE .

EVALUATE Syntaxe

EVALUATE <table>

EVALUATE Paramètres

Terme Définition
table Expression de table.

EVALUATE Exemple

EVALUATE
	'Sales Order'

Retourne toutes les lignes et colonnes de la table Sales Order, sous la forme d’une table de résultats. Cela peut être limité avec l'utilisation de TOPN et FILTER, et être trié avec ORDER BY.

Capture d’écran montrant comment utiliser EVALUATE pour une requête DAX dans l’affichage de requête DAX de Power BI Desktop.

ORDER BY (Facultatif)

Le mot clé facultatif ORDER BY définit une ou plusieurs colonnes dans la requête ou les expressions utilisées pour trier les résultats de la requête. Toute expression pouvant être évaluée pour chaque ligne du résultat est valide. Toute colonne de la requête elle-même est également valide.

Trier par propriété de colonne dans les modèles sémantiques ne s’applique pas aux résultats de la requête DAX. Si une colonne doit être triée par une autre colonne dans le modèle, par exemple dans le cas de Month Name, le tri par colonne doit également être inclus dans la DAX requête à utiliser dans le ORDER BY.

ORDER BY Syntaxe

EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]

ORDER BY Paramètres

Terme Définition
expression Toute DAX expression qui retourne une valeur scalaire unique ou colonne incluse dans la DAX requête.
ASC (par défaut) Ordre de tri croissant.
DESC Ordre de tri décroissant.

ORDER BY Exemple

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

Retourne les commandes de vêtements et le bénéfice moyen par commande par mois, dans l’ordre croissant par mois, sous la forme d’une table de résultats.

Capture d’écran montrant comment utiliser ORDER BY pour une requête DAX dans l’affichage des requêtes DAX de Power BI Desktop.

TOPN ne choisit pas le nombre spécifié de lignes à retourner en fonction de l’ordre de tri spécifié dans ORDER BY. Au lieu de cela, TOPN dispose de sa propre syntaxe qui permet de spécifier éventuellement un tri avant que les 100 premières lignes ne soient retournées. ORDER BY trie uniquement la table de résultats retournée par TOPN.

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

Retourne les 100 premières commandes commerciales triées par SalesOrderLienKey croissant, puis trie les résultats en premier par commande, puis par ligne de commande.

Capture d’écran montrant comment utiliser TOPN et ORDER BY pour une requête DAX dans Affichage des requêtes DAX de Power BI Desktop.

START AT (Facultatif)

Le mot clé facultatif START AT est utilisé à l’intérieur d’une ORDER BY clause. Elle définit la valeur à laquelle les résultats de la requête commencent.

START AT Syntaxe

EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]

START AT Paramètres

Terme Définition
value Valeur constante. Il ne peut pas s’agir d’une expression.
parameter Nom d’un paramètre dans une instruction XMLA précédée d’un caractère @.

START AT Remarques

Les arguments START AT ont des correspondances uniques avec les colonnes de la clause ORDER BY. Il peut y avoir autant d’arguments dans la START AT clause que dans la ORDER BY clause, mais pas plus. Le premier argument de START AT définit la valeur de départ dans la colonne 1 des colonnes ORDER BY. Le deuxième argument de START AT définit la valeur de départ dans la colonne 2 des colonnes ORDER BY au sein des lignes qui correspondent à la première valeur pour la colonne 1.

START AT Exemple

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"

Retourne toutes les colonnes de la table Commande vente, dans l’ordre croissant par commande vente, commençant à SO43661. Les lignes précédant ce bon de commande ne sont pas incluses dans le tableau des résultats.

Capture d’écran montrant comment utiliser ORDER BY et START AT pour une requête DAX dans l'affichage des requêtes de Power BI Desktop.

DEFINE (Facultatif)

Le mot clé facultatif DEFINE introduit une ou plusieurs définitions d’entité calculée qui existent uniquement pendant la durée de la requête. Contrairement à EVALUATE, il ne peut y avoir qu'un seul bloc DEFINE avec une ou plusieurs définitions dans une requête DAX. DEFINE doit précéder la première EVALUATE instruction et être valide pour toutes les EVALUATE instructions de la requête. Les définitions peuvent être des variables, des mesures,des tables 1 etdes colonnes 1. Les définitions peuvent référencer d’autres définitions qui apparaissent avant ou après la définition actuelle. Au moins une définition est requise si le DEFINE mot clé est inclus dans une requête.

DEFINE MEASURE est un scénario courant pour créer de nouvelles mesures ou modifier des mesures existantes dans un modèle sémantique. Lorsque la mesure existe déjà dans le modèle, la DAX requête utilise la formule de mesure DAX définie dans la requête. Cela est utile pour tester des mesures avec une DAX requête avant de mettre à jour le modèle.

DEFINE MEASURE est également utile pour générer une analyse supplémentaire avec DAX des formules pour une requête spécifique DAX où vous n’avez peut-être pas l’autorisation d’ajouter une mesure de modèle ou il n’est pas nécessaire de l’avoir dans le modèle.

DEFINE Syntaxe

[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 Paramètres

Terme Définition
Entity MEASURE, VAR, TABLE1ou COLUMN1.
name Nom d’une définition de mesure, var, table ou colonne. Il ne peut pas s’agir d’une expression. Le nom n’a pas besoin d’être unique. Le nom existe uniquement pour la durée de la requête.
expression Toute expression DAX qui retourne une valeur de table ou scalaire. L’expression peut utiliser l’une des entités définies. S’il est nécessaire de convertir une expression scalaire en expression de table, encapsulez l’expression à l’intérieur d’un constructeur de table avec accolades {}, ou utilisez la fonction ROW() pour renvoyer une seule table de lignes.

[1]Attention : définitions TABLE et COLUMN délimitées par requête sont destinées uniquement à une utilisation interne. Bien que vous puissiez définir des expressions TABLE et COLUMN pour une requête sans erreur de syntaxe, elles peuvent produire des erreurs d’exécution et ne sont pas recommandées.

DEFINE Remarques

  • Une requête DAX peut avoir plusieurs instructions EVALUATE, mais ne peut avoir qu’une seule instruction DEFINE. Les définitions de l’instruction DEFINE peuvent s’appliquer à n’importe quelle instruction EVALUATE dans la requête.

  • Au moins une définition est requise dans une instruction DEFINE.

  • Les définitions de mesure d’une requête remplacent les mesures de modèle du même nom, mais elles sont utilisées uniquement dans la requête. Ils n’affectent pas la mesure du modèle.

  • Les noms VAR ont des restrictions uniques. Pour plus d’informations, consultez VAR - Paramètres.

DEFINE Exemple

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]}

Retourne la table définie dans la requête DAX pour montrer les produits non achetés avec une colonne supplémentaire faisant référence à des variables définies. Une mesure est également définie et évaluée pour compter les lignes de produits non achetés.

Capture d’écran montrant comment utiliser DEFINE pour une requête DAX dans Affichage des requêtes DAX de Power BI Desktop.

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]
	)

Retourne un tableau évaluant trois mesures définies pour afficher les résultats par année fiscale. Toutes les mesures existent également dans le modèle, et les commandes par client sont modifiées dans la DAX requête.

Capture d’écran montrant comment utiliser DEFINEMEASURE pour une requête DAX dans l'affichage de requête de Power BI Desktop.

Paramètres dans les DAX requêtes

Une instruction de requête bien définie DAX peut être paramétrée, puis utilisée avec des modifications uniquement dans les valeurs des paramètres.

La méthode Execute Method (XMLA) a un élément de collection Parameters Element (XMLA) qui permet aux paramètres d’être définis et affectés à une valeur. Dans la collection, chaque élément Parameter Element (XMLA) définit le nom du paramètre et une valeur.

Référencez les paramètres XMLA en préfixant le nom du paramètre par un @ caractère. N’importe quel emplacement dans la syntaxe où une valeur est autorisée, la valeur peut être remplacée par un appel de paramètre. Tous les paramètres XMLA sont tapés en tant que texte.

Important

Les paramètres définis dans la section paramètres et non utilisés dans l’élément <STATEMENT> génèrent une réponse d’erreur dans XMLA. Les paramètres utilisés et non définis dans l’élément <Parameters> génèrent une réponse d’erreur dans XMLA.

DAX DéclarationsSUMMARIZECOLUMNS