Partager via


Syntaxe de DAX

Cet article décrit la syntaxe et les exigences pour le langage d'expression de formules DAX.

Conditions requises de la syntaxe

Une DAX formule commence toujours par un signe égal (=). Après le signe égal, vous pouvez fournir n’importe quelle expression qui prend la valeur d’une scalaire ou d’une expression qui peut être convertie en scalaire. Ces options en question sont les suivantes :

  • Constante scalaire ou expression qui utilise un opérateur scalaire (+,-,*,/,>=,...,&&, ...)

  • Références à des colonnes ou des tables. Le DAX langage utilise toujours des tables et des colonnes comme entrées pour les fonctions, jamais un tableau ou un ensemble arbitraire de valeurs.

  • Opérateurs, constantes et valeurs fournis dans le cadre d’une expression.

  • Résultat d’une fonction et de ses arguments requis. Certaines DAX fonctions retournent une table au lieu d’une table scalaire, et doivent être encapsulées dans une fonction qui évalue la table et retourne une scalaire ; sauf si la table est une seule colonne, une seule table de lignes, puis elle est traitée comme une valeur scalaire.

    La plupart des DAX fonctions nécessitent un ou plusieurs arguments, qui peuvent inclure des tables, des colonnes, des expressions et des valeurs. Toutefois, certaines fonctions, telles que PI, ne nécessitent pas d’arguments, mais nécessitent toujours des parenthèses pour indiquer l’argument Null. Par exemple, vous devez toujours taper PI(), pas PI. Vous pouvez également imbriquer des fonctions dans d’autres fonctions.

  • Expressions. Une expression peut contenir tout ou partie des éléments suivants : opérateurs, constantes ou références à des colonnes.

Par exemple, les formules suivantes sont toutes les formules valides.

Formule Résultat
= 3 3
= "Sales" Ventes
= 'Sales'[Amount] Si vous utilisez cette formule dans la table Ventes, vous obtiendrez la valeur de la colonne Montant dans la table Ventes pour la ligne actuelle.
= (0.03 *[Amount])

=0.03 * [Amount]
3 pour cent de la valeur dans la colonne Amount de la table actuelle.

Bien que cette formule puisse être utilisée pour calculer un pourcentage, le résultat n’est pas affiché sous la forme d’un pourcentage, sauf si vous appliquez la mise en forme dans le tableau.
= PI() Valeur de la constante pi.

Les formules peuvent se comporter différemment en fonction de la façon dont elles sont utilisées. Vous devez toujours connaître le contexte et la façon dont les données que vous utilisez dans la formule sont liées à d’autres données qui peuvent être utilisées dans le calcul.

Exigences concernant l’affectation des noms

Un modèle de données contient souvent plusieurs tables. Ensemble les tables et leurs colonnes comprennent une base de données stockée dans le moteur d’analytique en mémoire (VertiPaq). Dans cette base de données, toutes les tables doivent avoir des noms uniques. Les noms des colonnes doivent également être uniques dans chaque table. Les noms des objets ne respectent pas la casse ; par exemple, les noms SALES et Sales représentent la même table.

Chaque colonne et mesure que vous ajoutez à un modèle de données existant doit appartenir à une table spécifique. Vous spécifiez la table qui contient la colonne implicitement, lorsque vous créez une colonne calculée dans une table, ou explicitement, lorsque vous créez une mesure et spécifiez le nom de la table où la définition de mesure doit être stockée.

Lorsque vous utilisez une table ou une colonne comme entrée dans une fonction, vous devez généralement qualifier le nom de colonne. Le nom complet d’une colonne est le nom de la table, suivi du nom de la colonne entre crochets : par exemple, « U.S. Sales » [Products]. Un nom complet est toujours requis lorsque vous référencez une colonne dans les contextes suivants :

  • En tant qu’argument de la fonction, VALUES

  • En tant qu’argument des fonctions, ALL ou ALLEXCEPT

  • Dans un argument de filtre pour les fonctions, CALCULATE ou CALCULATETABLE

  • En tant qu’argument de la fonction, RELATEDTABLE

  • En tant qu’argument pour toute fonction d'intelligence temporelle.

Un nom de colonne non qualifié n’est que le nom de la colonne, placé entre crochets : par exemple, [Sales Amount]. Par exemple, lorsque vous référencez une valeur scalaire à partir de la même ligne de la table active, vous pouvez utiliser le nom de colonne non qualifié.

