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)

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