Aujourd’hui, nous avons à nouveau reçu une question sur le forum qui concerne Power BI et dont la réponse repose sur une compréhension en profondeur des modèles de données, du langage DAX et des contextes d’évaluation. L’usager demande comment utiliser les valeurs de deux segments (basés sur la même dimension) comme paramètres dans une mesure en DAX. Cet article vise à présenter cette question portant sur les filtres avancés dans Power BI et la réponse détaillée.
Question Power BI du forum concernant les filtres avancés dans Power BI
Nous avons reçu aujourd’hui, la question suivante sur le forum.
Données de départ
Pour répondre à cette question, j’ai créé la table de données suivante ainsi que deux tables qui comprennent la liste des catégories, soit A, B, C.
Modèle de données
J’ai par la suite simplement créé le modèle de données suivant (le détail des mesures sera vu plus loin).
Visualisation de données avec filtres avancés dans Power BI
Dans mon rapport, l’usager peut donc sélectionner une valeur dans le segment 1 (dans ce cas-ci B) et une autre valeur dans le segment 2 (dans ce cas-ci C). On voit ensuite la moyenne des prix de la catégorie B et la moyenne des prix de la catégorie C. Ces deux premières mesures sont très simples. Elle font simplement la moyenne des prix. Dans la première visualisation, on enlève l’interaction du deuxième filtre (donc la mesure est seulement filtrée pour la catégorie B) et dans la deuxième visualisation on enlève l’interaction du premier filtre (donc la visualisation est seulement filtrée pour la catégorie C). Ces visualisations ne servent qu’à vous montrer que la différence calculée, dans la troisième visualisation représente bel et bien le résultat recherché. Dans d’autres contextes, on procèderait ici plus rigoureusement.
Vous pouvez apercevoir ci-dessous un deuxième exemple (nouvelles sélections dans les segments) et à nouveau, vous pouvez constater que la mesure représente bien la différence entre la moyenne selon le segment 1 et la moyenne selon le segment 2.
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. |
---|
Création de mesure en situation d’un contexte d’évaluation ardu!
Le problème avec la mesure demandée par l’usager, c’est d’abord qu’on veut deux filtres à partir de la même dimension et que sans intervention en DAX, ces filtres vont se filtrer entre eux. Il faut donc être très vigilant! Il y aurait plusieurs façons de résoudre ici cette problématique. Je propose la suivante, qui est à mon sens, la plus simple à comprendre.
Ci-dessous donc, je fais la différence entre deux mesures CALCULATE.
Chacune des mesures CALCULATE fait la moyenne des prix.
Mais pour ce faire, elles ignorent TOUS LES FILTRES POSÉS SUR LA TABLE 1 (que ces filtres proviennent du segment 1 ou du segment 2), puis elles filtrent ensuite la table pour ne retenir que la valeur du segment 1 dans le cas du premier CALCULATE et que la valeur du segment 2 dans le deuxième CALCULATE.
S’approprier la notion de contexte d’évaluation
Ce genre de visualisation est très ardu à mettre en place, surtout pour un usager qui vient de l’univers d’Excel, sans une bonne maîtrise du langage DAX et des contextes d’évaluation. À ce sujet, je vous recommande fortement ma formation d’introduction sur le langage DAX. Mais attention! Vous ne deviendrez pas des maîtres du langage DAX instantanément. Ce n’est qu’après avoir été exposé à de nombreuses problématiques en DAX, que vous saurez tirer votre épingle du jeu. La formation vous fournira néanmoins les bases. Elle vous expliquera pourquoi les mesures se comportent comme elles se comportent et elle vous permettra de vous poser les bonnes questions et espérons-le d’y trouver ensuite les bonnes réponses.
Voici quelques commentaires d’apprenants ayant suivi la formation d’introduction au langage DAX :
Fichier d’accompagnement VIP à télécharger
Pour télécharger le fichier utilisé dans ce tutoriel, devenez membre VIP du CFO masqué.
Merci pour ce tuto !
Une question: si l’on veut pouvoir filtrer non une seule valeur comme avec SELECTEDVALUE mais plusieurs quelle serait la fonction ?
Bonjour,
Pour répondre correctement il faudrait préciser votre scénario. Mais il existe la fonction ALLSELECTED.
Au plaisir,
Sophie
Bonjour,
on procédé comment en DAX si on veut faire une calcule avec une condition dans une celle comme dans excel ?
Bonjour,
Votre question n’est pas assez précise pour pouvoir y répondre précisément.
Dans tous les cas, en DAX, vous avez la fonction IF, qui est l’équivalent de la fonction SI d’Excel et vous avez la fonction SWITCH pour effectuer des SI imbriqués.
Vous pouvez trouver un exemple de la fonction SWITCH ici https://www.lecfomasque.com/power-bi-presenter-un-etat-des-resultats/.
Sinon, pour une “colonne” conditionnelle, dépendamment du contexte, vous pouvez utiliser Power Query. Il y a déjà une fonctionnalité pour ajouter des colonnes conditionnelles dans le menu “Ajouter une colonne”.
Au plaisir,
Sophie
Bonjour Sophie,
Votre article est d’une grande aide, merci.
J’ai cependant une question sur le même principe, mais avec un segment qui me permet des sélectionner 1 seule catégorie parmi 50, et un autre qui me permet de sélectionner plusieurs catégories (une plage donc) parmi les 50. Le but étant pour moi, d’afficher le prix d’une catégorie, et l’autre d’afficher le prix moyen d’une plage sélectionnée.
Y a t’il donc un moyen d’étendre votre formule à une sélection multiple?
Merci pour votre aide.
Arthur
Bonjour,
La fonction ALLSELECTED va considérer toutes les valeurs sélectionnées.
Au plaisir,
Sophie
Bonjour,
merci pour ce retour 🙂
J’avais bien essayé hier cette méthode, cependant si j’écris ma mesure comme ci :
Mesure 2 = CALCULATE(AVERAGE(‘Table'[Prix]),ALLSELECTED(Table_2[Categorie]))
lorsque je vais sélectionner A dans le segment 1 et BC dans le segment 2, la mesure 2 va renvoyer une erreur car il semblerait qu’elle tienne compte du filtrage fait par le segment 1…
Je ne sais pas si je suis clair, mais il faudrait que je puisse avoir une sélection multiple en 1 et en 2 qui soient décorrélées l’une de l’autre. C’est réalisable de demander ça aux mesures PowerBi?
Merci encore pour votre aide.
Arthur
Bonjour,
Est-ce que votre modèle de données comprend 2 tables de segments liées à la table de faits, tel qu’illustré dans l’article?
Et le cas échéant, pour créer vos visuels de segments, est-ce que vous vous assurez d’utiliser les informations des deux différentes tables?
Sophie
J’ai repris entièrement votre exemple, et j’ai modifié les mesures selon la formule suivante Mesure 2 = CALCULATE(AVERAGE(‘Table'[Prix]),ALLSELECTED(Table_2[Categorie])).
Il semble qu’ainsi, la mesure 2 est liée à la mesure 1 à partir de Table_1[Categorie]… L’objectif étant pour moi d’obtenir avec la mesure 1, un AVETRAGE de A ou B ou C, et en parallèle d’obtenir avec la mesure 2, un AVERAGE A, ou AB, ou AC, ou ABC, ou B, ou BA, …
Pouvez vous m’aider à revoir ma formule svp?
Merci 🙂
Bonjour,
Pourriez-vous svp poser votre question dans le forum et surtout, y déposer votre fichier.
Il est possible que vous deviez le zipper pour l’uploader.
https://www.lecfomasque.com/forums
Merci.
Sophie
Bonjour , j’ai fait comme l’exemple mais avec les tables ventes et clients mais le résultat est une table vide
voici la formule DAX : Table = FILTER(ALL(Ventes), Ventes[CT_Num]= SELECTEDVALUE(CLIENTS[Identifiant client]))
Bonjour,
Quelques pistes de solution :
– Est-ce qu’il y a bien un identifiant client de sélectionné?
– Vous semblez créer une table plutôt qu’une mesure. Pour créer une table, utilisez la fonction RELATED(CLIENTS[Identifiant client]) plutôt que SELECTEDVALUE(CLIENTS[Identifiant client])
Audrée