COUNTAX : compter les résultats non vides d’une expression en DAX
Compter les lignes qui répondent à une condition, ou celles dont un champ est renseigné. Avec le piège des chaînes vides, qui comptent comme des valeurs.
COUNTAX parcourt une table ligne par ligne, évalue une expression sur chacune et compte les lignes dont le résultat n’est pas vide. Elle fonctionne comme COUNTA, mais sur une expression calculée au lieu d’une simple colonne.
En gestion, elle répond à des questions du type « combien de commandes ont bénéficié d’une remise » ou « combien de produits actifs ont un fournisseur renseigné ». Elle sert aussi à mesurer la qualité d’une donnée : le nombre de lignes où un champ obligatoire est bien rempli.
Une table, une expression
COUNTAX(<table>, <expression>)
| Paramètre | Rôle |
|---|---|
table | La table dont les lignes sont parcourues. Ce peut être une table filtrée par FILTER. |
expression | L’expression évaluée pour chaque ligne. La ligne est comptée si le résultat n’est pas vide. |
La fonction renvoie un nombre entier. Quand elle ne trouve aucune ligne à agréger, elle renvoie un vide, pas zéro. Elle n’est pas prise en charge en mode DirectQuery dans les colonnes calculées et les règles RLS.
Trois comptages sur un modèle de ventes
Le modèle compte une table Ventes (Date, Montant, Remise, Commentaire) reliée à Produits (Produit, Catégorie, Statut, Fournisseur) et à Calendrier.
Compter les lignes renseignées
Ventes commentées =
COUNTAX(Ventes, Ventes[Commentaire])
La mesure compte les lignes de ventes dont le commentaire n’est pas vide, dans le contexte du visuel : par mois, par catégorie, par vendeur.
Compter les lignes qui remplissent une condition
Ventes remisées =
COUNTAX(Ventes, IF(Ventes[Remise] > 0, 1))
Le IF sans troisième argument renvoie un vide quand la condition est fausse. Seules les lignes avec une remise produisent un résultat non vide, et ce sont elles que COUNTAX compte.
Compter sur une table filtrée
Produits actifs avec fournisseur =
COUNTAX(
FILTER(Produits, Produits[Statut] = "Actif"),
Produits[Fournisseur]
)
FILTER ne garde que les produits actifs, puis COUNTAX compte ceux dont le fournisseur est renseigné. Rapporté au nombre de produits actifs, c’est un indicateur simple de complétude du référentiel.
Les chaînes vides comptent comme des valeurs
La mesure Ventes commentées renvoie presque le nombre total de lignes, alors que la plupart des commentaires sont visiblement vides dans le fichier source. Le calcul n’est pas faux : ces cellules ne contiennent pas un vide, mais une chaîne de texte vide.
La documentation de l’éditeur le précise : une expression qui renvoie une chaîne vide est traitée comme non vide, et la ligne est comptée. C’est fréquent avec les exports qui écrivent "" au lieu de laisser la cellule nulle, ou avec une colonne calculée qui renvoie "" par défaut.
Deux parades. La plus propre se fait en amont, dans Power Query, en remplaçant les textes vides par null au chargement. La seconde se fait dans la mesure :
Ventes commentées =
COUNTAX(Ventes, IF(Ventes[Commentaire] <> "", 1))
En DAX, un vide est égal à une chaîne vide dans une comparaison : la condition écarte donc les deux cas d’un coup. Dernier réflexe : si le visuel doit afficher 0 plutôt qu’une case vide, ajoutez + 0 à la fin de la mesure.
Ce qu’on nous demande sur COUNTAX
Quelle différence entre COUNTAX et COUNTX ?
Les deux parcourent une table et comptent les résultats non vides d’une expression. Selon la documentation de l’éditeur, COUNTX ne compte que les nombres, les dates et les chaînes, et il faut passer par COUNTAX pour compter des valeurs logiques (vrai ou faux).
Quelle différence entre COUNTAX et COUNTA ?
COUNTA compte les valeurs non vides d’une seule colonne. COUNTAX évalue une expression ligne par ligne : elle permet donc de compter selon une condition ou sur une table filtrée, ce que COUNTA ne sait pas faire seule.
COUNTAX compte-t-elle les valeurs FAUX ?
Oui. Une valeur logique fausse n’est pas un vide. COUNTAX(Ventes, Ventes[Payée]) compte donc les lignes vraies et fausses. Pour ne compter que les ventes payées, écrivez COUNTAX(Ventes, IF(Ventes[Payée], 1)).
Pourquoi ma mesure affiche-t-elle une case vide au lieu de 0 ?
Parce que COUNTAX renvoie un vide quand elle ne trouve aucune ligne à agréger. Ajoutez + 0 à la mesure si le rapport doit afficher zéro.
Pour aller plus loin
ALL- Compter le nombre de lignes dans Power BI.
- Les fonctions texte de Power Query, pour nettoyer les chaînes vides en amont.
- Le DAX expliqué aux décideurs.
- La référence complète Power Query et DAX.
Vos comptages ne collent pas avec ce que vous voyez dans les données ?
Nous retrouvons d’où viennent les écarts, dans la mesure ou dans la préparation, et nous les corrigeons à la source.