Examiner le contexte de filtre

Effectué

La fonction DAX VALUES permet à vos formules de déterminer les valeurs qui sont dans le contexte de filtre.

La syntaxe de la fonction VALUES est la suivante :

VALUES(<TableNameOrColumnName>)

La fonction requiert la transmission d’une référence de table ou d’une référence de colonne. Lorsque vous transmettez une référence de table, elle retourne un objet table avec les mêmes colonnes qui contiennent des lignes pour ce qui se trouve dans le contexte de filtre. Lorsque vous transmettez une référence de colonne, elle retourne une table à une seule colonne de valeurs uniques qui sont dans le contexte de filtre.

La fonction retourne toujours un objet table et il est possible qu’une table contienne plusieurs lignes. Ainsi, pour tester si une valeur spécifique est dans le contexte de filtre, votre formule doit d’abord vérifier que la fonction VALUES retourne une seule ligne. Deux fonctions peuvent vous aider à accomplir cette tâche : les fonctions DAX HASONEVALUE et SELECTEDVALUE.

La fonction HASONEVALUE retourne la valeur TRUE quand une référence de colonne donnée a été filtrée sur une valeur unique.

La fonction SELECTEDVALUE simplifie la tâche consistant à déterminer la nature d’une valeur unique. Lorsque la fonction reçoit une référence de colonne, elle retourne une valeur unique, ou lorsque plusieurs valeurs sont dans le contexte de filtre, elle retourne une valeur vide (ou une autre valeur que vous transmettez à la fonction).

Dans l’exemple suivant, vous allez utiliser la fonction HASONEVALUE. Ajoutez la mesure suivante, qui calcule la commission sur les ventes à la table Sales. Notez que, à Adventure Works, le taux de commission s’élève à 10 % du chiffre d’affaires pour tous les pays et régions, à l’exception des États-Unis. Aux États-Unis, les vendeurs gagnent 15 % sous forme de commission. Mettez en forme la mesure en tant que devise avec deux décimales, puis ajoutez-la à la table qui se trouve sur la Page 3 du rapport.

Sales Commission =
[Revenue]
    * IF(
        HASONEVALUE('Sales Territory'[Country]),
        IF(
            VALUES('Sales Territory'[Country]) = "United States",
            0.15,
            0.1
        )
    )

Notez que le résultat Sales Commission total est vide. Cela est dû au fait que plusieurs valeurs se trouvent dans le contexte de filtre pour la colonne Country dans la table Sales Territory. Dans ce cas, la fonction HASONEVALUE retourne la valeur FALSE, ce qui a pour effet de multiplier la mesure Revenue par vide (une valeur multipliée par vide est vide). Pour générer un total, vous devrez utiliser une fonction d’itérateur, ce qui est expliqué plus loin dans ce module.

Trois autres fonctions que vous pouvez utiliser pour tester l’état du filtre sont les suivantes :

  • ISFILTERED : retourne TRUE quand une référence de colonne passée est directement filtrée.
  • ISCROSSFILTERED : retourne TRUE quand une référence de colonne passée est indirectement filtrée. Une colonne est dite colonne de filtrage croisé lorsqu'un filtre est appliqué à une autre colonne de la même table ou d'une table associée, et qu'il affecte la colonne de référence en la filtrant également.
  • ISINSCOPE : retourne TRUE quand une référence de colonne passée est le niveau dans une hiérarchie de niveaux.

Revenez à la Page 2 du rapport, puis modifiez la définition de la mesure Revenue % Total Country pour vérifier que la colonne Region de la table Sales Territory est dans l’étendue. Si elle n’est pas dans la portée, le résultat de la mesure doit être vide.

Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS('Sales Territory'[Region])
    )
RETURN
    IF(
        ISINSCOPE('Sales Territory'[Region]),
        DIVIDE(
            CurrentRegionRevenue,
            TotalCountryRevenue
        )
    )

Dans le visuel matrice, vous remarquerez que les valeurs Revenue % Total Country ne sont désormais affichées que lorsqu’une région est dans l’étendue.