DAX – SUMX()


Si vous programmez, vous êtes surement familiers du concept « d’itération ».

Pour les autres (c’est-à-dire l’écrasante majorité) il s’agit simplement d’une répétition programmée d’actions.

C’est ce que SUMX() (et tous les membres de sa famille) MINX(),MAXX() font : ils répètent une action ligne après ligne.

 

Anatomie de la fonction :

SUMX(<Table>, <Expression>)

 

Cela peut se lire de cette manière :

Va à la première ligne -> fait un calcul -> Mémorise le résultat -> va à la seconde ligne->

Fait le même calcul -> ajoute le résultat au résultat mémorisé -> etc.. jusqu’à la dernière ligne.

 

Pour illustrer le travail que réalise cette fonction, nous allons chercher à répondre à la question suivante : quelle est la valorisation totale du stock ?

 

Pour y répondre nous ne pouvons pas utiliser la fonction SUM()

SUM([qté])*SUM([Pu])

Car le résultat serait faux (ci-dessous l’équivalent du calcul dans Excel)

Nous devons effectuer le calcul à la ligne.

En tant qu’utilisateur d’Excel nous pensons immédiatement à rajouter une nouvelle colonne calculée à la table ‘Mouvements de Stock’.

L’équivalent dans Excel .

La somme de cette nouvelle colonne est égale à 110 000, ce qui est la bonne valeur.

 

Si le résultat est exact, la méthode n’est pas la bonne !

 

L’heure est enfin venue de vous présenter un des piliers de la puissance de DAX : les mesures.

 

La langage DAX permet de créer des calculs spécifiques réutilisables à volonté dans l’ensemble de vos tableaux croisés ou rapports.

 

Pour créer une nouvelle mesure, rien de plus simple : il vous suffit par exemple de sélectionner une table et de cliquer le bouton Nouvelle mesure.

Renseignez par exemple dans la barre de formule :

Total valo Stock = SUM(‘Mouvements de stock'[Valorisation])

 

Vous pouvez désormais accéder à cette mesure comme à n’importe quel autre champ de la table.

Mais mieux : Nous pouvons tout simplement nous passer de la colonne calculée.

Supprimons la tout d’abord, puis modifions la formule de notre mesure, cette fois ci en utilisant SUMX().

Le résultat est identique, tout en se passant de la création d’une colonne calculée, sans alourdir la base, sans ralentir les calculs.

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *