• 6 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 26/09/2024

Intégrez DAX dans votre projet

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).

Position de l'onglet modélisation en haut, du ruban calculs en haut à gauche et de la vue rapport sur le côté gauche
Position de l'onglet modélisation, du ruban calculs et de la vue rapport

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 :)

Position du menu dédié tout en haut et de la barre de formule en haut juste en dessous du menu précédent
Position du menu dédié et de la barre de formule

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).

Création de la première formule à partir d'une nouvelle colonne avec la fonction CONCATENATE
Création de la première formule

5/ Entrez les arguments de votre fonction (voir image ci-dessous) :

Saisie des arguments de la fonction CONCATENATE pour la nouvelle colonne
Saisie des arguments de la fonction

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

  • Entier (ex: 17)

  • Décimal (ex: 2.45)

Finance

  • Devise (ex: 43,5€)

Date

  • Date (ex: “Jan 1 2009”)

Texte

  • String (chaîne de caractères)

Booléen

  • Valeur booléenne (ex : Vrai ou Faux)

Binaires

  • Valeur binaire pour représenter des objets complexes comme des images (ex: 10010…)

Variant

  • Variant est un type de données spécial qui peut contenir n’importe quel type de données.

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

  • SUM() pour calculer une somme, 

  • AVERAGE() pour calculer une moyenne.

Mathématiques

  • EXP() pour calculer un exponentiel, 

  • ABS() pour calculer une valeur absolue.

Texte

  • CONCATENATE() pour concaténer 2 textes,

  • UPPER() pour mettre un texte en majuscule.

Logiques

  • SI() pour tester si une condition est vraie. 

Itératives

  • SUMX() pour calculer la somme des résultats d’un calcul itératif.

Tables

  • DISTINCT() pour retourner que les valeurs distinctes d’une colonne ou table

Dates et heures

  • DATEDIFF() pour faire la différence entre deux dates…

“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 :

  1. une “mesure”, 

  2. une “colonne” ou,

  3. 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 :

Représentation des colonnes et des mesures dans DAX
Représentation des colonnes et des mesures dans DAX

Les principales différences entre les mesures et les colonnes/tables calculées sont les suivantes :

Colonnes/tables calculées

Mesures

  • Le contexte de base peut être : 

    • les colonnes d’une table existante ou, 

    • une table existante complète. 

    • on peut même calculer une nouvelle table sans colonne ni table existante => Par exemple calculer une table de dates à partir de la date du jour

  • Le contexte de base est un contexte de filtre (sélectionnés librement par l’utilisateur ou imposés dans la formule) 

  • Permet de calculer tous les types de transformation (agrégats, fonctions mathématiques, logiques, etc.)

  • Permet de calculer tous les types de transformation (agrégats, fonctions mathématiques, logiques, etc.)

  • Elles sont calculées une seule fois au chargement ou à l’actualisation des données

  • Elles sont calculées à chaque fois qu’elles sont ajoutées à un visuel

  • Physiquement stockées dans des tables et occupent de l’espace disque, ce qui affecte la performance

  • Ne sont pas physiquement stockées

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 (  SUM  ,  CALCULATE  …)

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 tablesalaries).

  • 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 tableemployee_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 !

Exemple de certificat de réussite
Exemple de certificat de réussite