Utilisez des variables pour améliorer vos formules de DAX
En tant que modélisateur de données, l’écriture et le débogage de certains calculs DAX peuvent être difficiles. Il est courant que les exigences de calcul complexes impliquent souvent l’écriture d’expressions composées ou complexes. Les expressions composées peuvent impliquer l’utilisation de nombreuses fonctions imbriquées et éventuellement la réutilisation de la logique d’expression.
L’utilisation de variables dans vos formules DAX peut vous aider à écrire des calculs plus complexes et plus efficaces. Les variables peuvent améliorer les performances, la fiabilité, la lisibilité et réduire la complexité.
Dans cet article, nous allons illustrer les trois premiers avantages en utilisant un exemple de mesure pour la croissance des ventes de l’année sur l’année (YoY). (La formule pour la croissance des ventes yoY est les ventes de période, moins les ventes pour la même période l’année dernière, divisées par les ventes pour la même période l’année dernière.)
Commençons par la définition de mesure suivante.
Sales YoY Growth % =
DIVIDE(
([Sales] - CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))),
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
)
La mesure produit le résultat correct, mais voyons maintenant comment elle peut être améliorée.
Améliorer les performances
Notez que la formule répète l’expression qui calcule « même période l’année dernière ». Cette formule est inefficace, car elle exige que Power BI évalue la même expression deux fois. La définition de mesure peut être rendue plus efficace à l’aide d’une variable, VAR.
La définition de mesure suivante représente une amélioration. Il utilise une expression pour affecter le résultat « même période l’année dernière » à une variable nommée SalesPriorYear. La variable est ensuite utilisée deux fois dans l’expression RETURN.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
La mesure continue de produire le résultat correct et ce, en environ la moitié du temps de requête.
Améliorer la lisibilité
Dans la définition de mesure précédente, notez comment le choix du nom de variable simplifie la compréhension de l’expression RETURN. L’expression est courte et se décrit elle-même.
Simplifier le débogage
Les variables peuvent également vous aider à déboguer une formule. Pour tester une expression affectée à une variable, vous réécritez temporairement l’expression RETURN pour générer la variable.
La définition de mesure suivante retourne uniquement la variable SalesPriorYear. Remarquez comme elle commente l’expression RETURN prévue. Cette technique vous permet de le rétablir facilement une fois votre débogage terminé.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
--DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
SalesPriorYear
Réduire la complexité
Dans les versions antérieures de DAX, les variables n’ont pas encore été prises en charge. Les expressions complexes qui ont introduit de nouveaux contextes de filtre ont été nécessaires pour utiliser les fonctions EARLIER ou EARLIESTDAX pour référencer des contextes de filtre externe. Malheureusement, les modélisateurs de données ont trouvé ces fonctions difficiles à comprendre et à utiliser.
Les variables sont toujours évaluées en dehors des filtres que votre expression RETURN applique. Pour cette raison, lorsque vous utilisez une variable dans un contexte de filtre modifié, elle obtient le même résultat que la fonction EARLIEST. L’utilisation des fonctions EARLIER ou EARLIEST peut donc être évitée. Cela signifie que vous pouvez désormais écrire des formules moins complexes et plus faciles à comprendre.
Considérez la définition de colonne calculée suivante ajoutée à la table sous-catégorie
Subcategory Sales Rank =
COUNTROWS(
FILTER(
Subcategory,
EARLIER(Subcategory[Subcategory Sales]) < Subcategory[Subcategory Sales]
)
) + 1
La fonction EARLIER est utilisée pour faire référence à la valeur de la colonne Subcategory Salesdans le contexte de ligne actuel.
La définition de colonne calculée peut être améliorée à l’aide d’une variable au lieu de la fonction EARLIER. La variable CurrentSubcategorySales stocke la valeur de la colonne Subcategory Salesdans le contexte de la ligne actuelle, et l’expression RETURN l’utilise dans un contexte de filtre modifié.
Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
COUNTROWS(
FILTER(
Subcategory,
CurrentSubcategorySales < Subcategory[Subcategory Sales]
)
) + 1
Contenu connexe
- Article VARDAX
- Parcours d’apprentissage Utiliser DAX dans Power BI Desktop
- Questions ? Essayez de demander à la communauté Power BI