Présentation du modèle
Il s’agit du suivi des demandes dans une bibliothèque universitaire, autour de trois auteurs. Je pars d’un fichier Excel, mais le même scénario aurait pu être développé sur une base de données :
Ce fichier va me permettre d’illustrer différentes situations, pourtant très ressemblantes (le même filtre est appliqué à chaque fois : un nombre de demandes supérieur à 40 ), mais affichant des résultats totalement différents :
Je précise ici que j’utilise une mesure explicite (_nb de demandes) conformément à la mise en place d’un modèle de données solide :
_nb de demandes = SUM(Feuil1[nb de demandes])
Le résultat est exactement le même si l’on utilise dans les tableaux la colonne elle-même et donc la mesure implicite que génère Power BI.
Comment fonctionnent les filtres
Commençons par le premier tableau. Le voici sans filtre :
Dans le Volet Filtres, je configure le filtre _nb de demandes > 40 :
Cela peut paraître évident, mais il y a là une règle importante à retenir : le filtre ne s’applique pas au niveau de la table source (où aucune ligne quotidienne n’est supérieure à 40), mais au niveau de détail du visuel dans lequel est affichée la donnée (ici, mois et auteur).
Je vais utiliser exactement les mêmes données pour construire cette fois un tableau croisé (matrice), sans filtre :
Et j’ajoute le même filtre _nb de demandes > 40 :
Le résultat n’a plus rien à voir (299 au lieu de 102 sur le premier tableau) !
Le filtre s’applique en effet cette fois sur le total de la ligne (total mensuel).
Il suffit d’inverser les colonnes et les lignes pour s’en convaincre :
Cette fois-ci, le filtre (pourtant présent) n’a aucun effet, puisque chaque auteur totalise plus de 40 demandes.
Notez au passage que même si j’enlève le total au niveau ligne (et que je conserve le filtre), le résultat ne varie pas :
Et pour compliquer encore les choses, si maintenant je créé une matrice avec exploration, le résultat ne porte plus sur les données visibles, mais sur le niveau de détail du tableau (comme dans le tableau simple) :
Enfin pour terminer, si vous appliquez le filtre au niveau de la page, et non plus au niveau du visuel, c’est au niveau de la table source qu’il s’applique (vous ne pouvez pas utiliser la mesure, mais uniquement la colonne). Dans ce cas, l’ensemble des tableaux vus jusque là ne sont pas filtrés.
CALCULATE et le filtre
Plutôt que d’appliquer le filtre sur le visuel, je vais maintenant l’intégrer dans une mesure :
Ici, l’utilisation de CALCULATE impose de faire référence à la colonne elle-même (ligne 4).
Une fois la mesure ajoutée à un tableau, qu’il soit simple ou croisé, voici le résultat :
Vide ! En effet, cette fois, aucune ligne de la table source n’est supérieure à 40. L’utilisation de CALCULATE implique que le filtre porte bien sur la table source.
Conclusion
Dans tous les exemples que nous avons pris, l’exigence fonctionnelle était la même : filtrer pour ne retenir que les cas où le nombre de demandes est supérieur à 40. Mais le niveau où le filtre est placé (sur le visuel, sur la page, ou dans un CALCULATE), et le type de visuel utilisé, déterminent l’impact du filtre, et modifient considérablement le résultat. La distinction majeure repose sur la construction du filtre : porte-t-il sur la colonne non agrégée de la table source (comme dans le CALCULATE ou le filtre de page) ou sur sa version agrégée de manière implicite ou explicite (la mesure _nb de demandes dans notre exemple).