top of page
Rechercher

VAR et RETURN dans Power BI : structurer une mesure DAX

Groupe Kronoscope
il y a 2 heures
5 min de lecture

VAR et RETURN servent à découper une mesure DAX en étapes nommées. Chaque étape est calculée une seule fois, puis réutilisée. Le gain est double : la mesure devient lisible, et souvent plus rapide. Une seule règle explique tous les pièges : une variable est figée au moment où elle est déclarée.


Cet article démontre ce comportement sur un jeu de données fictif, valeur par valeur.




Télécharger l'exercice VAR et RETURN en DAX

Le pack contient 72 lignes de ventes réparties sur six produits et trois canaux. Vous y trouverez cinq exercices avec validation automatique, le corrigé en formules Excel, le code M et les mesures DAX prêtes à coller.

Les données sont entièrement fictives. Elles ne décrivent aucune entreprise réelle.




Un exemple simple : la même mesure avec et sans variable

Prenons une table de cinq lignes. Chaque ligne porte un produit, un canal et deux montants.


Produit

Canal

CA

Coût

Clavier

Web

12 000 €

7 200 €

Souris

Web

8 000 €

4 400 €

Casque

Magasin

20 000 €

13 000 €

Écran 24 pouces

Magasin

25 000 €

17 500 €

Écran 27 pouces

Web

35 000 €

24 500 €


Voici le taux de marge écrit sans variable. L'expression SUM ( Ventes[CA] ) apparaît deux fois.

Taux de marge sans variable =
DIVIDE (
    SUM ( Ventes[CA] ) - SUM ( Ventes[Coût] ),
    SUM ( Ventes[CA] )
)

La même mesure avec variables tient en trois étapes nommées.

Taux de marge =
VAR CA = SUM ( Ventes[CA] )
VAR Cout = SUM ( Ventes[Coût] )
RETURN
    DIVIDE ( CA - Cout, CA )

Suivons le calcul valeur par valeur, sans aucun filtre appliqué.

Étape

Expression

Valeur

VAR CA

SUM ( Ventes[CA] )

100 000 €

VAR Cout

SUM ( Ventes[Coût] )

66 600 €

RETURN

DIVIDE ( CA - Cout, CA )

33,4 %


Le résultat est identique. La deuxième écriture nomme chaque quantité. Elle évite aussi de calculer deux fois la somme du CA.


Schéma annoté d'une mesure DAX avec VAR et RETURN : chaque ligne du code est reliée à son rôle, et un bandeau montre la valeur produite par chaque étape, 445 170 € pour le CA, 300 004 € pour le coût et 32,61 % pour le résultat final.


La syntaxe de VAR et RETURN

Syntaxe

Nom de la mesure = VAR NomDeVariable = expression RETURN expression finale

Chaque VAR déclare une variable. Le mot-clé RETURN ferme le bloc et n'apparaît qu'une fois.


Les règles de nommage d'une variable

Microsoft impose un jeu de caractères strict. Un nom refusé bloque la mesure entière.

  • Lettres de a à z et de A à Z, chiffres de 0 à 9 uniquement.

  • Un chiffre ne peut pas être le premier caractère.

  • Le double trait de soulignement est accepté, en préfixe seulement.

  • Ni espace, ni accent, ni autre caractère spécial.

  • Un mot-clé réservé du langage est interdit.

  • Le nom d'une table existante est interdit.

Les délimiteurs ne fonctionnent pas non plus. Encadrer le nom par des guillemets ou des crochets déclenche une erreur.


Enchaîner plusieurs variables

Les variables sont évaluées dans leur ordre de déclaration. Une variable peut donc réutiliser une variable déclarée plus haut. Elle peut aussi appeler une mesure existante.

Marge par ligne de vente =
VAR CA = SUM ( Ventes[CA] )
VAR Cout = SUM ( Ventes[Coût] )
VAR Marge = CA - Cout
VAR NbLignes = COUNTROWS ( Ventes )
RETURN
    DIVIDE ( Marge, NbLignes )

RETURN ne renvoie pas forcément la dernière variable déclarée. Il renvoie l'expression que vous écrivez juste après lui.



Le piège n°1 : une variable est figée

C'est la source d'erreur la plus fréquente. Une variable est évaluée là où elle est déclarée. Elle ne réagit plus à aucun filtre posé ensuite.