Si le nom d’une table contient des espaces, des mots clés réservés ou des caractères interdits, vous devez placer le nom de la table entre guillemets simples. Vous devez également placer les noms de table entre guillemets si le nom contient des caractères en dehors de la plage de caractères alphanumérique ANSI, que vos paramètres régionaux prennent en charge le jeu de caractères ou non. Par exemple, si vous ouvrez un classeur qui contient des noms de table écrits en caractères cyrilliques, tels que « Таблица », le nom de la table doit être placé entre guillemets, même s’il ne contient pas d’espaces.

Remarque

Pour faciliter l’entrée des noms complets de colonnes, utilisez la fonctionnalité de saisie semi-automatique dans l’éditeur de formule.

Tableaux

  • Les noms de tables sont requis chaque fois que la colonne provient d’une table différente de celle de la table active. Les noms de tables doivent être uniques dans la base de données.

  • Les noms de table doivent être placés entre guillemets simples s’ils contiennent des espaces, d’autres caractères spéciaux ou des caractères alphanumériques non anglais.

Dispositions

  • Les noms de mesures doivent toujours être entre crochets.

  • Les noms de mesures peuvent contenir des espaces.

  • Chaque nom de mesure doit être unique dans un modèle. Par conséquent, le nom de la table est facultatif devant un nom de mesure lors du référencement d’une mesure existante. Toutefois, lorsque vous créez une mesure, vous devez toujours spécifier une table dans laquelle la définition de mesure sera stockée.

Colonnes

Les noms de colonnes doivent être uniques dans le contexte d’une table ; cependant, plusieurs tables peuvent avoir des colonnes portant le même nom (la clarification est apportée par le nom de la table).

En général, les colonnes peuvent être référencées sans référencer la table de base à laquelle elles appartiennent, sauf s’il peut y avoir un conflit de noms pour résoudre ou avec certaines fonctions qui nécessitent que les noms de colonnes soient qualifiés entièrement.

Mots clés réservés

Si le nom que vous utilisez pour une table est le même qu’un mot clé réservé Analysis Services, une erreur est générée et vous devez renommer la table. Toutefois, vous pouvez utiliser des mots clés dans les noms d’objets si le nom de l’objet est placé entre crochets (pour les colonnes) ou entre guillemets (pour les tables).

Remarque

Les guillemets peuvent être représentés par plusieurs caractères différents, selon l’application. Si vous collez des formules à partir d’un document externe ou d’une page Web, veillez à vérifier le code ASCII du caractère utilisé pour ouvrir et fermer des guillemets, pour vous assurer qu’ils sont identiques. Sinon, il est possible DAX que les symboles ne soient pas reconnus comme des guillemets, ce qui rend la référence non valide.

Caractères spéciaux

Les caractères et types de caractères suivants ne sont pas valides dans les noms de tables, de colonnes ou de mesures :

  • Espaces de début ou de fin, à moins que les espaces ne soient encadrés par des délimiteurs de nom, des crochets ou des apostrophes simples.

  • Caractères de contrôle

  • Les caractères suivants qui ne sont pas valides dans les noms d’objets :

    .,;':/\\*|?&%$!+=()[]{}<>

Exemples de noms d’objets

Le tableau suivant présente des exemples de noms d’objets :

Types d’objets Exemples Commentaire
Nom de la table Ventes Si le nom de la table ne contient pas d’espaces ou d’autres caractères spéciaux, le nom n’a pas besoin d’être placé entre guillemets.
Nom de la table ’Canada Sales’ Si le nom contient des espaces, des onglets ou d’autres caractères spéciaux, placez le nom entre guillemets simples.
Nom complet de colonne Sales[Amount] Le nom de la table précède le nom de la colonne et le nom de la colonne est placé entre crochets.
Nom qualifié complet de la mesure Ventes[Profit] Le nom de la table précède le nom de la mesure et le nom de la mesure est placé entre crochets. Dans certains contextes, un nom complet est toujours requis.
Nom de colonne non qualifié [Amount] Le nom non qualifié est simplement le nom de la colonne, entre des crochets. Les contextes dans lesquels vous pouvez utiliser le nom non qualifié incluent des formules dans une colonne calculée dans la même table ou dans une fonction d’agrégation qui analyse sur la même table.
Colonne complète dans une table avec des espaces 'Ventes Canada'[Quantité] Le nom de la table contient des espaces. Il doit donc être entouré de guillemets simples.

Autres restrictions

