DAX – SUMX() 2


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 *

2 commentaires sur “DAX – SUMX()

  • ALAIN MANTE

    Et si on veut simplement additionner par ligne ? Je veux que ma colonne GF totalise par ligne le contenu de la colonne G + celui de la colonne F . J’écris (SecRVGFLL est le nom de ma table) GF=SUMX(SecRVGFLL;[G]+[F], et apparait le même total de toutes les lignes des 2 colonnes, à chaque ligne de GF. Comment modifier cette syntaxe pour avoir simplement le total par ligne ?

    • jeanjacqueslemenn Auteur de l’article

      Bonjour,

      Votre formule est bonne, mais votre rapport doit manquer de détails.

      Si vous voulez additionner par ligne, il y a deux solutions :
      1) Vous allez dans la table et créez une nouvelle colonne calculée, que vous nommerez par exemple GF, avec pour formule
      GF = ecRVGFLL[G]+ecRVGFLL[F]
      2) Vous créez une mesure que vous nommerez GF avec pour formule GF= sumx(ecRVGFLL;[F]+[G])
      Puis vous créez un rapport contenant votre mesure et une colonne de table ou un ensemble de table permettant de faire apparaître toutes les lignes (par exemple une colonne numéro de ligne, ou colonne date + colonne libellé +….)