Cette section explique comment créer des filtres dans des formules DAX (Data Analysis Expressions). Vous pouvez créer des filtres dans des formules pour limiter les valeurs des données sources utilisées dans les calculs. Pour ce faire, spécifiez une table comme entrée de la formule, puis définissez une expression de filtre. L’expression de filtre que vous fournissez est utilisée pour interroger les données et retourner uniquement un sous-ensemble des données sources. Le filtre est appliqué dynamiquement chaque fois que vous mettez à jour les résultats de la formule, en fonction du contexte actuel de vos données.
Contenu de cet article
Création d’un filtre sur une table utilisé dans une formule
Vous pouvez appliquer des filtres dans des formules qui prennent une table comme entrée. Au lieu d’entrer un nom de table, vous utilisez la fonction FILTER pour définir un sous-ensemble de lignes de la table spécifiée. Ce sous-ensemble est ensuite passé à une autre fonction, pour les opérations telles que les agrégations personnalisées.
Par exemple, supposons que vous disposez d’une table de données qui contient des informations de commande sur les revendeurs et que vous souhaitez calculer le montant vendu par chaque revendeur. Toutefois, vous souhaitez afficher le montant des ventes uniquement pour les revendeurs qui ont vendu plusieurs unités de vos produits de valeur supérieure. La formule suivante, basée sur l’exemple de classeur DAX, montre un exemple de création de ce calcul à l’aide d’un filtre :
=SUMX(
FILTER ('ResellerSales_USD', 'ResellerSales_USD'[Quantity] > 5 && 'ResellerSales_USD'[ProductStandardCost_USD] > 100), 'ResellerSales_USD'[SalesAmt] )-
La première partie de la formule spécifie l’une des fonctions d’agrégation Power Pivot, qui prend une table comme argument. SUMX calcule une somme sur une table.
-
La deuxième partie de la formule, FILTER(table, expression),indique SUMX données à utiliser. SUMX nécessite une table ou une expression qui aboutit à une table. Ici, au lieu d’utiliser toutes les données d’une table, vous utilisez la fonction FILTER pour spécifier les lignes de la table qui sont utilisées.
L’expression de filtre comprend deux parties : la première partie nomme la table à laquelle le filtre s’applique. La deuxième partie définit une expression à utiliser comme condition de filtre. Dans ce cas, vous filtrez sur les revendeurs qui ont vendu plus de 5 unités et des produits dont le coût est supérieur à 100 $. L’opérateur, &&, est un opérateur AND logique, qui indique que les deux parties de la condition doivent être vraies pour que la ligne appartienne au sous-ensemble filtré.
-
La troisième partie de la formule indique à la fonction SUMX quelles valeurs doivent être additionnées. Dans ce cas, vous utilisez uniquement le montant des ventes.
Notez que les fonctions telles que FILTER, qui retournent une table, ne retournent jamais la table ou les lignes directement, mais sont toujours incorporées dans une autre fonction. Pour plus d’informations sur FILTER et d’autres fonctions utilisées pour le filtrage, y compris d’autres exemples, consultez Fonctions de filtre (DAX).
Remarque : L’expression de filtre est affectée par le contexte dans lequel elle est utilisée. Par exemple, si vous utilisez un filtre dans une mesure et que la mesure est utilisée dans un tableau croisé dynamique ou un graphique croisé dynamique, le sous-ensemble de données retournées peut être affecté par des filtres ou des segments supplémentaires que l’utilisateur a appliqués dans le tableau croisé dynamique. Pour plus d’informations sur le contexte, consultez Contexte dans les formules DAX.
Filtres qui suppriment les doublons
En plus du filtrage pour des valeurs spécifiques, vous pouvez retourner un ensemble unique de valeurs à partir d’une autre table ou colonne. Cela peut être utile lorsque vous souhaitez compter le nombre de valeurs uniques dans une colonne ou utiliser une liste de valeurs uniques pour d’autres opérations. DAX fournit deux fonctions pour retourner des valeurs distinctes : DISTINCT Function et VALUES Function.
-
La fonction DISTINCT examine une seule colonne que vous spécifiez comme argument de la fonction et retourne une nouvelle colonne contenant uniquement les valeurs distinctes.
-
La fonction VALUES retourne également une liste de valeurs uniques, mais renvoie également le membre Unknown. Cela est utile lorsque vous utilisez des valeurs de deux tables qui sont jointes par une relation, et qu’une valeur est manquante dans une table et présente dans l’autre. Pour plus d’informations sur le membre Inconnu, consultez Contexte dans les formules DAX.
Ces deux fonctions retournent une colonne entière de valeurs ; Par conséquent, vous utilisez les fonctions pour obtenir une liste de valeurs qui est ensuite passée à une autre fonction. Par exemple, vous pouvez utiliser la formule suivante pour obtenir la liste des produits distincts vendus par un revendeur particulier, à l’aide de la clé de produit unique, puis compter les produits de cette liste à l’aide de la fonction COUNTROWS :
=COUNTROWS(DISTINCT('ResellerSales_USD'[ProductKey]))
Comment le contexte affecte les filtres
Lorsque vous ajoutez une formule DAX à un tableau croisé dynamique ou à un graphique croisé dynamique, les résultats de la formule peuvent être affectés par le contexte. Si vous travaillez dans une table Power Pivot, le contexte est la ligne actuelle et ses valeurs. Si vous travaillez dans un tableau croisé dynamique ou un graphique croisé dynamique, le contexte désigne l’ensemble ou le sous-ensemble de données qui est défini par des opérations telles que le découpage ou le filtrage. La conception du tableau croisé dynamique ou du graphique croisé dynamique impose également son propre contexte. Par exemple, si vous créez un tableau croisé dynamique qui regroupe les ventes par région et par année, seules les données qui s’appliquent à ces régions et années apparaissent dans le tableau croisé dynamique. Par conséquent, toutes les mesures que vous ajoutez au tableau croisé dynamique sont calculées dans le contexte des en-têtes de colonne et de ligne, ainsi que des filtres dans la formule de mesure.
Pour plus d’informations, consultez Contexte dans les formules DAX.
Suppression de filtres
Lorsque vous utilisez des formules complexes, vous souhaiterez peut-être savoir exactement quels sont les filtres actuels ou modifier la partie filtre de la formule. DAX fournit plusieurs fonctions qui vous permettent de supprimer des filtres et de contrôler les colonnes qui sont conservées dans le cadre du contexte de filtre actuel. Cette section fournit une vue d’ensemble de la façon dont ces fonctions affectent les résultats dans une formule.
Remplacement de tous les filtres par la fonction ALL
Vous pouvez utiliser la fonction ALL pour remplacer tous les filtres précédemment appliqués et retourner toutes les lignes de la table à la fonction qui effectue l’agrégation ou une autre opération. Si vous utilisez une ou plusieurs colonnes, au lieu d’une table, comme arguments pour ALL, la fonction ALL retourne toutes les lignes, en ignorant les filtres de contexte.
Remarque : Si vous êtes familiarisé avec la terminologie des bases de données relationnelles, vous pouvez considérer ALL comme générant la jointure externe gauche naturelle de toutes les tables.
Par exemple, supposons que vous disposez des tables Sales et Products et que vous souhaitez créer une formule qui calcule la somme des ventes pour le produit actuel divisée par les ventes de tous les produits. Vous devez prendre en considération le fait que, si la formule est utilisée dans une mesure, l’utilisateur du tableau croisé dynamique peut utiliser un segment pour filtrer un produit particulier, avec le nom du produit sur les lignes. Par conséquent, pour obtenir la valeur réelle du dénominateur, quels que soient les filtres ou les segments, vous devez ajouter la fonction ALL pour remplacer tous les filtres. La formule suivante illustre l’utilisation de ALL pour remplacer les effets des filtres précédents :
=SOMME (Sales[Amount])/SUMX(Sales[Amount], FILTER(Sales, ALL(Products)))
-
La première partie de la formule, SOMME (Sales[Amount]), calcule le numérateur.
-
La somme prend en compte le contexte actuel, ce qui signifie que si vous ajoutez la formule dans une colonne calculée, le contexte de ligne est appliqué et si vous ajoutez la formule dans un tableau croisé dynamique en tant que mesure, tous les filtres appliqués dans le tableau croisé dynamique (le contexte de filtre) sont appliqués.
-
La deuxième partie de la formule calcule le dénominateur. La fonction ALL remplace tous les filtres qui peuvent être appliqués à la table Products .
Pour plus d’informations, y compris des exemples détaillés, consultez ALL Function.
Substitution de filtres spécifiques avec la fonction ALLEXCEPT
La fonction ALLEXCEPT remplace également les filtres existants, mais vous pouvez spécifier que certains des filtres existants doivent être conservés. Les colonnes que vous nommez en tant qu’arguments de la fonction ALLEXCEPT spécifient les colonnes qui continueront à être filtrées. Si vous souhaitez remplacer les filtres de la plupart des colonnes, mais pas toutes, ALLEXCEPT est plus pratique que ALL. La fonction ALLEXCEPT est particulièrement utile lorsque vous créez des tableaux croisés dynamiques qui peuvent être filtrés sur de nombreuses colonnes différentes et que vous souhaitez contrôler les valeurs utilisées dans la formule. Pour plus d’informations, notamment un exemple détaillé d’utilisation de ALLEXCEPT dans un tableau croisé dynamique, consultez Fonction ALLEXCEPT.