Fonction CALCULATE#

👥 Créée par

Ⓜ Manuella

📅 Date de création

@ 12 novembre 2022

⌗ Difficulté

2

⎊ Etiquette

DAX

Convention d’écriture formules DAX :
  • Utiliser des variables pour capter des valeurs

  • Jouer avec les sauts à la ligne pour éclaircir les formules DAX

  • Alignement des parenthèse d’ouverture et de fermeture de la formule

  • Séparateur à la fin du premier paramètre

  • Créer des mesures explicites

CALCULATE : (Ajouter, remplacer, supprimer le filtre)
  • Remplacement du contexte implicite par le contexte explicite (sur les lignes de détail)

  • Ajouter un niveau de filtrage (sur le total)

sec. abr.

_Volume

_Volume NOU

AGR

29853270

56266544

ENE

29176678

56266544

HAB

28573818

56266544

IND

9449204

56266544

NOU

56266544

56266544

SAN

29019333

56266544

SER

9417725

56266544

TÉL

30000132

56266544

TOTAL

221756704

56266544

  • Supprimer tous les filtres

1_Volume total = CALCULATE(
2                [_Volume],
3                ALL(secteurs[sec. abr.])
4         )

sec. abr.

_Volume

_Volume NOU

AGR

29853270

56266544

ENE

29176678

56266544

HAB

28573818

56266544

IND

9449204

56266544

NOU

56266544

56266544

SAN

29019333

56266544

SER

9417725

56266544

TÉL

30000132

56266544

TOTAL

221756704

56266544

  • CALCULATE + ALL + VALUES (À enlever tous les filtres et à remettre celui mentionné dans Values)

1_Vol Filter only Année T = CALCULATE(
2      [_Volume],
3      ALL('mouvements2014-2017'),
4      VALUES(datum[Année Trimestre])
5)
  • CALCULATE + KEEPFILTER (ajouter un filtre aux filtres existants)

Cela permet d’appliquer des calcul uniquement à une partie de notre jeu de donnée.

1#02 keepfilter =
2CALCULATE(
3   [_volume],
4   KEEPFILTERS(
5      secteurs[sec. abr.] IN {"NOU", "ENE", "SAN"}
6   )
7)
1KeepFilter = CALCULATE(
2      [_Volume]
3      ,KEEPFILTERS(TREATAS({"NOU","SAN","ENE"},secteurs[sec. abr.]))
4)
  • CALCULATE + ALL SELECTED : enlève tous les filtres du visuel, mais pas ceux des segments (filtre externe)

A utiliser pour calculer des ratios et que le total reste toujours à 100% même lorsqu’on sélectionne un filtre.

1#03 allselected (ratio) =
2DIVIDE(
3   [_volume]
4   ,CALCULATE(
5      [_volume]
6      ,ALLSELECTED('mouvements2014-2017')
7   )
8)
../../../../_images/03allselected.png
  • CALCULATE + USERFILTER (Utiliser une relation inactive le temps du calcul)

1#04 userelationship =
2CALCULATE(
3  [_volume]
4  ,USERRELATIONSHIP(
5    datum[date]
6    ,'mouvements2014-2017'[date achat]
7  )
8)
  • Exemples cas d’application de la fonction CALCULATE

    • Calculer un classement comparatif par rapport à l’année N-1

     1#05 palmarès A-1 =
     2VAR anneeprecedente = FORMAT(SELECTEDVALUE(datum[Annee]) -1, "#")
     3RETURN
     4IF(
     5    [_volume] > 0
     6    , RANKX(
     7        ALL(secteurs[sec. abr.]) ,
     8        CALCULATE(
     9            [_volume] ,
    10            datum[Annee] = anneeprecedente
    11        )
    12    )
    13)
    
    • Calculer la contribution : (ratio absolu par rapport au total)

       1#06 ratio secteur / total =
       2-- filtrer la colonne (+ contraignant) ou la table (+ souple)
       3VAR total01 =
       4CALCULATE(
       5    [_volume]
       6    ,ALL(secteurs[secteur])
       7)
       8VAR total02 =
       9CALCULATE(
      10  [_volume]
      11  , ALL(secteurs)
      12)
      13RETURN
      14DIVIDE(
      15  [_volume]
      16  , total02
      17)
      

    Tip

    En utilisant la fonction ALL à la place de ALLSELECTED, ça permet d’appliquer les filtres segments.

    • Calculer un pareto: (pourcentage cumulé par secteur)

       1#07 pourcentage cumulé par secteur =
       2VAR CeMontant = [_volume]
       3VAR MontantTotal =
       4CALCULATE(
       5    [_volume] ,
       6    ALL(secteurs [sec. abr.])
       7)
       8RETURN
       9CALCULATE(
      10    [_volume] ,
      11    FILTER(
      12        ALL(secteurs[sec. abr.]) ,
      13        [_volume] >= CeMontant
      14    )
      15) / MontantTotal
      

      Warning

      Les catégories dans un Pareto doivent être classées par ordre décroissant (le volume par exemple).

      ../../../../_images/pareto.png
    • Delta année précédente (volume N - volume N-1):

       1delta année précédente =
       2VAR anneeprecedente = FORMAT(SELECTEDVALUE(datum[année]) -1, "#")
       3RETURN
       4IF(
       5    ISINSCOPE(secteurs[secteur])
       6    , [_vol]
       7    - CALCULATE(
       8        [_vol] ,
       9        datum[année] = anneeprecedente
      10      )
      11)
      

    Note

    ISINSCOPE permet de garder uniquement les valeurs dont la ligne correspond à un secteur.