VAR et RETURN dans Power BI : structurer une mesure DAX
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.

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
CAWebLa mesure renvoie bien 55 000 €. La règle tient en une phrase. Une variable ne réagit jamais au contexte créé après elle.

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 )
CAWebLe 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.



