ALL dans Power BI : ignorer les filtres et calculer un pourcentage du total
ALL est la fonction de filtre la plus mal comprise du langage DAX. Elle ne calcule rien : elle supprime des filtres pour permettre à une autre fonction d'effectuer le calcul. Placée au mauvais endroit, elle peut même ne supprimer aucun filtre.
Cet article démontre son comportement sur un jeu de données fictif, valeur par valeur.
Télécharger l'exercice ALL en DAX
Le pack contient 90 lignes de ventes réparties sur six produits et trois catégories. Vous y trouverez cinq exercices avec validation automatique, leur corrigé détaillé et les mesures DAX prêtes à coller.
Les données sont entièrement fictives. Elles ne décrivent aucune entreprise réelle.
Un exemple simple pour comprendre ALL
Prenons une table de cinq lignes. Chaque ligne porte un produit, sa catégorie et un chiffre d'affaires.
Produit | Catégorie | CA |
Clavier | Périphériques | 12 000 € |
Souris | Périphériques | 8 000 € |
Casque | Périphériques | 20 000 € |
Écran 24 pouces | Écrans | 25 000 € |
Écran 27 pouces | Écrans | 35 000 € |
La somme complète vaut 100 000 €. Les Écrans pèsent 60 000 €, les Périphériques 40 000 €. Voici la mesure qui calcule la part de chaque catégorie.
% du total =
DIVIDE (
SUM ( Ventes[CA] ),
CALCULATE ( SUM ( Ventes[CA] ), ALL ( Produits[Catégorie] ) )
)Plaçons-nous sur la ligne Écrans du visuel. Vérifions le calcul ligne par ligne.
Produit | Catégorie | CA | Retenu au numérateur ? | Retenu au dénominateur ? |
Clavier | Périphériques | 12 000 € | ✗ | ✓ |
Souris | Périphériques | 8 000 € | ✗ | ✓ |
Casque | Périphériques | 20 000 € | ✗ | ✓ |
Écran 24 pouces | Écrans | 25 000 € | ✓ | ✓ |
Écran 27 pouces | Écrans | 35 000 € | ✓ | ✓ |
Total | 60 000 € | 100 000 € |
Le numérateur vaut 60 000 €, le dénominateur 100 000 €. La part affichée est donc de 60 %.
ALL n'a rien additionné. Il a seulement retiré le filtre de catégorie du dénominateur.
Syntaxe
ALL ( [<table> | <colonne> [, <colonne> [, …]]] )
L'argument doit être une table de base ou une colonne de base. Une expression de table est refusée.
ALL joue en réalité deux rôles distincts. Employée dans CALCULATE, elle supprime des filtres. Employée seule, elle renvoie une table.
Les trois écritures de ALL
Le périmètre supprimé dépend entièrement de l'argument passé.
Écriture | Ce qu'elle supprime |
ALL ( Produits ) | Tous les filtres de la table Produits, colonne par colonne |
ALL ( Produits[Catégorie] ) | Le seul filtre posé sur la colonne Catégorie |
ALL ( Produits[Catégorie], Produits[Produit] ) | Les filtres de ces deux colonnes, qui doivent venir de la même table |
ALL ( ) | Tous les filtres du modèle, uniquement à l'intérieur de CALCULATE |

