DAX : cas d’utilisation fonction earlier
La fonction DAX earlier permet de faire une comparaison d’une donnée d’une colonne d’une ligne actuelle par rapport à la ligne suivante.
Exemple dans une table calculé :
Dans la table résumée suivante :

Chaque donnée est résumée par client, type d’envoi (ShipVia), pays d’envoi (ShipCountry), et la quantité envoyé (CA)
Encadré en différente couleur sont les données de différents clients.
Au lieu d’avoir plusieurs lignes par client, certains utilisateurs souhaiteraient ne garder que la ligne avec le plus de quantité (CA) vendu
Pour cela, l’utilisateur peut créer une colonne avec l’expression DAX suivante :
Colonne = MAXX(filter(‘Table 2’,EARLIER(‘Table 2′[CustomerID],1)=’Table 2′[CustomerID]),[CA])

L’expression DAX avec la function earlier renvoie le maximum de quantité envoyé (CA) tant que le client actuel n’est pas le même que les précédents.
Par exemple :
- pour les 2 premières lignes :

Le client WOLZA de la 2ème ligne est le même que celui de la 1ère ligne donc l’expression en DAX de la nouvelle colonne renverra le maximum de quantité envoyé (CA) entre les 2 lignes.
- Pour les 3 premières lignes :

Le client WOLZA de la 3ème ligne est le même que celui de la 2ère ligne et de la 1ère ligne donc l’expression en DAX de la nouvelle colonne renverra le maximum de quantité envoyé (CA) entre les 3 lignes.
- Pour les 5 premières lignes :

Le client WILMK de la 4ème ligne et 5ème ligne est différents du client WOLZA des 3 premières lignes, donc l’expression DAX de la colonne renverra le maximum de quantité envoyé pour le client WILMK entre la 4ème ligne et la 5ème ligne.
A chaque changement de client, la fonction earlier avec l’aide de la fonction filter sépare les données en bloc et effectue ensuite le calcul demandé (ici le maximum de quantité envoyée).
L’utilisateur n’a plus qu’à créer une nouvelle colonne avec l’expression DAX suivante :
Colonne 2 = [CA] = [Colonne]

Et l’utilisateur peut par la suite filtré sur la valeur « True » ou « False » dans ses visuels pour ne garder que la ligne la plus importante pour chaque client.
Pour rendre cette méthode plus dynamique, il faut créer une mesure.

Mesure 2 =
var a = SUMMARIZE(ALLEXCEPT(Orders,Calendrier),Orders[CustomerID],Orders[ShipVia],Orders[ShipCountry], »CA »,sum(Order_Details[Quantity]))
var b = ADDCOLUMNS(a, »colonne »,MAXX(filter(a,EARLIER(Orders[CustomerID])=Orders[CustomerID]),[CA]))
RETURN
maxx(filter(b,Orders[CustomerID]=SELECTEDVALUE(Orders[CustomerID])),[colonne])
les variables a et b refont en arrière-plan les mêmes opérations effectuées que celles pour créer la table2 montrée précédemment
- la variable « a » contient la table 2 avant l’ajout de la colonne utilisant la fonction DAX « EARLIER »
- la variable « b » effectue l’ajout de la colonne utilisant la fonction DAX « EARLIER »
l’expression DAX après le return renvoie un résultat en fontion de la présence de la donnée cliente (customerID) de la table Commande (Orders), le résultat du calcul.
L’intérêt de la mesure : contrairement à une table en DAX dont les valeurs ne changeront qu’après avoir cliqué sur le buton actualisation, une mesure DAX effectuera le calcul après chaque sélection d’une valeur dans un segment et/ou dans un visuel.
Dans un visuel, on obtient le même tableau que table2

Si l’utilisateur choisit un mois :
Pour wolza la valeur de la mesure mesure2 n’est plus 100 mais 69. Le calcul s’adapte en fonction du mois choisi ce qui n’est pas possible sur une table calculée.
Pour ne garder que la ligne contenant que la plus grande quantité envoyé, il faut créer une autre mesure,
Mesure 4 = if([Mesure 2]=SUM(Order_Details[Quantity])&& SUM(Order_Details[Quantity])>0,1,0)

Si ‘utilisateur place la mesure « mesure 4 » dans un tableau :

Pour chaque client, le chiffre 1 est placé sur les lignes avec la quantité (CA) est le résultat de la mesure « mesure2 »
Si l’utilisateur place la mesure dans les filtres dans les visuels.

Seules les lignes correspondantes sont gardés. La mesure « mesure4 » peut ensuite être retiré du visuel :
Laisser un commentaire
Il n'y a pas de commentaires pour le moment. Soyez le premier à participer !