La syntaxe requise pour chaque fonction et le type d’opération qu’elle peut effectuer varie considérablement en fonction de la fonction. En général, toutefois, les règles suivantes s’appliquent à toutes les formules et expressions :

  • DAX les formules et expressions ne peuvent pas modifier ou insérer des valeurs individuelles dans des tables.

  • Vous ne pouvez pas créer de lignes calculées à l'aide de DAX. Vous pouvez créer uniquement des colonnes et des mesures calculées.

  • Lorsque vous définissez des colonnes calculées, vous pouvez imbriquer des fonctions à n’importe quel niveau.

  • DAX a plusieurs fonctions qui retournent une table. En règle générale, vous utilisez les valeurs retournées par ces fonctions comme entrée à d’autres fonctions, qui nécessitent une table en tant qu’entrée.

DAX opérateurs et constantes

Le tableau suivant répertorie les opérateurs pris en charge par DAX. Pour plus d’informations sur la syntaxe des opérateurs individuels, consultez DAX opérateurs.

Type d’opérateur Symbole et utilisation
Opérateur de parenthèses () ordre de précédence et regroupement d’arguments
Opérateurs arithmétiques + (addition)

- (soustraction)

* (multiplication)

/ (division)

^ (élévation à une puissance)
Opérateurs de comparaison = (égal à)

> (supérieur à)

< (inférieur à)

>= (supérieur ou égal à)

<= (inférieur ou égal à)

<> (différent de)
Opérateur de concaténation de texte & (concaténation)
Opérateurs logiques && (et)

|| (ou)

Types de données

Vous n’avez pas besoin de caster, de convertir ou de spécifier le type de données d’une colonne ou d’une valeur que vous utilisez dans une DAX formule. Lorsque vous utilisez des données dans une DAX formule, DAX identifie automatiquement les types de données dans les colonnes référencées et les valeurs que vous tapez et effectue des conversions implicites si nécessaire pour terminer l’opération spécifiée.

Par exemple, si vous essayez d’ajouter un nombre à une valeur de date, le moteur interprète l’opération dans le contexte de la fonction et convertit les nombres en type de données commun, puis présente le résultat au format prévu, une date.

Toutefois, il existe certaines limitations sur les valeurs qui peuvent être converties avec succès. Si une valeur ou une colonne a un type de données incompatible avec l’opération actuelle, DAX retourne une erreur. En outre, DAX ne fournit pas de fonctions qui vous permettent de modifier, convertir ou transformer explicitement le type de données des informations que vous avez importées dans un modèle de données.

Important

DAX ne prend pas en charge l’utilisation du type de données variant. Par conséquent, lorsque vous chargez ou importez des données dans un modèle de données, il est attendu que les données de chaque colonne soient généralement d’un type de données cohérent.

Certaines fonctions retournent des valeurs scalaires, y compris des chaînes, tandis que d’autres fonctions fonctionnent avec des nombres, des nombres entiers et des nombres réels, ou des dates et des heures. Le type de données requis pour chaque fonction est décrit dans la section, DAX fonctions.

Vous pouvez utiliser des tables contenant plusieurs colonnes et plusieurs lignes de données comme argument d’une fonction. Certaines fonctions retournent également des tables stockées en mémoire et peuvent être utilisées comme arguments pour d’autres fonctions.

Date et heure

DAX stocke les valeurs de date et d’heure à l’aide du type de données datetime utilisé par Microsoft SQL Server. Le format Datetime utilise un nombre à virgule flottante où les valeurs Date correspondent à la partie entière représentant le nombre de jours depuis le 30 décembre 1899. Les valeurs d’heure correspondent à la partie décimale d’une valeur de date où heures, minutes et secondes sont représentées par des fractions décimales d’un jour. DAX Les fonctions date et heure convertissent implicitement les arguments en type de données datetime.

Remarque

La valeur DateTime maximale exacte prise en charge par DAX est le 31 décembre 9999 00:00:00.

Littéral de date et d’heure

À compter de la version d’août 2021 de Power BI Desktop, DAX les valeurs date et datetime peuvent être spécifiées en tant que littéral au format dt"YYYY-MM-DD", dt"YYYY-MM-DDThh:mm:ss"ou dt"YYYY-MM-DD hh:mm:ss". Lorsque spécifiées comme un littéral, l'utilisation des fonctions DATE, TIME, DATEVALUE, TIMEVALUE dans l'expression ne sont pas nécessaires.

Par exemple, l’expression suivante utilise les fonctions DATE et TIME pour filtrer l’OrderDate :

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)

La même expression de filtre peut être spécifiée en tant que littéral :

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)

Remarque

Le format littéral de type Date et DateHeure DAX n’est pas pris en charge dans toutes les versions de Power BI Desktop, d’Analysis Services et de Power Pivot dans Excel. Les fonctionnalités nouvelles et mises à jour DAX sont généralement introduites dans Power BI Desktop, puis incluses ultérieurement dans Analysis Services et Power Pivot dans Excel.