En esta sección se describe cómo crear filtros en fórmulas de Expresiones de análisis de datos (DAX). Puede crear filtros dentro de fórmulas para restringir los valores de los datos de origen que se usan en los cálculos. Para ello, especifique una tabla como entrada para la fórmula y, a continuación, defina una expresión de filtro. La expresión de filtro que proporciona se usa para consultar los datos y devolver solo un subconjunto de los datos de origen. El filtro se aplica dinámicamente cada vez que actualiza los resultados de la fórmula, según el contexto actual de los datos.
En este artículo
Crear un filtro en una tabla usada en una fórmula
Puede aplicar filtros en fórmulas que toman una tabla como entrada. En lugar de escribir un nombre de tabla, use la función FILTRAR para definir un subconjunto de filas de la tabla especificada. Ese subconjunto se pasa a otra función, para operaciones como agregaciones personalizadas.
Por ejemplo, supongamos que tiene una tabla de datos que contiene información de pedidos sobre revendedores y desea calcular cuánto vendió cada revendedor. Sin embargo, desea mostrar el importe de ventas solo para los revendedores que vendieron varias unidades de sus productos de mayor valor. La siguiente fórmula, basada en el libro de ejemplo de DAX, muestra un ejemplo de cómo puede crear este cálculo mediante un filtro:
=SUMX(
FILTER ('ResellerSales_USD', 'ResellerSales_USD'[Cantidad] > 5 && 'ResellerSales_USD'[ProductStandardCost_USD] > 100), 'ResellerSales_USD'[SalesAmt] )-
La primera parte de la fórmula especifica una de las funciones de agregación de Power Pivot, que toma una tabla como argumento. SUMX calcula una suma sobre una tabla.
-
La segunda parte de la fórmula, FILTER(table, expression),indica a SUMX qué datos usar. SUMX requiere una tabla o una expresión que da como resultado una tabla. Aquí, en lugar de usar todos los datos de una tabla, se usa la función FILTER para especificar cuáles de las filas de la tabla se usan.
La expresión de filtro tiene dos partes: la primera parte nombra la tabla a la que se aplica el filtro. La segunda parte define una expresión que se usará como condición de filtro. En este caso, está filtrando en revendedores que vendieron más de 5 unidades y productos que cuestan más de $100. El operador, &&, es un operador AND lógico, que indica que ambas partes de la condición deben ser verdaderas para que la fila pertenezca al subconjunto filtrado.
-
La tercera parte de la fórmula indica a la función SUMX qué valores se deben sumar. En este caso solo está usando el importe de ventas.
Tenga en cuenta que funciones como FILTRAR, que devuelven una tabla, nunca devuelven la tabla o las filas directamente, pero siempre están incrustadas en otra función. Para obtener más información sobre FILTER y otras funciones usadas para filtrar, incluidos más ejemplos, consulte Filter Functions (DAX).
Nota: La expresión de filtro se ve afectada por el contexto en el que se usa. Por ejemplo, si usa un filtro en una medida y la medida se usa en una tabla dinámica o un gráfico dinámico, el subconjunto de datos devuelto puede verse afectado por filtros adicionales o segmentaciones de datos que el usuario ha aplicado en la tabla dinámica. Para obtener más información sobre el contexto, vea Contexto en fórmulas DAX.
Filtros que quitan duplicados
Además de filtrar valores específicos, puede devolver un conjunto único de valores de otra tabla o columna. Esto puede ser útil cuando desea contar el número de valores únicos en una columna o usar una lista de valores únicos para otras operaciones. DAX proporciona dos funciones para devolver valores distintos: Función DISTINCT y Función VALUES.
-
La función DISTINCT examina una sola columna especificada como argumento de la función y devuelve una nueva columna que contiene solo los valores distintos.
-
La función VALORES también devuelve una lista de valores únicos, pero también devuelve el miembro Desconocido. Esto es útil cuando se usan valores de dos tablas combinadas por una relación y falta un valor en una tabla y está presente en la otra. Para obtener más información sobre el miembro Desconocido, vea Contexto en fórmulas DAX.
Ambas funciones devuelven una columna completa de valores; Por lo tanto, use las funciones para obtener una lista de valores que después se pasan a otra función. Por ejemplo, podría usar la siguiente fórmula para obtener una lista de los distintos productos vendidos por un revendedor determinado, con la clave de producto única y, a continuación, contar los productos de esa lista con la función CONTAR.
=COUNTROWS(DISTINCT('ResellerSales_USD'[ProductKey]))
Cómo afecta el contexto a los filtros
Al agregar una fórmula de DAX a una tabla dinámica o un gráfico dinámico, los resultados de la fórmula pueden verse afectados por el contexto. Si está trabajando en una tabla de Power Pivot, el contexto es la fila actual y sus valores. Si está trabajando en una tabla dinámica o un gráfico dinámico, el contexto significa el conjunto o subconjunto de datos definido por operaciones como cortar o filtrar. El diseño de la tabla dinámica o el gráfico dinámico también impone su propio contexto. Por ejemplo, si crea una tabla dinámica que agrupa las ventas por región y año, solo los datos que se aplican a esas regiones y años aparecerán en la tabla dinámica. Por lo tanto, todas las medidas que agregue a la tabla dinámica se calculan en el contexto de los encabezados de columna y fila más los filtros de la fórmula de medida.
Para obtener más información, vea Contexto en fórmulas DAX.
Quitar filtros
Al trabajar con fórmulas complejas, es posible que desee saber exactamente cuáles son los filtros actuales o puede que desee modificar la parte de filtro de la fórmula. DAX proporciona varias funciones que permiten quitar filtros y controlar qué columnas se conservan como parte del contexto del filtro actual. En esta sección se proporciona información general sobre cómo estas funciones afectan a los resultados de una fórmula.
Invalidación de todos los filtros con la función ALL
Puede usar la función ALL para invalidar los filtros aplicados anteriormente y devolver todas las filas de la tabla a la función que realiza la operación de agregado u otra operación. Si usa una o más columnas, en lugar de una tabla, como argumentos para ALL, la función ALL devuelve todas las filas, ignorando los filtros de contexto.
Nota: Si está familiarizado con la terminología de base de datos relacional, puede considerar que ALL generan la combinación externa izquierda natural de todas las tablas.
Por ejemplo, supongamos que tiene las tablas Ventas y Productos y desea crear una fórmula que calcule la suma de ventas del producto actual dividido por las ventas de todos los productos. Debe tener en cuenta el hecho de que, si la fórmula se usa en una medida, el usuario de la tabla dinámica podría estar usando una segmentación de datos para filtrar para un producto determinado, con el nombre del producto en las filas. Por lo tanto, para obtener el valor verdadero del denominador independientemente de los filtros o segmentaciones de datos, debe agregar la función ALL para invalidar los filtros. La fórmula siguiente es un ejemplo de cómo usar ALL para invalidar los efectos de filtros anteriores:
=SUMA (Ventas[Importe])/SUMX(Ventas[Importe], FILTRAR(Ventas, ALL(Productos)))
-
La primera parte de la fórmula, SUMA (Ventas[Importe]), calcula el numerador.
-
La suma tiene en cuenta el contexto actual, lo que significa que si agrega la fórmula en una columna calculada, se aplica el contexto de fila y, si agrega la fórmula a una tabla dinámica como medida, se aplicarán los filtros aplicados en la tabla dinámica (el contexto de filtro).
-
La segunda parte de la fórmula, calcula el denominador. La función ALL reemplaza los filtros que se podrían aplicar a la tabla Products .
Para obtener más información, incluidos ejemplos detallados, vea Función ALL.
Invalidación de filtros específicos con la función ALLEXCEPT
La función ALLEXCEPT también reemplaza los filtros existentes, pero puede especificar que algunos de los filtros existentes se deben conservar. Las columnas a las que asigne el nombre como argumentos de la función ALLEXCEPT especifican qué columnas se seguirán filtrando. Si desea invalidar los filtros de la mayoría de las columnas, pero no de todas, ALLEXCEPT es más cómodo que ALL. La función ALLEXCEPT es especialmente útil al crear tablas dinámicas que se pueden filtrar en muchas columnas diferentes y desea controlar los valores que se usan en la fórmula. Para obtener más información, incluido un ejemplo detallado de cómo usar ALLEXCEPT en una tabla dinámica, vea Función ALLEXCEPT.