Power Bi- DAX : Combat de filtres : HASONEFILTER vs HASONEVALUE vs ISFILTERED vs ISCROSSFILTERED
On va expliquer avec des exemples la différence entre 4 mesures : HASONEEFILTER, HASONEVALUE, ISFILTERED et ISCROSSFILTERED. Avant de citer cette différence on va les introduire un par un :
- HASONEFILTER : Renvoie True lorsque la table ou la colonne spécifiée a une et une seule valeur résultant d’un ou de plusieurs filtres directs.
Syntaxe :
C’est l’équivalent de COUNTROWS(FILTERS(<ColumnName>))
=
1
- HASONEVALUE : Renvoie True lorsqu’il n’y a qu’une seule valeur dans la colonne spécifiée.
Syntaxe :
C’est l’équivalent de COUNTROWS(VALUES(<ColumnName>))
=
1
- ISFILTERED : Renvoie True lorsqu’il y a des filtres directs sur la colonne spécifiée.
Syntaxe :
- ISCROSSFILTERED : Renvoie True lorsque le nom de la colonne ou une autre colonne de la même table ou d’une table associée est filtrée.
Syntaxe :
Vous touvez ci-dessous le Dashboard utilisé dans cette démo :
Sans aucun filtre extérieure appliqué, la table affiche True pour toutes les lignes par contre un False dans le total pour les 4 mesures, c’est quoi le problème ?
Sans oublié que chaque ligne de la tables est un filtre vue que la table n’affiche que les valeurs uniques pour chaque ligne, c’est pourquoi on a True dans toute les colonnes de la table. La table est considéré comme un filtre direct pour chaque enregistrement, mais pour le grand total on n’a aucune valeur comme filtre c’est pourquoi on a un False pour chaque mesure.
C’est quoi la différence entre "Direct" et "Indirect" ?
Le Dashboard ci-dessus contient une table qui contient "le nom de l’entreprise" et deux filtres un pour le "pays" et l’autre pour "le nom de l’entreprise".
Le nom de l’entreprise est un filtre direct pour la table parce cette information est présente dans la table par contre le pays est considéré comme indirect.
Et pour "One" et "Many" ?
"One" est dite si on a un seul enregistrement dans la table par contre "Many" est utilisé lorsqu'on a plusieurs , l’exemple ci-dessous est un exemple de cas de One :
On passe aux exemples qui illustrent l’utilisation de ces mesures.
Cas 1: Les 4 mesures supportent One et Direct :
Cas 2 : Seulement ISFILTERED et ISCROSSFILTERED supportent Many et Direct :
Cas 3 : Seulement HASONEVALUE et ISCROSSFILTERED supportent Indirect :
Cas 4 : Seulement ISCROSSFILTERED support Many et Indirect :
La table ci-dessous résume les cas expliqués :
Vous trouvez ci-dessous la data utilisé pour la démo : https://services.odata.org/Northwind/Northwind.svc/ .Vous pouvez coller le lien dans votre Power bi :