Lire l'article
Power BI est un merveilleux outil de visualisation des données. Effectivement, il dispose de nombreux visuels, l'interface est simple et efficace, l'ETL Power Query est redoutable pour traiter les données, la similarité avec des fonctionnalités des logiciels Microsoft fait qu'on se sent plus à l'aise qu'avec des outils comme Qlik ou Tableau... Cependant, l'adoption de Power BI à son plein potentiel est compliquée. Cela est notamment dû à la maîtrise du DAX, le langage de Power BI.
Vous pouvez être le meilleur sur Power Query, la modélisation des données et le design, vous ne pouvez pas produire des rapports précis, valides et cohérents sans connaître le DAX et ses subtilités. Vous allez peut-être réussir à mettre en production 1 rapport ou 2, mais dès qu'on a besoin de précision, on va avoir besoin d'aborder les notions de contexte de filtre, contexte de ligne, transition de contexte etc. Autant vous dire que vous allez devoir faire beaucoup d'efforts pour être serein dans Power BI.
En septembre 2024, Microsoft a mis en disponibilité générale une solution potentielle à ce problème de complexité du DAX : les calculs visuels. Dans cet article, on va répondre à plusieurs questions les concernant. Qu'est-ce qu'un calcul visuel ? Pourquoi utiliser des calculs visuels ? Comment les utiliser ? Quelles sont leurs limites ?

Un calcul visuel est un calcul DAX défini et exécuté directement sur un visuel (Microsoft). Comme le résume la documentation officielle de Power BI, un calcul visuel, c'est juste un calcul DAX qui est réalisé directement dans un visuel. Il ne s'agit pas ici de créer ce qu'on appelle des mesures, calculs DAX réutilisables dans d'autres visuels ou mesures.
Mais alors, quel est l'intérêt de faire des calculs directement au niveau d'un visuel ? N'est-ce pas mieux de faire des mesures pour alimenter des visuels tout en ayant la possibilité de les réutiliser ailleurs ? Quelle est la plus-value des calculs visuels dans Power BI ?
RUNNINGSUM, PREVIOUS, MOVINGAVERAGE font le travail directement.COLLAPSE et COLLAPSEALL. C'est un vrai soulagement quand on connaît la galère des totaux recalculés en DAX classique.La promesse de simplicité à la calcul comme dans Excel est ambitieuse. Toutefois, il faut nuancer et préciser qu'il y a un jargon à connaître dans le monde des calculs visuels.

Les modèles sont des formules pré-faites pour accomplir des tâches comme le calcul de parts ou de cumuls par exemple.
Voici la liste :
La difficulté est de savoir comment bien les utiliser et trouver les bons arguments.

Les champs sont juste les colonnes/mesures qui composent votre calcul. Exemple : Marge = [CA] * [Taux de Marge], ici on multiplie les champs CA et Taux de Marge.

Petite subtilité importante à connaître : la plupart des fonctions de calcul visuel ont un paramètre optionnel appelé Axe. Ce paramètre dit à Power BI dans quel sens il doit parcourir les données pour faire son calcul.
Dans un simple tableau, on n'a qu'un seul sens possible : de haut en bas. Pas de débat. Mais dans une matrice avec des lignes ET des colonnes, la question se pose : on cumule verticalement ? horizontalement ? les deux ? Et dans quel ordre ?
Dans 90% des cas, on utilise ROWS ou COLUMNS. Bien entendu, le mode "par défaut" est ROWS. Essayez de préciser l'axe pour éviter l'ambigüité dans vos calculs visuels.


Le paramètre Reset : quand remettre le compteur à zéro ?
Le paramètre Reset permet de dire à Power BI quand on veut que le calcul se remette à zéro pendant qu'il parcourt la matrice. C'est utile notamment pour les cumuls : on peut vouloir un cumul qui redémarre à chaque nouvelle année, à chaque nouveau trimestre, à chaque nouveau pays...
Par défaut, Reset vaut NONE, ce qui veut dire : on ne remet jamais à zéro. Le calcul cumule sur tout ce qu'il rencontre.
Imaginons une matrice avec une hiérarchie en lignes : Année > Trimestre > Mois > Jour. On calcule un RUNNINGSUM sur le CA.
On peut choisir parmi plusieurs comportements :
Deux modes : absolu ou relatif
C'est là que ça se corse un peu. Reset propose deux façons différentes de spécifier à quel niveau on veut redémarrer.
Mode absolu : on compte les niveaux depuis le haut de la hiérarchie. On utilise des entiers positifs ou on référence directement la colonne.
RUNNINGSUM([CA], HIGHESTPARENT) -- redémarre au niveau le plus haut (Année)
RUNNINGSUM([CA], 1) -- pareil, niveau 1 = Année
RUNNINGSUM([CA], [Année]) -- pareil, en référençant la colonne
RUNNINGSUM([CA], 2) -- niveau 2 = Trimestre
RUNNINGSUM([CA], 3) -- niveau 3 = Mois
Mode relatif : on compte les niveaux depuis le niveau courant, avec des entiers négatifs.
RUNNINGSUM([CA], LOWESTPARENT) -- redémarre au parent immédiat
RUNNINGSUM([CA], -1) -- pareil, parent direct
RUNNINGSUM([CA], -2) -- grand-parent



