Récemment, un usager a posé la question ci-dessous sur notre forum. Cet article vise à y répondre en utilisant une mesure en DAX, basée sur les fonctions suivantes : IF, CALCULATE, SUMX, MAX DISTINCTCOUNT et DATESINPERIOD.
Apprendre à créer des mesures en DAX pour toutes les situations
Je l’ai répété à plusieurs reprises sur ce blogue. Apprendre le langage DAX n’est pas simple. Si on prépare soi-même ses données, il faut d’abord très bien maîtriser les concepts de normalisation de données et concevoir des modèles de données selon les règles de l’art (notamment bien maîtriser les schémas en étoile). Ensuite, il faut absolument maîtriser les contextes d’évaluation et c’est vraiment cette notion qui est la plus complexe car c’est très subtile. Je ne connais personne qui a été en mesure de maîtriser les contextes d’évaluation en 24 heures… Il faut d’abord apprendre ce que c’est, voir des exemples, pratiquer, revenir vers la théorie et pratiquer à nouveau avant qu’on l’on puisse réellement en absorber l’essence. À ce sujet, je vous invite d’ailleurs à assister à notre éventuel webinaire portant sur les contextes d’évaluation et/ou à suivre notre formation d’introduction au langage DAX et notre formation sur les modèles de données.
Données de départ
Imaginons les données de départ suivantes, triées d’abord par client, ensuite par ticket ID et ensuite par date:
Premier essai de mesure en DAX
À priori, mon premier réflexe a été d’utiliser la fonction SUMX pour effectuer des calculs itératifs sur la table DimClients (i.e., la table qui présente la liste des clients sans doublons). L’idée était de compter le nombre de tickets différents (avec la fonction DISTINCTCOUNT), pour chaque client (référence à la table DimClients), dans les 10 derniers jours (avec la fonction DATEINPERIOD).
J’ai donc créé la mesure suivante:
Visualisation des résultats du premier essai
Comme toujours, afin de vérifier le comportement de ma mesure, j’ai utilisé des visualisations. D’abord, j’ai utilisé une visualisation de table, dans laquelle j’ai inséré la liste des clients et la mesure NbreTickets10Jrs. Ensuite, j’ai utilisé une visualisation de carte présentant le total de ma mesure. Le comportement me semblait bon. J’ai alors ajouté un filtre de dates pour vérifier que le calcul se faisait correctement. Ci-dessous, on voit donc qu’au 18 janvier, le client A présente un total de 2. Ce chiffre est en ligne avec les données de départ puisque le ticket #2 du client A a été traité dans les 10 jours précédent le 18 janvier (incluant le 18 janvier) et le ticket #9 a également été traité dans les 10 jours précédent le 18 janvier (on voit un suivi au 10 janvier). Si vous vérifiez un à un les totaux, vous verrez qu’ils retournent tous la valeur attendue.
Retour vers la demande d’origine
Dans sa question originale, l’usager cherche à tracer un graphique de l’évolution de ce montant. J’ai donc transposé les données sur un graphique en courbe.
C’est là que j’ai réalisé que pour certains mois, j’avais des valeurs supérieures à 8 alors que mon échantillon comporte 8 clients… ça ne fait donc pas de sens… En effet, on ne souhaite pas voir le nombre de tickets uniques traités dans les 10 derniers jours mais plutôt le nombre de clients uniques qui ont au moins un ticket traité dans les 10 derniers jours. Un ajustement de formule s’imposait alors.
Vous devez analyser de grandes quantités de données et les présenter dans des rapports et tableaux de bord, avec des indicateurs de performance pertinents ? Développez vos compétences avec nos formations en Power BI en français ou en anglais. |
---|
Deuxième essai de mesure en DAX : Intégration de la fonction IF
À mon deuxième essai, j’ai intégré une fonction IF dans ma mesure, que j’ai nommée NbreClient10Jrs, pour me permettre de retourner un 1 lorsqu’un client a au moins un ticket ouvert au cours des 10 derniers jours et j’ai donc obtenu le résultat suivant:
Et voici le détail de la nouvelle mesure:
J’ai ensuite transposé le tout dans un graphique en courbe, que j’ai comparé au premier. On voit bien dans le deuxième graphique que le total n’est jamais supérieur à 8, le nombre total de clients dans mon échantillon.
Conclusions
Je constate qu’au moins 80% des questions posées sur le forum, en lien avec Power Pivot et Power BI, émanent d’un manque d’expérience avec la création de modèles de données et surtout, avec les contextes d’évaluation. C’est peut-être moins excitant de parler de contextes d’évaluation que de dessiner des visualisations mais malheureusement, il est impossible de créer des visualisations percutantes sans maîtriser les contextes d’évaluation. Je vous recommande alors chaudement de prendre le temps de vous former sur le sujet. Vous trouverez d’ailleurs plusieurs articles sur ce blogue à ce sujet. Bonne lecture!
Fichier d’accompagnement VIP à télécharger
Pour télécharger le fichier utilisé dans ce tutoriel, devenez membre VIP du CFO masqué.
Formation complémentaire
Pour une introduction au langage DAX, utilisé par Power Pivot et par Power BI Desktop, qui permet de créer des tableaux de bord flexibles et faciles à mettre à jour en plus de créer des visualisations de données évoluées et pertinentes, suivez la formation Introduction au langage DAX (Power BI et Power Pivot).