Vous êtes sur la page 1sur 14

Langage DAX Microsoft Power BI

DAX signifie Data Analysis Expressions. Il s’agit du langage de formule utilisé dans
Power BI (il est également utilisé par Power BI en arrière-plan). Le DAX se retrouve
également dans d’autres produits Microsoft, Power Pivot, SSAS en modèle
tabulaire SSAS (attention dans ce mode les fonctions peuvent diverger
légèrement : « les «, » sont remplacés par des « ; » par exemple ou d’autres
subtilités dans le genre)
Pour ma part lors de mon initiation j’ai dû créer différents modèles et rajouter
certaines mesures calculées.

Qu’est-ce qu’une mesure calculée ? Une mesure calculée est généralement


réalisée sur une table de fait et permet de réaliser des calculs en fonction de
différents axes

Il faut donc distinguer :

 Les dimensions qui sont des référentiels (des tables figées, comportant des
données distinctes ex : les produits)
 Les tables de fait qui sont des données qui bougent avec le temps sur
lesquelles nous allons effectuer nos opérations d’agrégation et donc
réaliser nos mesures calculées (ex : les ventes de produits)

Pour effectuer cette démarche nous avons réalisé le modèle suivant

Disposant des tables suivantes :


Langage DAX Microsoft Power BI
YearMonth
Cette table contient les années 2007, 2008, 2009

Customer

Product

Sales
Langage DAX Microsoft Power BI
Suite à ce modèle nous avons voulu réaliser quelques fonctions intéressantes dont
voici le détail

1. SUM
La fonction SUM additionne les nombres d’une colonne et retourne un nombre
décimal.

Syntaxe
SUM ( < colonne> )

Exemple
Nous créons une mesure qui affiche le nombre de produits vendus

SUM_Quantity := SUM( Sales[Quantity] )

EXPLICATION
Regardons en détail la 2ème ligne du tableau de résultat « 2007 – United
Kingdom ».
Les données sources filtrées sur UK 2007 sont

–> SUM_Quantity UK 2007


= total des produits vendus aux clients UK en 2007.
= 4 + 1 +1 + 3 + 2 = 11
Langage DAX Microsoft Power BI

2. SUMX
SUMX est un itérateur. Pour chaque ligne de données concernée, la fonction
SUMX évalue l’ expression définie, ensuite elle retourne la somme de ces
résultats.
Syntaxe
SUMX ( <table> , <expression> )

Exemple
Pour chaque ligne de vente, le montant de vente = la quantité du produit vendu *
le prix du produit.

Nous souhaitons afficher le montant des ventes de chaque année. Pour cela, nous
créons une mesure Montant en utilisant la fonction SUMX

Montant = SUMX( Sales; Sales[Quantity] * Sales[Unit Price] )

EXPLICATION
Pour l’année 2009, les données sources sont

–> Montant 2009 = 1*28 + 4*28 + 6*34 + 1*36 = 380


/ !\ La fonction SUM ne peut pas être utilisée dans ce cas, cette fonction n’accepte
comme paramètre qu’une colonne.
Langage DAX Microsoft Power BI

3. FILTER
La fonction FILTER retourne un sous-ensemble d’une table qui satisfait les
conditions définies

Syntaxe
FILTER ( <table>,<filtre(s)> )

Exemple
Nous souhaitons créer une mesure qui affiche le nombre de produits
vendus qu’aux clients français
SUM_QuantityFR =

SUMX(

FILTER( Sales; RELATED(Customer[Country]) = "France");


Sales[Quantity]
)

EXPLICATION
Pour l’année 2009,
 La ligne « France » : la mesure SUM_QuantityFR affiche la quantité totale
des produits vendus aux clients français
 La ligne « United Kingdom » : la mesure SUM_QuantityFR n’affiche rien car
il n’y a pas de ventes aux clients qui sont en même temps français et anglais

4. CALCULATE
La fonction CALCULATE modifie le contexte de filtre et évalue l’expression définie
dans le nouveau contexte.

CALCULATE et CALCULATETABLE sont les 2 seules fonctions qui peuvent modifier


