Le DAX est souvent utilisé afin de réaliser des actions purement visuelles et, dans la majorité des cas, les impacts sont énormes en termes de performance et de cohérence du modèle.
Un exemple classique est la gestion des vides (blank) dans les visuels (Cards). En effet, par défaut, les cartes affichent un magnifique (vide) ou (blank) lorsque l’agrégation affichée ne retourne pas de valeur. Or, il est souvent souhaité d’afficher la valeur 0 à la place.
Une des seules solutions jusqu’ici était la mise en place, dans la mesure en question, d’un test sur la valeur blank de la mesure, ou alors tout simplement l’ajout d’un zéro.
La mesure suivante :
Qty = SUM(Sales[Quantity])
Devient alors :
Qty = SUM(Sales[Quantity]) + 0
Ou encore :
Qty = VAR Qty = SUM(Sales[Quantity])
RETURN IF(ISBLANK(Qty),Qty,0)
Cela fonctionne, mais quel cauchemar ! Pour qu’un visuel affiche un zéro, je me retrouve à polluer ma mesure et, pire, à rendre existants tous les croisements qui l’utilisent. En effet, zéro et vide ne sont pas la même chose ,ce +0 a donc un impact majeur sur les performances de la mesure.
Dorénavant, chaque utilisation de la mesure va prendre en compte toutes les valeurs des axes d’analyse, même ceux qui n’ont pas de valeurs (pas de quantité dans mon exemple).
L’impact sur les performances peut être observé même dans un cas aussi simple via Dax Studio :
La requête avec l’ajout d’un zéro réalise deux appels au moteur de stockage (storage engine).
Là où celle qui n’implémente pas l’ajout du zéro n’en réalise qu’un seul.
Il n’est pas rare de voir des dégradations de performance catastrophiques lors de l’implémentation de ce type de calcul qui force l’existence de tous les croisements, en particulier parce que les utilisateurs ne veulent pas voir les zéros lors de l’utilisation d’autres visuels comme les tableaux ou les histogrammes. On se retrouve donc à ajouter un filtre pour exclure ceux-ci. Le nombre de requêtes et les performances sont ainsi encore détériorés.
Heureusement, avec la dernière version du visuel carte, il est maintenant possible d’afficher un zéro (ou n’importe quelle valeur) lorsque le résultat est vide.
Ainsi, plus besoin de bidouiller le calcul pour afficher le résultat attendu, et la configuration a lieu à l’endroit adéquat, c’est-à-dire LE VISUEL. Les performances ne sont donc pas altérées.
De nombreux exemples de DAX compensant des manques de configuration au niveau du visuel existent (comme limiter l’affichage du nombre de lignes dans un tableau ou une matrice, par exemple). Et si, en effet, le DAX permet de dépanner, soumettez une demande d’évolution à Microsoft en parallèle pour faire évoluer la situation > https://ideas.powerbi.com/.
Il ne nous reste plus qu’à remplacer tout le code que l’on a déployé jusqu’ici pour supprimer ce workaround DAX disgracieux ! Bon courage !