Utiliser les fonctions de modificateur de filtre

Effectué

Quand vous utilisez la fonction CALCULATE, vous pouvez passer des fonctions de modification de filtre, ce qui vous permet d’accomplir plus que l’ajout de filtres seul.

Supprimer des filtres

Utilisez la fonction DAX REMOVEFILTERS en tant qu’expression de filtre CALCULATE pour supprimer des filtres du contexte de filtre. Elle peut supprimer des filtres d’une ou plusieurs colonnes ou de toutes les colonnes d’une table unique.

Notes

La fonction REMOVEFILTERS est relativement nouvelle. Dans les versions précédentes de DAX, vous supprimiez des filtres à l’aide de la fonction DAX ALL ou de ses variantes, comme ALLEXCEPT et ALLNOBLANKROW. Ces fonctions se comportaient comme des modificateurs de filtre et comme des fonctions qui retournaient des objets de table de valeurs distinctes. Ces fonctions sont mentionnées maintenant, car il est probable que vous trouviez des documentations et exemples de formules qui suppriment les filtres avec ces fonctions.

Dans l’exemple suivant, vous allez ajouter à la table Sales une nouvelle mesure qui évalue la mesure Revenue, mais supprime les filtres de la table Sales Territory. Mettez en forme la mesure en tant que devise avec deux décimales.

Revenue Total Region = CALCULATE([Revenue], REMOVEFILTERS('Sales Territory'))

À présent, ajoutez la mesure Revenue Total Region au visuel matrice qui se trouve sur la Page 2 du rapport. Le visuel matrice regroupera trois colonnes de la table Sales Territory table sur les lignes : Group, Country et Region.

Notez que chaque valeur Revenue Total Region est identique. Il s’agit de la valeur du chiffre d’affaires total.

Même si ce résultat n’est pas utile, lorsqu’il est utilisé comme dénominateur dans un rapport, il calcule un pourcentage du total général. Par conséquent, vous allez maintenant remplacer la définition de la mesure Revenue Total Region par la définition suivante. (Cette nouvelle définition modifie le nom de la mesure et déclare deux variables. Veillez à mettre en forme la mesure sous forme de pourcentage avec deux décimales.)

Revenue % Total Region =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalRegionRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS('Sales Territory')
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalRegionRevenue
    )

Vérifiez que le visuel matrice affiche maintenant les valeurs Revenue % Total Region.

Vous allez maintenant créer une autre mesure, mais cette fois, vous allez calculer le rapport du chiffre d’affaires pour une région sur le chiffre d’affaires de son pays.

Avant d’effectuer cette tâche, remarquez que la valeur Revenue % Total Region de la région Southwest est de 22,95 %. Examinez le contexte de filtre pour cette cellule. Basculez vers la vue de données puis, dans le volet Champs, sélectionnez la table Sales Territory.

Appliquez les filtres de colonne suivants :

  • Group - North America
  • Country - United States
  • Region - Southwest

Notez que les filtres réduisent la table à une seule ligne. Maintenant, tout en pensant à votre nouvel objectif de créer un rapport du chiffre d’affaires de la région sur celui de son pays, effacez le filtre de la colonne Region.

Notez que cinq lignes existent maintenant, chaque ligne appartenant au pays États-Unis. En conséquence, lorsque vous désactivez les filtres de colonne Region, tout en conservant les filtres sur les colonnes Country et Group, vous aurez un nouveau contexte de filtre pour le pays de la région.

Dans la définition de mesure suivante, vous remarquerez comment vous pouvez effacer ou supprimer un filtre d’une colonne. Dans la logique DAX, il s’agit d’une modification minime et subtile apportée à la formule de la mesure Revenue % Total Region : La fonction REMOVEFILTERS supprime désormais les filtres de la colonne Region au lieu de toutes les colonnes de la table Sales Territory.

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

Ajoutez la mesure Revenue % Total Country à la table Sales et mettez-la en forme en tant que pourcentage avec deux décimales. Ajoutez la nouvelle mesure au visuel matrice.

Notez que toutes les valeurs, à l’exception de celles pour les régions des États-Unis, sont de 100 %. En effet, dans la société Adventure Works, les États-Unis ont des régions, alors que les autres pays non.

Notes

Les modèles tabulaires ne prennent pas en charge les hiérarchies irrégulières, qui sont des hiérarchies à profondeur variable. Par conséquent, il s’agit d’une approche de conception courante pour répéter les valeurs parent (ou autre ancêtre) à des niveaux inférieurs de la hiérarchie. Par exemple, l’Australie ne comportant pas de région, la valeur du pays est répétée comme nom de la région. Il est toujours préférable de stocker une valeur explicite au lieu de la laisser vide.

L’exemple suivant est la dernière mesure que vous allez créer. Ajoutez la mesure Revenue % Total Group et mettez-la en forme en tant que pourcentage avec deux décimales. Ajoutez ensuite la nouvelle mesure au visuel matrice.

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

Quand vous supprimez des filtres des colonnes Region et Country dans la table Sales Territory, la mesure calcule le chiffre d’affaires de la région en tant que rapport du chiffre d’affaires de son groupe.

Conserver les filtres

Vous pouvez utiliser la fonction DAX KEEPFILTERS en tant qu’expression de filtre dans la fonction CALCULATE pour conserver les filtres.

Pour observer comment accomplir cette tâche, consultez la Page 1 du rapport. Ensuite, modifiez la définition de mesure Revenue Red pour utiliser la fonction KEEPFILTERS.

Revenue Red =
CALCULATE(
    [Revenue],
    KEEPFILTERS('Product'[Color] = "Red")
)

Dans le visuel de table, notez qu’il n’existe qu’une seule valeur Revenue Red. En effet, l’expression de filtre booléenne conserve les filtres existants sur la colonne Color colonne dans la table Product. La raison pour laquelle les couleurs autres que le rouge sont vides est que les contextes de filtre et les expressions de filtre sont combinés pour ces deux filtres. La couleur noire et la couleur rouge sont intersectées, et étant donné que les deux ne peuvent pas avoir la valeur TRUE en même temps, l’expression n’est par aucune ligne de produit. Il est possible que les deux filtres rouges puissent être TRUE en même temps, ce qui explique pourquoi la valeur Revenue Red s’affiche.

Utiliser des relations inactives

Une relation de modèle inactive peut uniquement propager des filtres quand la fonction DAX USERELATIONSHIP est passée en tant qu’expression de filtre à la fonction CALCULATE. Lorsque vous utilisez cette fonction pour impliquer une relation inactive, la relation active devient automatiquement inactive.

Passez en revue un exemple de définition de mesure qui utilise une relation inactive pour calculer la mesure Revenue par date d’expédition :

Revenue Shipped =
CALCULATE (
    [Revenue],
    USERELATIONSHIP('Date'[DateKey], Sales[ShipDateKey])
)

Modifier le comportement de la relation

Vous pouvez modifier le comportement de la relation de modèle quand une expression est évaluée en transmettant la fonction DAX CROSSFILTER en tant qu’expression de filtre à la fonction CALCULATE. Il s’agit d’une fonctionnalité avancée.

La fonction CROSSFILTER peut modifier les directions de filtre (des deux à un seul ou d’un seul aux deux) et même désactiver une relation.