le contexte de filtre.

Syntaxe
Langage DAX Microsoft Power BI
CALCULATE ( <expression>, <filtre 1>, <filtre 2>…)

Exemple
Nous souhaitons afficher pour chaque année et chaque pays le nombre de
produits vendus aux clients français.
CALCULATE_QuantityFR =

CALCULATE (

SUM(Sales[Quantity]);

FILTER( ALL(Customer); Customer[Country] = "France")

(La fonction ALL sera expliquée dans le point suivant)

EXPLICATION
Prenons par exemple la 3ème ligne du tableau de résultat ci-dessus
 CALCULATE reçoit comme contexte de filtre l’année 2009 et le pays United
Kingdom
 Ensuite CALCULATE évalue le filtre FILTER( ALL(Customer);
Customer[Country] = « France »
 Le filtre est évalué sur l’ensemble de la table Customer (grâce à la fonction
ALL). Ce filtre retourne tous les clients français
 CALCULATE évalue l’expression SUM(Sales[Quantity]) dans le nouveau
contexte de filtre, cad l’année 2009 et le pays France
 CALCULATE restaure le contexte de filtre initial (2009 – United Kingdom) et
affiche le résultat du calcul
Les données source pour l’année 2009 sont
Langage DAX Microsoft Power BI

–> CALCULATE_QuantityFR pour UK 2009 = 4 + 1 = 5

5. ALL
La fonction ALL retourne toutes les lignes d’une table ou toutes les valeurs d’une
colonne, en supprimant tous les filtres.

Syntaxe
ALL ( { <table>|<colonne>[, <colonne>[, …]] } )

Exemple
Nous souhaitons afficher le nombre total des produits vendus chaque année en
ignorant les filtres sur Produit

ALL_Quantity = CALCULATE ( SUM(Sales[Quantity]); ALL('Product') )

La colonne ALL_Quantity affiche pour chaque produit vendu de chaque année le


nombre total des produits vendus de l’année.

EXPLICATION
Les données sources de l’année 2009 sont
Langage DAX Microsoft Power BI

–> Pour chaque produit vendu en 2009, ALL_Quantity = 1 + 4 + 6 + 1 = 12

6. ALLEXCEPT
La fonction ALLEXCEPT retourne une table en gardant que les filtres sur les
colonnes spécifiées de la table spécifiée dans l’expression, les autres filtres de la
même table sont supprimés.

Syntaxe
ALLEXCEPT ( <table>, <colonne>[, <colonne>[, …]] )

Exemple
Créons la mesure suivante pour calculer le montant de vente de tous les pays
confondus.

ALLEXCEPTCountry_Montant =

CALCULATE ( [Montant]; ALLEXCEPT(Customer; Customer[Country]) )

Nous affichons d’abord cette nouvelle mesure par année et par pays.

EXPLICATION
Les filtres pris en compte par la mesure ALLEXCEPTCountry_Montant sont
 Le filtre sur Country de la table Customer
 Tous les filtres sur toutes les colonnes des autres tables
Langage DAX Microsoft Power BI

Les filtres sur les 2 colonnes affichées (année et pays) sont donc pris en compte
dans le calcul de ALLEXCEPTCountry_Montant. Cela explique pourquoi les 2
mesures Montant et ALLEXCEPTCountry_Montant affichent les mêmes valeurs qui
sont les montants des ventes par année et par pays
Ajoutons maintenant dans le tableau la colonne Gender.

EXPLICATION
La colonne Gender fait partie de la table Customer, les filtres appliqués sur cette
colonne ne sont donc pas pris en compte par la mesure
ALLEXCEPTCountry_Montant
ALLEXCEPTCountry_Montant affiche les montants totaux des ventes par année et
par pays, pour tous les genres confondus. Les lignes ayant la même année et le
même pays ont la même valeur de ALLEXCEPTCountry_Montant
ALLEXCEPTCountry_Montant des lignes France 2009 = 28*4 + 36 = 148
Pour rappel, les données de ventes filtrées sur France – 2009 sont

7. ALLSELECTED
La fonction ALLSELECTED retourne toutes les lignes d’une table ou toutes les
valeurs d’une colonne en conservant que les filtres définis à l’extérieur de la
requête

Syntaxe
ALLSELECTED ( <table> | <colonne> )
Langage DAX Microsoft Power BI

Exemple
Pour chaque année, nous souhaitons afficher la quantité totale des
produits vendus et affichés dans le rapport.
ALLSELECTED_Quantity =

CALCULATE (

SUM(Sales[Quantity]);

ALLSELECTED('Product'[Product Name])

Nous affichons les mesures SUM_Quantity, ALL_QuantityByYear et


ALLSELECTED_Quantity en filtrant sur 2 produits « SV 16xDVD M360 Black » et
« WWI 1GB Pulse Smart pen E50 Silver »

EXPLICATION
Pour rappel :
 SUM_Quantity : le nombre de produits vendus
 ALL_Quantity : le nombre total de tous les produits vendus
 ALLSELECTED_Quantity : le nombre total des produits vendus
et affichés dans le rapport.
Nous constatons que ALL_Quantity affiche le nombre total de tous les produits
vendus de l’année concernée, même ceux qui ne sont pas affichés dans le tableau.
Alors que ALLSELECTED_Quantity ne prend en compte que les produits affichés.
Pour l’année 2007, ALLSELECTED_Quantity
= le nombre de « SV 16xDVD M360 Black » vendus en 2007 + le nombre de « WWI
1GB Pulse Smart pen E50 Silver » vendus en 2007
= 7 + 5 = 12
Langage DAX Microsoft Power BI

8. ISFILTERED
La fonction ISFILTERED retourne TRUE lorsque la colonne spécifiée est
directement filtrée.

Syntaxe
ISFILTERED ( <colonne> )

Exemple
Nous créons la mesure suivante permettant de vérifier s’il y a un filtre sur la
colonne Country de la table Customer

ISFILTERED_Country = ISFIlTERED(Customer[Country])

Nous affichons cette nouvelle mesure avec la colonne Gender, la valeur est
toujours FALSE parce qu’il n’y a pas de filtre sur la colonne Country

Maintenant nous allons appliquer un filtre sur Country à la valeur de


ISFILTERED_COUNTRY passe à « TRUE »
Langage DAX Microsoft Power BI

9. COUNTROWS
La fonction COUNTROWS retourne le nombre de lignes de la table spécifiée dans
l’expression

Syntaxe
COUNTROWS ( <table> )

Exemple
Pour compter le nombre de lignes de la table Sales

COUNTROWS_Sales = COUNTROWS(Sales)

Le nombre de lignes de la table Sales par pays

10. VALUES
La fonction VALUES retourne les valeurs distinctes de la colonne spécifiée dans
l’expression
Langage DAX Microsoft Power BI

Syntaxe
VALUES ( <colonne> )

Exemple
Nous souhaitons savoir le nombre de différents produits vendus. Pour cela, nous
utilisons la fonction VALUES pour obtenir une liste distincte des produits vendus,
ensuite nous utilisons la fonction COUNTROWS pour compter le nombre de lignes
dans cette liste.

NbDistProduitsVendus = COUNTROWS( VALUES(Sales[ProductKey]) )

EXPLICATION
Nous pouvons constater dans la source qu’il y a 3 produits différents qui ont été
vendus en 2007 : « SV 16xDVD M360 Black », « WWI 1GB Pulse Smart pen E50
White » et « WWI 1GB Pulse Smart pen E50 Silver »
Langage DAX Microsoft Power BI

Conclusion
Une bonne maitrise des fonctions DAX est une des premières étapes importantes
de l’apprentissage du DAX. Cela nous permet de bien comprendre et de prévoir le
comportement des mesures calculées dont le résultat est déterminé par les axes
d’analyse et les filtres choisis par les utilisateurs.

Ci-dessous quelques sites qui permettent d’avoir plus de détails sur les fonctions
DAX

 MSDN: https://msdn.microsoft.com/en-us/library/ee634396.aspx
 SqlBi : https://www.sqlbi.com/

Vous aimerez peut-être aussi