Calculer un pourcentage du total avec ALL
Le pourcentage du total reste le cas d'usage numéro un de la fonction.
La mesure, pas à pas
Le numérateur reste soumis au contexte du visuel. Le dénominateur doit l'ignorer. C'est exactement le travail de ALL.
% du total catégorie =
VAR CaLigne = [CA total]
VAR CaGeneral = CALCULATE ( [CA total], ALL ( Produits[Catégorie] ) )
RETURN
DIVIDE ( CaLigne, CaGeneral )Les variables ne changent pas le résultat. Elles rendent la mesure lisible et plus facile à déboguer. La fonction DIVIDE protège le calcul quand le dénominateur vaut zéro.
La ligne de total affiche 100 %
Le total du visuel n'échappe pas à la règle. À ce niveau, aucun filtre de catégorie n'est actif. Le numérateur vaut alors 100 000 €, comme le dénominateur.
La ligne de total affiche donc 100 %. Ce comportement est normal. Il surprend pourtant beaucoup de lecteurs de rapports.
Le piège du schéma en étoile
Voici l'erreur qui coûte le plus de temps en formation. Le modèle est en étoile. La catégorie vit dans la table Produits, les montants dans la table Ventes.
Beaucoup de mesures fausses ressemblent à celle-ci.
% faux =
DIVIDE (
[CA total],
CALCULATE ( [CA total], ALL ( Ventes ) )
)
Pourquoi ALL ( Ventes ) ne supprime rien
ALL ( Ventes ) retire bien les filtres posés sur les colonnes de Ventes. Or le filtre du visuel porte sur Produits[Catégorie]. Il reste actif, puis traverse la relation.
Le dénominateur retombe donc sur les seules ventes d'écrans. Il vaut 60 000 €, comme le numérateur. Chaque ligne affiche 100 %.
La correction
Ciblez la table qui porte réellement le filtre.
% du total =
DIVIDE (
[CA total],
CALCULATE ( [CA total], ALL ( Produits[Catégorie] ) )
)La règle tient en une phrase. ALL doit désigner la colonne affichée dans le visuel, pas la table de faits.
Retenez bien
Un visuel qui affiche 100 % sur toutes ses lignes révèle souvent la même erreur : ALL a été appliqué sur la table de faits alors que le filtre provient d'une table de dimension.
ALL ou REMOVEFILTERS : lequel écrire ?
Microsoft a introduit REMOVEFILTERS en 2019. Sa documentation recommande cette fonction dès qu'il s'agit seulement de supprimer des filtres.
Les deux écritures donnent le même résultat dans CALCULATE. La différence se joue ailleurs.
Fonction | Supprime des filtres | Renvoie une table |
ALL | Oui | Oui |
REMOVEFILTERS | Oui | Non |
REMOVEFILTERS ne sert que de modificateur. Elle ne peut pas alimenter un itérateur ni une fonction de classement.
Classement produit =
RANKX (
ALL ( Produits[Produit] ),
[CA total],
,
DESC,
DENSE
)Ici, ALL fournit la liste des produits à classer. REMOVEFILTERS provoquerait une erreur à cet emplacement.
Adoptez une convention d'écriture. REMOVEFILTERS quand vous supprimez, ALL quand vous renvoyez une table. L'intention devient lisible dès la relecture.
ALL, ALLEXCEPT et ALLSELECTED : ne pas confondre
Quatre fonctions se partagent le travail de suppression. Elles ne répondent pas au même besoin.
Fonction | Ce qu'elle fait | Cas d'usage typique |
ALL | Supprime les filtres visés et renvoie une table | Pourcentage du total général |
REMOVEFILTERS | Supprime les filtres visés, sans renvoyer de table | La même chose, en plus lisible |
ALLEXCEPT | Supprime tous les filtres d'une table, sauf ceux des colonnes citées | Pourcentage à l'intérieur d'une catégorie |
ALLSELECTED | Ignore les filtres du visuel, garde la sélection de l'utilisateur | Pourcentage du total affiché |
La nuance ALLSELECTED mérite un exemple. Un segment limite le rapport à deux catégories sur trois.
Avec ALL, le dénominateur reste le total des trois catégories. Avec ALLSELECTED, il vaut le total des deux catégories retenues.
Le second comportement correspond presque toujours à l'attente du lecteur.
Les pièges de ALL en production
L'effet auto-exist
Un cas documenté par Microsoft mérite l'attention. Filtrez deux colonnes de la même table avec deux segments. Ajoutez une mesure de cette table qui utilise ALL.
Le moteur fusionne alors les deux filtres. Il ne conserve que les combinaisons de valeurs qui existent réellement. Le calcul porte sur des données filtrées, et non sur toutes les données.
Ce mécanisme d'optimisation s'appelle auto-exist. Il reste rare. Il rend surtout le diagnostic très difficile, car la mesure ne lève aucune erreur.
Les limites à connaître
L'argument doit être une table de base ou une colonne de base. Une expression est refusée.
Les colonnes passées à ALL doivent toutes appartenir à la même table.
ALL sans argument ne fonctionne que comme modificateur de CALCULATE.
ALL est refusée en mode DirectQuery, dans une colonne calculée ou une règle de sécurité au niveau des lignes.
La documentation Microsoft confirme ces quatre limites.
En résumé
ALL supprime les filtres que vous lui désignez, et rien d'autre. Le reste du contexte continue de s'appliquer.
Visez toujours la colonne affichée dans le visuel. Écrivez REMOVEFILTERS quand vous supprimez, ALL quand vous avez besoin d'une table.



