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 l'attestation finale.
8 000 XOF / 12,20 € / 13,29 $
Débloquez les 97 leçons restantes de ce module
Pour vous communiquer où envoyer le paiement.
Moyen de paiement souhaité
Nous vous contactons pour le paiement — activé dès réception.