La mesure qui ne filtre rien

Cherchons le chiffre d'affaires du canal Web. Voici une écriture très courante, et fausse.

CA Web (faux) =
VAR CATotal = SUM ( Ventes[CA] )
RETURN
    CALCULATE ( CATotal, Ventes[Canal] = "Web" )

Le résultat attendu est 55 000 €. La mesure renvoie 100 000 €. CATotal est calculé avant CALCULATE. À cet instant, aucun filtre de canal n'existe. CALCULATE reçoit ensuite un simple nombre. Filtrer un nombre ne change rien.

Produit

Canal

CA

Retenu par le filtre Web ?

Déjà compté dans CATotal ?

Clavier

Web

12 000 €

✓

✓

Souris

Web

8 000 €

✓

✓

Casque

Magasin

20 000 €

✗

✓

Écran 24 pouces

Magasin

25 000 €

✗

✓

Écran 27 pouces

Web

35 000 €

✓

✓

Total


100 000 €

55 000 €

100 000 €


L'écriture correcte

Le filtre doit entrer dans la variable. Le calcul est alors fait après le filtre.

CA Web =
VAR CAWeb =
    CALCULATE ( SUM ( Ventes[CA] ), Ventes[Canal] = "Web" )
RETURN
    CAWeb

La mesure renvoie bien 55 000 €. La règle tient en une phrase. Une variable ne réagit jamais au contexte créé après elle.


Comparaison de deux écritures DAX : à gauche la mesure fausse où CALCULATE entoure une variable déjà calculée et renvoie 445 170 €, à droite l'écriture correcte où CALCULATE est placé dans la variable et renvoie 147 340 €.

Retenez bien

Placez toujours CALCULATE à l'intérieur de la variable, jamais autour d'une variable déjà calculée.



Déboguer une mesure grâce à RETURN

Une mesure fausse est difficile à corriger d'un seul bloc. Les variables permettent de l'inspecter étape par étape.

Mettez l'expression finale en commentaire avec deux tirets. Renvoyez ensuite la variable à contrôler.

Part du canal Web =
VAR CAWeb =
    CALCULATE ( SUM ( Ventes[CA] ), Ventes[Canal] = "Web" )
VAR CATotal =
    CALCULATE ( SUM ( Ventes[CA] ), ALL ( Ventes[Canal] ) )
RETURN
    -- DIVIDE ( CAWeb, CATotal )
    CAWeb

Le visuel affiche alors 55 000 €. Vous savez que CAWeb est juste. Testez ensuite CATotal de la même façon.

Retirez enfin les deux tirets pour rétablir la mesure. Microsoft documente cette technique dans ses bonnes pratiques DAX.



Une variable peut contenir une table

Une variable ne stocke pas seulement un nombre. Elle peut aussi stocker une table entière.

CA des grosses lignes =
VAR GrossesVentes =
    FILTER ( Ventes, Ventes[CA] > 15000 )
RETURN
    SUMX ( GrossesVentes, Ventes[CA] )

GrossesVentes contient ici trois lignes. SUMX les parcourt et additionne leur CA. Le résultat vaut 80 000 €.

Attention à la syntaxe. On écrit Ventes[CA] dans SUMX, jamais GrossesVentes[CA]. Les colonnes d'une variable de table ne sont pas accessibles sous ce nom.



Les pièges de VAR en production

  • La portée est locale. Une variable n'existe que dans sa mesure. Le DAX n'a pas de variable globale.

  • Une variable déclarée avant un IF est évaluée quelle que soit la branche retenue. Déclarez-la dans la branche quand le calcul est lourd.

  • Une variable jamais référencée n'est jamais évaluée. Dès qu'elle est référencée, elle est calculée, même si son résultat n'est pas affiché.

  • Dans une colonne calculée, une variable remplace la fonction EARLIER. Le code devient nettement plus lisible.

  • Un nom de variable identique à un nom de table déclenche une erreur. Préfixez vos variables pour l'éviter.

VAR et RETURN ne changent aucun résultat par eux-mêmes. Ils changent la façon dont vous écrivez et corrigez vos mesures. Prenez l'habitude de les utiliser dès la deuxième ligne d'une mesure.


 
 
bottom of page