RUNNINGSUM : somme cumulée. Notre grand classique, déjà vu. Pratique pour les calculs de type YTD, QTD, MTD...

Cumul CA = RUNNINGSUM([CA])
MOVINGAVERAGE : moyenne mobile sur une fenêtre glissante. Le deuxième argument, c'est la taille de la fenêtre.

Moyenne 3 mois = MOVINGAVERAGE([CA], 3)
Pratique pour lisser une courbe et voir la tendance plutôt que le bruit.
Ces fonctions permettent de pointer des lignes précises dans le visuel.
PREVIOUS : valeur de la ligne précédente.

Variation M-1 = [CA] - PREVIOUS([CA])
NEXT : valeur de la ligne suivante. Plus rare en pratique mais ça existe.
CA du mois suivant = NEXT([CA])
FIRST : valeur de la première ligne du visuel.
Ecart vs janvier = [CA] - FIRST([CA])
LAST : valeur de la dernière ligne.
Ecart vs decembre = [CA] - LAST([CA])
RANGE : permet de récupérer une tranche de lignes, pour ensuite appliquer un calcul dessus.
Moyenne des 3 derniers = AVERAGEX(RANGE(-3), [CA])
C'est un peu plus avancé, à réserver aux cas spécifiques.
Celles-là n'ont de sens que dans une matrice avec plusieurs niveaux de détail.
COLLAPSE : remonte d'un niveau dans la hiérarchie (vers le parent direct).

% du parent = DIVIDE([CA], COLLAPSE([CA], ROWS))
Exemple : dans une matrice Région > Pays > Ville, sur la ligne "Paris", COLLAPSE renvoie le total de "France".
COLLAPSEALL : remonte jusqu'au niveau total général.

% du total general = DIVIDE([CA], COLLAPSEALL([CA], ROWS))
EXPAND : descend d'un niveau vers les enfants.

Moyenne enfants = EXPAND(AVERAGE([CA]), ROWS)
Moins utilisée que COLLAPSE dans les cas concrets.
EXPANDALL : descend jusqu'au niveau le plus détaillé (les feuilles).
LOOKUP : le RECHERCHEV d'Excel appliqué au visuel, cherche dans les lignes de détail.

LOOKUPWITHTOTALS : même principe mais inclut aussi les lignes de total/sous-total dans la recherche.
Part sur total = DIVIDE([CA], LOOKUPWITHTOTALS([CA], [Pays], BLANK()))
RANK : classement des valeurs dans le visuel. Arguments : type de classement (DENSE, SKIP) et critère de tri (ORDERBY).

Rang = RANK(DENSE, ORDERBY([CA], DESC))
ISATLEVEL : renvoie VRAI si la colonne spécifiée est présente au niveau courant du visuel. Utile pour conditionner un affichage selon le niveau de détail.

Est au niveau Mois = ISATLEVEL([Mois])
1.Sélectionner votre visuel puis cliquer sur les ...

2.Choisir un modèle de calcul ou directement sélectionner Personnalisé

3. remplir la barre de formules en précisant l'axe (le périmètre du calcul, on somme la ligne ou la colonne par exemple) et le reset (le moment où on cesse de somme pour repartir à 0 comme un changement d'année dans un YTD) si nécessaire.

4. On valide et on change le format dans le pinceau de mise en forme puis Général et enfin Format de données.

Et c'est tout ! Le calcul visuel CA YTD est ainsi crée et au bon format.
Le DAX est la bête noire de beaucoup de développeurs dans Power BI. Les calculs visuels sont une solution de contournement à de nombreuses difficultés liées au DAX, comme la répétition de CALCULATE, ALL, ALLSELECTED, AVERAGEX ou encore SUMMARIZE.
Comme on l'a vu dans cet article, l'intérêt des calculs visuels est principalement d'éviter les écueils classiques du DAX.
Cependant, la maîtrise des calculs visuels n'est pas si évidente et certaines limites concernant l'industrialisation des calculs ou la disponibilité de ceux-ci nous poussent à affirmer que les mesures restent le must have de tout rapport.
Ainsi, la compréhension du DAX et de ses subtilités reste nécessaire mais Microsoft nous offre une fonctionnalité pour accélérer certaines analyses et rendre un plus accessible Power BI.
