Découvrez l’utilité de DAX
Vous commencez votre stage en tant que Data Analyst chez Ethikwear, une scale-up innovante française qui propose des vêtements éthiques en ligne et dans ses boutiques. Nouvellement intégré(e) dans le service des ressources humaines, vous découvrez des équipes débordées par les opérations de recrutements pour atteindre leurs cibles de croissance et de développement, notamment aux Etats-Unis où Ethikwear vient de s’implanter.
Fatima, votre responsable de stage est la manager des Data RH et des Systèmes d’Information RH. Elle vous confie une tâche de taille : Analyser les tendances du marché de l’emploi aux Etats-Unis pour orienter les décisions stratégiques en matière de recrutement.
Objet : Nouvelle mission avec Power BI
Hello,
J'espère que tu vas bien et que ton intégration chez Ethikwear se passe bien.
J’ai une mission clé à te confier. J’aimerais que tu utilises Microsoft Power BI, l’outil de business intelligence promu par notre direction informatique, pour analyser des données du marché de l'emploi aux Etats-Unis et améliorer notre stratégie de recrutement.
Grâce à notre contrat avec LinkedIn j’ai récupéré tout un tas de données pour toi. Elles sont dans un rapport Power BI à ce lien.
PS : J’ai en tête d’utiliser Power BI plus tard pour nous aider à construire des tableaux de bord qui seraient utiles à tout le monde pour suivre les recrutements. Mais chaque chose en son temps.
Si tu as des questions, n'hésite pas à me contacter.
Merci et bon courage !
Fatima
Responsable HRIS
Ethikwear
Vous lui répondez en lui demandant du temps pour vous familiariser Power BI.
À vous de jouer maintenant 🙂
Vous découvrez que votre responsable vous a partagé pour 500 Mo de données. Rien que ça ! Heureusement pour vous, vos recherches vous mettent sur la trace d’un langage d’analyse de données intégré à Power BI qui semble pouvoir répondre à votre besoin efficacement : DAX.
C’est quoi DAX ?
Le langage DAX, ou Data Analysis Expressions, est un langage de formules de manipulation des données. Imaginez-le comme une boîte à outils bien garnie, comprenant une multitude de fonctions, d'opérateurs et de constantes. DAX vous permet de réaliser des requêtes et des calculs complexes, en manipulant vos données structurées en colonnes ou tables interconnectées au sein d'un modèle de données. Ce modèle de données vous le créez dans Power BI ou dans Power Pivot pour Excel.
DAX est aujourd’hui utilisé dans tous les outils Microsoft de requête et d’analyse de données comme l’add-on Power Pivot pour Excel, Power BI Desktop et SQL Server Analysis Services (SSAS).
En plus de ses capacités analytiques avancées, DAX offre également des mécanismes de sécurité robustes, tels que des filtres pour protéger vos données sensibles si vous ne voulez pas les rendre visibles à vos utilisateurs.
Comment puis-je écrire une formule DAX ?
Pour créer une formule sur DAX vous devez suivre les étapes suivantes (qui ne surprendront pas les utilisateurs d’Excel) :
1/ Positionnez-vous sur l’affichage du rapport, puis dans l’onglet Modélisation. Sur le ruban, dans la sous-section calculs, sélectionnez créer une nouvelle mesure ou une nouvelle colonne ou une nouvelle table (nous verrons comment faire votre choix juste après).
2/ Suite à votre clic, la barre de formule apparaît et son menu dédié. Vous êtes désormais prêt à écrire votre première formule DAX :)
3/ Les formules commencent par le nom de votre nouvel objet (mesure, colonne ou table) suivi par le signe égal=
4/ Pour créer votre formule, changez le nom de votre objet (dans mon cas le nom “Colonne” a été remplacé par “nouvelle-colonne” sur la capture d’écran ci-après). Entrez ensuite les premières lettres d’une fonction que vous voulez utiliser (un menu d’autocomplétion vous permet de la sélectionner en appuyant sur tabulation sur votre clavier, voir image ci-dessous).
5/ Entrez les arguments de votre fonction (voir image ci-dessous) :
6/ Vérifiez les erreurs qui vous sont indiquées par un voyant rouge sur la barre de formule
7/ Validez la formule en appuyant sur la touche entrée de votre clavier
Quels types de données puis-je traiter avec DAX ?
Avec DAX vous pourrez manipuler les types de données suivants :
Nombre |
|
Finance |
|
Date |
|
Texte |
|
Booléen |
|
Binaires |
|
Variant |
|
Et comment j’écris mes opérateurs de formules ?
Comme dans Excel les opérateurs utilisés par DAX sont les suivants :
Opérateur | Signification | Exemple |
+ | Addition | 3+3 |
- | Soustraction | 3-1-1 |
* | Multiplication | 3*3 |
/ | Division | 3/3 |
^ | Exponentiel | 16^4 |
= | Égal à | [Region] = “France” |
> | Supérieur à | [Date vente] > “Jan 2009” |
< | Inférieur à | [Date vente] < “Jan 1 2009” |
>= | Supérieur ou égal à | [Montant] >= 20000 |
<= | Inférieur ou égal à | [Montant] <= 100 |
<> | Différent de | [Region] <> “France” |
Et comme dans Excel j’imagine qu’il y a également différentes familles de fonctions, c’est bien ça ?
Tout à fait !
Comme dans Microsoft Excel, on retrouve différentes familles de fonction DAX :
Famille de fonctions | Exemples de fonctions |
Agrégation |
|
Mathématiques |
|
Texte |
|
Logiques |
|
Itératives |
|
Tables |
|
Dates et heures |
|
“Penser Excel”, OK j’ai compris. Mais parfois Excel c’est embêtant. On répète plusieurs fois le même code… En Dax c’est pareil ?
Eh bien dans vos formules DAX vous pouvez déclarer des variables ce qui peut rendre votre code plus :
lisible,
performant,
facile à déboguer.
En utilisant le mot-clé VAR
, vous définissez des valeurs temporaires ou des résultats intermédiaires que vous réutiliserez ensuite dans le calcul. Cela vous permet d'éviter la répétition de calculs complexes et de structurer votre code de manière plus logique.
Prenons un exemple, dans les données envoyées par Fatima nous avons les salaires proposés pour les offres d’emploi en dollars américains USD. Nous voulons les convertir en EUROS.
Pour cela nous allons créer une variable du taux de conversion USD vers Euros en utilisant le mot-clé VAR
. Ensuite nous pouvons réemployer cette variable pour multiplier les salaires en dollars par le taux de conversion pour les avoir en euros.
Voilà à quoi ressemble la syntaxe finale :
salaire_max_EUROS =
VAR taux_USD_EUROS = 0.91 // taux en cours le 16 août 2024 à 8h GMT
RETURN salaries[max_salary]*taux_USD_EUROS
Avec cette écriture, mon successeur peut lire facilement que 0.91 correspondaient au taux USD => EUROS, il n’aura pas simplement un nombre sans explication.
Top ! Et je vois dans la formule deux slashs // ça veut dire quoi ?
Excellente remarque ! En utilisant les deux slashs // j’ai pu ajouter un commentaire en ligne dans mon code pour préciser la date du taux de change utilisé. C’est une pratique courante dans les langages de programmation. Ces commentaires facilitent la maintenance du code pour vous et vos successeurs.
Pour ajouter des commentaires sur plusieurs lignes, utilisez le commentaire multilignes dont la syntaxe est la suivante /* commentaire */
voir dans l’exemple ci-dessous :
salaire_max_EUROS =
VAR taux_USD_EUROS = 0.91
/*
0.91 est le taux USD vers EUROS
Ce taux a été relevé le 16 août 2024 à 8h GMT
*/
RETURN salaries[max_salary]*taux_USD_EUROS
Voilà ! Vous savez presque tout déjà 🙂
Alors revenons en au début, je vous disais que pour créer votre première formule, il faut savoir ce que vous souhaitez créer comme objet :
une “mesure”,
une “colonne” ou,
une “table”
Voyons cela ensemble.
Distinguez les cas d’utilisation de DAX
Le langage DAX peut être utilisé de deux façons différentes :
soit pour créer de nouvelles données calculées => On appelle cela des “colonnes calculées” ou des “tables calculées”,
soit pour calculer “à la volée” des valeurs => On appelle cela des “mesures”. Dans Power BI ces possibilités sont représentées sur votre bandeau de la façon suivante :
Les principales différences entre les mesures et les colonnes/tables calculées sont les suivantes :
Colonnes/tables calculées | Mesures |
|
|
|
|
|
|
|
|
Oula, c’est très théorique ton histoire, ça donne quoi sur des exemples concrets ?
OK, illustrons cela sur des situations concrètes :
1/ Ajouter une colonne calculée
Nous disions précédemment que dans les données envoyées par Fatima nous avons des colonnes avec les fourchettes de salaires proposées pour chaque offre d’emploi. Ces salaires sont en dollars américains (USD).
Fatima nous demande de calculer le salaire maximal en euros pour pouvoir comparer les salaires proposés par Ethikwear aux salaires proposés par les concurrents.
Pour cela nous décidons d’ajouter une colonne pour calculer le salaire maximal en euros à partir de la colonne ou il est indiqué en dollars. Nous faisons le calcul de la façon suivante :
On se place dans la table qui s’appelle “salaries” et on clique sur nouvelle colonne avec le bandeau de Power BI,
Puis dans la barre de formule de DAX on écrit la formule qui est ci-dessous dans le tableau.
identifiant de l’offre d’emploi | Autres colonnes… | salaire max USD (en USD) | COLONNE_salaire maximal (en EUROS) |
410 | … | 120 000 $ | =salaries[salaire max USD]* taux_de_change_USD_EUR |
… | … | … | … |
Résultat : dans ce cas, nous créons une colonne calculée qui devient une nouvelle colonne de notre table. Elle est stockée en mémoire dans notre table.
2/ Ajouter une table calculée
Dans les données nous avons une table qui s’appelle “job_industries” et qui contient l’identifiant de toutes les offres d’emploi avec leurs secteurs d’activité associés. Celle table ressemble à :
Identifiant de l’offre d’emploi (appelé job_id) | Identifiant du secteur d’activité lié à l’offre d’emploi (appelé industry_id) |
3887467990 | 14 |
… | … |
Fatima nous demande de faire le décompte du nombre total d’offres d’emploi pour chaque secteur d’activité.
Pour cela nous allons créer une table de synthèse en faisant le calcul suivant :
On clique sur nouvelle table avec le bandeau de Power BI
Puis dans la barre de formule de DAX on écrit la formule ci-dessous.
TABLE_job_industries_synthesis =
SUMMARIZE (
job_industries,
job_industries[industry_id],
"Nombre total d’offres d’emploi par secteur", DISTINCTCOUNT( job_industries[job_id] )
)
Ce qui est important, c’est de constater qu’on obtient ici comme résultat une nouvelle table qui est une synthèse de la table :
Identifiant du secteur d’activité (appelé Industry_id) | Nombre total d’offres d’emploi par secteur |
48 | 3445 |
… | … |
Idem dans ce cas, cette table calculée devient une nouvelle table qui est stockée en mémoire et ajoutée à notre modèle de données.
3/ Créer une mesure
Après réflexion, si Fatima souhaite que nous réalisions un tableau de bord in fine, une table de synthèse n’est peut-être pas le meilleur choix. Elle souhaitera peut-être à la fin avoir un indicateur qui permette à l’utilisateur du tableau de bord, lorsqu’il sélectionne un filtre sur un ou plusieurs secteurs d’activité qui l’intéressent, de visualiser le nombre d’emploi de la base de données associée.
Dans ce cas, nous n’avons pas besoin de stocker en mémoire toute une table qui contient ces décomptes, nous pourrions simplement calculer “à la volée” la somme des offres d’emploi associée aux secteurs sélectionnés par exemple.
Pour ce faire nous pouvons utiliser les mesures en cliquant sur le menu avec :
soit une mesure rapide, dont le menu propose des raccourcis qui ne nécessitent pas d’utiliser DAX mais ce menu offre moins de flexibilité pour les calculs complexes
soit une mesure, qui nous ouvre la barre de formule DAX pour écrire nos formules (voir ci-dessous).
MESURE_job_count =
DISTINCTCOUNT( job_industries[job_id] )
J’ai bien compris les différences, mais comment choisir entre utiliser des données calculées ou des mesures ?
L’expérience vous aidera à distinguer facilement les cas d’utilisation de l’un ou de l’autre. Pour vous aider je vous ai listé les critères que j’utilise :
Critère de choix | Mesure | Colonne/Table calculée |
Type de Calcul | Dynamique et dépend du contexte de la visualisation | Statique et évaluée lors du rafraîchissement des données |
Utilisation | Idéale pour les agrégations ou les indicateurs de type KPI… | Utilisée pour compléter le modèle, partitionner les données ou classer |
Contexte | Dépends des éléments filtrés et des segments dans les visuels | Ne change pas selon les interactions utilisateur |
Performance | Plus léger en termes de stockage mais peut-être coûteux en temps de calcul | Occupe plus de mémoire car stocké dans le modèle de données, mais calculé une seule fois |
Modification | Facilement modifiable sans changer la structure du modèle de données | Nécessite un recalcul de la colonne entière si modifiée |
Utilisation des Fonctions DAX | Complexes avec fonctions d'agrégation et de filtre ( | Plutôt simples et directes même si toutes les fonctions sont accessibles |
Exemples | Total des ventes selon les filtres applicables, moyenne dynamique | Catégorie de produit basée sur des règles fixes, indicateur binaire (par exemple, "en stock" ou "hors stock") |
Avant d’aller plus loin et de réaliser les travaux demandés par Fatima, voyons ensemble quelques bonnes pratiques de gestion de projet que j’utilise au quotidien. Elles ne sont pas spécifiques au langage DAX mais vous permettront d’éviter de vous lancer tête baissée dans des développements et vous rendre compte trop tard que vous êtes passé à côté de l’objectif (c’est du vécu… 😭).
Préparez votre projet avec DAX
Avant de vous lancer dans le développement de formules avec DAX, je vous conseille de suivre certaines bonnes pratiques pour gagner du temps.
Bonne pratique n°1 - Expliciter le besoin de l’utilisateur
Avant de commencer à écrire une seule ligne de code DAX, prenez le temps de bien comprendre et formaliser les besoins de l’utilisateur final. Posez des questions pour cerner exactement les attendus :
quels sont les besoins (j’utilise la technique des 5 pourquoi et j’écris les besoins sous forme de “user stories”),
quelles données sont pertinentes,
quels sont les indicateurs de performance clés (KPI), et
quel type de visualisations est souhaité.
Une compréhension claire des objectifs vous évitera de développer des solutions qui ne répondent pas aux attentes.
Bonne pratique n°2 - Concevoir son pipeline de calculs
Planifiez en amont les différentes étapes de votre pipeline de calculs. Déterminez dans quel ordre les calculs devront être effectués et identifiez les dépendances entre eux :
Personnellement, j’aime écrire sur un papier que pour calculer Z je dois calculer d’abord X puis calculer Y et faire des dessins des relations entre ces calculs.
Concevoir méthodiquement votre pipeline vous aidera à structurer vos formules DAX de manière logique et à anticiper les éventuels goulots d’étranglement ou doublons dans vos calculs.
Bonne pratique n°3 - Développer et tester vos formules DAX
Lorsque vous développez vos formules DAX, adoptez une approche itérative. Commencez par de petites parties de votre formule et testez-les avant de les intégrer dans des calculs plus complexes. Cela vous permet d’identifier et de corriger les erreurs plus facilement. Nous verrons plus loin dans le cours qu’il existe un outil très utile pour cela qui s’appelle DAX Studio.
Bonne pratique n°4 - Collecter rapidement du feedback pour réitérer
Une fois vos formules développées et intégrées dans vos tableaux de bord, partagez rapidement vos premiers prototypes avec les utilisateurs finaux. Collectez leur feedback pour comprendre ce qui fonctionne et ce qui doit être ajusté. Ce retour rapide vous permet de réitérer et d'améliorer vos solutions de manière agile, assurant ainsi qu’elles répondent parfaitement à leurs besoins.
Mettons tout ce que nous avons appris en pratique maintenant avec Fatima.
À vous de jouer
Contexte
Fatima, vous a donc envoyé l’historique des offres d’emploi publiées sur LinkedIn entre 2023 et 2024 aux Etats-Unis. Elle vous demande par Slack de poursuivre les calculs commencés dans ce chapitre.
Hello ! 😊 C'est Fatima.
Pour notre prochaine réunion d’équipe, j'aimerais que tu avances sur les calculs déjà démarrés. Si tu peux convertir les salaires minimums des annonces (actuellement en USD) en EUROS. Cela nous aidera à mieux comparer le positionnement de nos salaires.
Si tu peux aussi calculer un indicateur d'attractivité pour les entreprises concurrentes qui sont en phase de recrutement.
Merci et bon courage ! 👩🏫💪
Consignes
Pour répondre à ces demandes vous devez calculer une nouvelle colonne et une nouvelle mesure :
Créez une colonne calculée pour calculer le salaire minimum en EUROS proposé pour chaque annonce (dans la table
salaries
).Créez une mesure pour calculer la popularité des sociétés grâce au nombre de leurs suiveurs rapporté au nombre de leurs employés (dans la table
employee_counts
).
En résumé
DAX est un langage entre Excel et SQL, doté de nombreuses fonctions (agrégation, date, mathématique, texte, logique, tables) pour réaliser des calculs et des analyses complexes.
La force de DAX c’est de nous permettre de réaliser des calculs sur plusieurs sources de données (fichiers Excel, bases de données, etc.) interconnectées à travers un modèle de données que vous avez créé dans Power BI (ou Power Pivot dans Excel)
Pour rendre votre code lisible et maintenable plus facilement vous pouvez utiliser des variables et écrire des commentaires.
Demandez-vous comment matérialiser vos calculs pour votre besoin : par l'ajout de colonnes calculées, la conception de nouvelles tables calculées ou par l'utilisation des mesures.
Avant de vous lancer dans le développement, préparez votre projet en planifiant vos étapes de manière méthodique pour gagner en efficacité.
Dans le prochain chapitre nous allons explorer les nombreuses fonctions de DAX pour vous permettre de gagner du temps !