Requêtes DAX

Les clients de création de rapports comme Power BI et Excel exécutent des requêtes DAX chaque fois qu’un champ est placé sur un rapport ou qu’un filtre est appliqué. En utilisant SQL Server Management Studio (SSMS), Power BI Report Builder et des outils open source comme DAX Studio, vous pouvez créer et exécuter vos propres requêtes DAX. Les requêtes DAX retournent des résultats sous forme de table directement dans l’outil, ce qui vous permet de rapidement créer des formules DAX et tester leurs performances.

Avant de découvrir les requêtes, il est important de bien comprendre les bases de DAX. Si vous ne l’avez pas encore fait, n’hésitez pas à consulter Vue d’ensemble de DAX.

Mots clés

Les requêtes DAX ont une syntaxe simple composée d’un seul mot clé obligatoire, EVALUATE, et de plusieurs mots clés facultatifs : ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE et COLUMN. Chaque mot clé définit une instruction utilisée pour la durée de la requête.

EVALUATE (obligatoire)

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

Syntaxe d’EVALUATE

DAXCopier

EVALUATE <table>  

Paramètres d’EVALUATE

Agrandir le tableau

TermeDéfinition
tableauExpression de table.

Exemple d’EVALUATE

DAXCopier

EVALUATE
    'Internet Sales'

Retourne toutes les lignes et colonnes de la table Internet Sales sous la forme d’une table.

DAX Evaluate statement

ORDER BY (facultatif)

Le mot clé facultatif ORDER BY définit une ou plusieurs expressions utilisées pour trier les résultats d’une requête. Toute expression qui peut être évaluée pour chaque ligne du résultat est valide.

Syntaxe d’ORDER BY

DAXCopier

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

Paramètres d’ORDER BY

Agrandir le tableau

TermeDéfinition
expressionToute expression DAX qui retourne une valeur scalaire unique.
ASCOrdre de tri croissant (par défaut).
DESCOrdre de tri décroissant.

Exemple d’ORDER BY

DAXCopier

EVALUATE
    'Internet Sales'
    
ORDER BY
    'Internet Sales'[Order Date]

Retourne toutes les lignes et colonnes de la table Internet Sales, dans l’ordre croissant du champ Order Date, sous forme de table.

DAX Evaluate order by statement

START AT (facultatif)

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

Syntaxe de START AT

DAXCopier

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

Paramètres de START AT

Agrandir le tableau

TermeDéfinition
valeurValeur constante. Il ne peut pas s’agir d’une expression.
parameterNom d’un paramètre dans une instruction XMLA précédé du caractère @.

Remarques concernant START AT

Les arguments de START AT ont des correspondances uniques avec les colonnes de la clause ORDER BY. La clause START AT peut inclure autant d’arguments qu’il en existe dans la clause ORDER BY, mais pas plus. Le premier argument de la clause START AT définit la valeur de départ de la colonne 1 des colonnes ORDER BY. Le deuxième argument de la clause START AT définit la valeur de départ de la colonne 2 des colonnes ORDER BY dans les lignes correspondant à la première valeur de la colonne 1.

Exemple de START AT

DAXCopier

EVALUATE
    'Internet Sales'
    
ORDER BY
    'Internet Sales'[Sales Order Number]
START AT "SO7000"

Retourne toutes les lignes et colonnes de la table Internet Sales, par ordre croissant du champ Sales Order Number, sous forme de table, en commençant par SO7000.

DAX Evaluate order by Sales order number statement

DEFINE (facultatif)

Le mot clé DEFINE facultatif introduit une ou plusieurs définitions d’entité calculées qui existent uniquement pendant la durée de la requête. Les définitions précèdent l’instruction EVALUATE et sont valides pour toutes les instructions EVALUATE de la requête. Les définitions peuvent être des variables, des mesures, des tables1 et des colonnes1. 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 obligatoire si le mot clé DEFINE est compris dans une requête.

Syntaxe de DEFINE

DAXCopier

[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>) +

Paramètres de DEFINE

Agrandir le tableau

TermeDéfinition
EntitéMEASURE, VAR, TABLE1 ou COLUMN1.
nameNom d’une définition de mesure, variable, table ou colonne. Il ne peut pas s’agir d’une expression. Le nom n’a pas besoin d’être unique. Le nom existe seulement pour la durée de la requête.
expressionToute expression DAX qui retourne une table ou une valeur scalaire. L’expression peut utiliser n’importe quelle entité définie. Si vous devez convertir une expression scalaire en expression de table, wrappez l’expression dans un constructeur de table avec des accolades {} ou utilisez la fonction ROW() pour retourner une seule table de lignes.

[1]Attention : Les définitions de TABLE et COLUMN limitées aux requêtes sont destinées à une utilisation interne uniquement. Même si vous pouvez 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.

Remarques concernant DEFINE

  • Une requête DAX peut avoir plusieurs instructions EVALUATE, mais seulement une instruction DEFINE. Les définitions de l’instruction DEFINE peuvent s’appliquer à toutes les instructions EVALUATE de la requête.
  • Au moins une définition est obligatoire dans une instruction DEFINE.
  • Les définitions de mesure d’une requête remplacent les mesures du modèle du même nom, mais sont uniquement utilisées dans la requête. Elles n’affectent pas la mesure du modèle.
  • Les noms de VAR ont des restrictions uniques. Pour en savoir plus, consultez VAR – Paramètres.

Exemple de DEFINE

DAXCopier

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]

Retourne les ventes totales calculées pour les années 2013 et 2014 ainsi que les ventes totales calculées combinées pour les années 2013 et 2014 sous la forme d’une table. La mesure Internet Total Sales dans l’instruction DEFINE est utilisée dans les expressions Total Sales et Combined Years Total Sales.

DAX Evaluate with measure defnition

Paramètres dans les requêtes DAX

Vous pouvez paramétrer une instruction de requête DAX correctement définie et la réutiliser à volonté en apportant simplement quelques modifications aux valeurs de paramètre.

La méthode Execute (XMLA) inclut un élément de collection Parameters (XMLA) qui permet de définir des paramètres et de leur affecter une valeur. Dans la collection, chaque élément Parameter (XMLA) définit le nom du paramètre et sa valeur.

Référencez les paramètres XMLA en faisant précéder leur nom du caractère @. N’importe où 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 sous forme de texte.

 Important

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

Instructions DAX
SUMMARIZECOLUMNS
TREATAS
FILTER