Opérateurs DAX
Le langage DAX (Data Analysis Expression) a recours à des opérateurs pour créer des expressions qui comparent des valeurs, effectuent des calculs arithmétiques ou utilisent des chaînes.
Types d’opérateurs
Il existe quatre types d’opérateurs de calcul : les opérateurs arithmétiques, les opérateurs de comparaison, les opérateurs de concaténation de texte et les opérateurs logiques.
Opérateurs arithmétiques
Pour effectuer des opérations mathématiques de base comme des additions, des soustractions ou des multiplications, combiner des nombres et produire des résultats numériques, utilisez les opérateurs arithmétiques suivants.
Opérateur arithmétique | Signification | Exemple |
---|---|---|
+ (signe plus) | Addition | 3+3 |
– (signe moins) | Soustraction ou signe | 3–1–1 |
* (astérisque) | Multiplication | 3*3 |
/ (barre oblique) | Division | 3/3 |
^ (caret) | Élévation à une puissance | 16^4 |
Notes
Le signe plus peut fonctionner à la fois comme opérateur binaire et comme opérateur unaire. Un opérateur binaire nécessite des nombres de chaque côté de l’opérateur et effectue une addition. Si vous utilisez des valeurs non numériques dans une formule DAX des deux côtés de l’opérateur binaire, DAX tente de les caster en types de données numériques. En revanche, l’opérateur unaire peut être appliqué à n’importe quel type d’argument. Le symbole plus n’affecte ni le type ni la valeur et est simplement ignoré ; par contre, l’opérateur moins crée une valeur négative s’il est appliqué à une valeur numérique.
Opérateurs de comparaison
Utilisez les opérateurs suivants pour comparer deux valeurs. Quand deux valeurs sont comparées à l’aide de ces opérateurs, le résultat est une valeur logique, TRUE ou FALSE.
Opérateur de comparaison | Signification | Exemple |
---|---|---|
= | Égal à | [Region] = "USA" |
== | Strictement égal à | [Region] == "USA" |
> | Supérieur à | [Sales Date] > "Jan 2009" |
< | Inférieur à | [Sales Date] < "Jan 1 2009" |
>= | Supérieur ou égal à | [Amount] >= 20000 |
<= | Inférieur ou égal à | [Amount] <= 100 |
<> | Différent de | [Region] <> "USA" |
Tous les opérateurs de comparaison sauf == considèrent les valeurs vides comme étant égales au nombre 0, à une chaîne vide (""), à DATE(1899, 12, 30) ou à FALSE. [Column] = 0 est donc TRUE quand la valeur de [Column] est 0 ou vide. En revanche, [Column] == 0 est TRUE uniquement quand la valeur de [Column] est 0.
Opérateur de concaténation de texte
Utilisez une esperluette (&) pour joindre ou concaténer deux chaînes de texte (ou plus) afin de produire un seul bloc de texte.
Opérateur de texte | Signification | Exemple |
---|---|---|
& (esperluette) | Connecte ou concatène deux valeurs pour produire une valeur de texte continue. | [Region] & ", " & [City] |
Opérateurs logiques
Utilisez les opérateurs logiques (&&) et (||) pour combiner des expressions afin de produire un résultat unique.
Opérateur de texte | Signification | Exemples |
---|---|---|
&& (double esperluette) | Crée une condition AND entre deux expressions ayant chacune un résultat booléen. Si les deux expressions retournent TRUE, la combinaison des expressions retourne également TRUE ; sinon, elle retourne FALSE. | ([Region] = "France") && ([BikeBuyer] = "yes")) |
|| (symbole de barre verticale double) | Crée une condition OR entre deux expressions logiques. Si l’une des expressions retourne TRUE, le résultat est TRUE. Le résultat est FALSE uniquement quand les deux expressions sont FALSE. | (([Region] = "France") || ([BikeBuyer] = "yes")) |
IN | Crée une condition OR logique entre chaque ligne comparée à une table. Remarque : La syntaxe du constructeur de table utilise des accolades. | 'Product'[Color] IN { "Red", "Blue", "Black" } |
Opérateurs et ordre de précédence
Dans certains cas, l’ordre dans lequel le calcul est effectué peut affecter la valeur de retour. Il est donc important de comprendre comment l’ordre est déterminé et comment vous pouvez le changer pour obtenir les résultats souhaités.
Ordre de calcul
Une expression évalue les opérateurs et les valeurs dans un ordre spécifique. Toutes les expressions commencent toujours par un signe égal (=). Le signe égal indique que les caractères qui s’ensuivent constituent une expression.
Après le signe égal se trouvent les éléments à calculer (opérandes), lesquels sont séparés par des opérateurs de calcul. Les expressions sont toujours lues de gauche à droite, mais vous pouvez contrôler dans une certaine mesure l’ordre dans lequel les éléments sont regroupés à l’aide de parenthèses.
Précédence des opérateurs
Si vous combinez plusieurs opérateurs dans une même formule, les opérations sont classées selon le tableau suivant. Si des opérateurs ont une valeur de précédence égale, ils sont classés de gauche à droite. Par exemple, si une expression contient un opérateur de multiplication et un opérateur de division, ils sont évalués dans l’ordre dans lequel ils apparaissent dans l’expression, de gauche à droite.
Opérateur | Description |
---|---|
^ | Élévation à une puissance |
– | Signe (comme dans –1) |
* et / | Multiplication et division |
+ et – | Addition et soustraction |
& | Connecte deux chaînes de texte (concaténation) |
=,==,<,>,<=,>=,<>,IN | Comparaison |
NOT | NOT (opérateur unaire) |
Utilisation de parenthèses pour contrôler l’ordre de calcul
Pour changer l’ordre d’évaluation, vous devez placer entre parenthèses la partie de la formule à calculer en premier. Par exemple, la formule suivante produit 11 parce que la multiplication est calculée avant l’addition. La formule multiplie 2 par 3, puis ajoute 5 au résultat.
=5+2*3
En revanche, si vous utilisez des parenthèses pour changer la syntaxe, l’ordre est modifié. Désormais, 5 et 2 sont additionnés, puis le résultat est multiplié par 3 pour produire 21.
=(5+2)*3
Dans l’exemple suivant, les parenthèses placées autour de la première partie de la formule forcent le calcul à évaluer l’expression (3 + 0.25)
en premier et à diviser le résultat par le résultat de l’expression (3 - 0.25)
.
=(3 + 0.25)/(3 - 0.25)
Dans l’exemple suivant, l’opérateur d’élévation à une puissance est appliqué en premier, conformément aux règles de précédence des opérateurs, puis l’opérateur de signe est appliqué. Le résultat de cette expression est -4.
=-2^2
Pour faire en sorte que l’opérateur de signe soit appliqué en premier à la valeur numérique, vous pouvez utiliser des parenthèses pour contrôler les opérateurs, comme dans l’exemple suivant. Le résultat de cette expression est 4.
= (-2)^2
Compatibilité
À l’instar de Microsoft Excel, DAX permet de gérer et de comparer facilement différents types de données. Toutefois, le moteur de calcul sous-jacent étant basé sur SQL Server Analysis Services, il propose en plus les fonctionnalités avancées d’un magasin de données relationnelles, notamment une prise en charge plus riche des types de date et d’heure. Dans certains cas, les résultats des calculs ou le comportement des fonctions peuvent différer de ceux d’Excel. En outre, DAX prend en charge plus de types de données qu’Excel. Cette section décrit les principales différences.
Forçage des types de données des opérandes
En général, les deux opérandes de chaque côté d’un opérateur doivent être du même type de données. Toutefois, dans certains cas, si les types de données sont différents, DAX les convertit en un type de données commun pour appliquer l’opérateur :
- Les deux opérandes sont convertis pour obtenir le plus grand type de données commun possible.
- L’opérateur est appliqué, si possible.
Par exemple, supposons que vous souhaitiez combiner deux nombres. Un nombre provient d’une formule, par exemple =[Price] * .20
, et le résultat peut contenir plusieurs décimales. L’autre nombre est un entier qui est fourni sous la forme d’une valeur de chaîne.
Dans ce cas, DAX convertit les deux nombres en nombres réels dans un format numérique, en utilisant le plus grand format numérique pouvant stocker les deux types de nombres. DAX applique ensuite la multiplication.
Selon la combinaison de types de données, le forçage de type peut ne pas être appliqué aux opérations de comparaison. Pour obtenir la liste complète des types de données pris en charge par DAX, consultez Types de données pris en charge dans les modèles tabulaires et Types de données dans Power BI Desktop.
Les entiers, nombres réels, devises, valeurs de date/heure et valeurs vides sont considérés comme des valeurs numériques à des fins de comparaison. La valeur vide est égale à zéro lors d’une comparaison. Les combinaisons de types de données suivantes sont prises en charge pour les opérations de comparaison.
Type de données côté gauche | Type de données côté droit |
---|---|
Numérique | Numérique |
Booléen | Boolean |
String | Chaîne |
D’autres comparaisons de types de données mixtes retournent une erreur. Par exemple, une formule comme ="1" > 0 retourne une erreur indiquant que les opérations DAX de comparaison ne prennent pas en charge la comparaison des valeurs de type Texte avec des valeurs de type Entier.
Types de données utilisés dans DAX | Types de données utilisés dans Excel |
---|---|
Nombres (I8, R8) | Nombres (R8) |
Chaîne | Chaîne |
Booléen | Boolean |
Date/Heure | Variante |
Devise | Devise |
Différences dans l’ordre de précédence
L’ordre de précédence des opérations dans les formules DAX est fondamentalement le même que dans Microsoft Excel, mais certains opérateurs Excel tels que le pourcentage ne sont pas pris en charge. Par ailleurs, les plages ne sont pas prises en charge.
Chaque fois que vous copiez et collez des formules à partir d’Excel, veillez à examiner attentivement la formule car certains opérateurs ou éléments qu’elle contient peuvent ne pas être valides. En cas de doute sur l’ordre dans lequel les opérations sont effectuées, il est recommandé d’utiliser des parenthèses pour contrôler l’ordre des opérations et lever toute ambiguïté quant au résultat.