Leçon 7 / 10 — Chapitre 7: DAX : CALCULATE et le contexte de filtre
Agrégations conditionnelles
Compter ou sommer « seulement quand une condition est vraie » se fait de deux façons équivalentes en résultat :
Avec CALCULATE (filtre le contexte) :
[Jours d'absence] = CALCULATE( COUNTROWS(Pointages), Pointages[Statut] = "Absent" )
Avec un itérateur et IF (teste ligne par ligne) :
SUMX( Pointages, IF( Pointages[Statut] = "Absent", 1, 0 ) )
Les deux donnent le même nombre. CALCULATE est généralement plus lisible et plus rapide quand la condition est un simple test d'égalité sur une colonne.
Prévoir un résultat. Table Pointages (contexte : un service, un mois) :
Statut
Présent
Absent
Présent
Congé
Absent
[Jours pointés]=COUNTROWS(Pointages)= 5[Jours d'absence]=CALCULATE( COUNTROWS(Pointages), Pointages[Statut]="Absent" )= 2[Taux d'absence]=DIVIDE(2, 5)= 0,4 → 40 %
Piège : SUM( IF(...) ) sans X ne fonctionne pas comme espéré — SUM attend une colonne, pas une expression ligne à ligne. Il faut SUMX.
À retenir
- Agrégation conditionnelle :
CALCULATE( agrégat, condition )ouSUMX( table, IF(condition, x, 0) ). - Même résultat ;
CALCULATEest plus lisible pour un test d'égalité simple. SUM(IF(...))ne marche pas : il faut l'itérateurSUMX.
À vous de jouer : sur la table Pointages ci-dessus (Présent, Absent, Présent, Congé, Absent), que renvoie CALCULATE( COUNTROWS(Pointages), Pointages[Statut] = "Absent" ) ?
Continuez ce module
Débloquez les leçons restantes ainsi que la certification finale.
2 500 XOF / 3,81 € / 4,15 $
Débloquez les 90 leçons restantes de ce module
Votre paiement est vérifié avant l'activation de l'accès