En esta sección se describe cómo crear filtros dentro de fórmulas de expresiones de análisis de datos (DAX). Puede crear filtros dentro de las 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 proporcione 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, en función del 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 tomen una tabla como entrada. En lugar de escribir un nombre de tabla, use la función FILTRO 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 los revendedores y desea calcular cuánto vendió cada revendedor. Sin embargo, quieres mostrar el importe de ventas solo para aquellos revendedores que vendieron varias unidades de tus 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'[Quantity] > 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),indicaSUMXqué datos usar.SUMXRequiere una tabla o una expresión que dé como resultado una tabla. Aquí, en lugar de usar todos los datos de una tabla, use laFILTERfunción 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 sección define una expresión que se usará como condición de filtro. En este caso, está filtrando por 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
SUMXfunción los valores que se deben sumar. En este caso, solo usa el importe de venta.
Tenga en cuenta que funciones como FILTRO, que devuelven una tabla, nunca devuelven la tabla o las filas directamente, sino que siempre están incrustadas en otra función. Para obtener más información acerca de FILTER y otras funciones usadas para filtrar, incluidos más ejemplos, consulte Funciones de filtro (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 que se devuelve puede verse afectado por filtros o segmentaciones adicionales que el usuario haya aplicado en la tabla dinámica. Para obtener más información sobre el contexto, consulte 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 resultar útil cuando desea contar el número de valores únicos de 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 VALORES.
- La función DISTINCT examina una sola columna que haya especificado 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 unidas 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, consulte Contexto en fórmulas DAX.
Ambas funciones devuelven una columna completa de valores; Por lo tanto, usa las funciones para obtener una lista de valores que luego se pasa 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 mediante la clave de producto única y, a continuación, contar los productos de dicha lista con la función CONTARROWS:
=COUNTROWS(DISTINCT('ResellerSales_USD'[ProductKey]))
Cómo afecta el contexto a los filtros
Al agregar una fórmula DAX a una tabla dinámica o a un gráfico dinámico, el contexto puede afectar a los resultados de la fórmula. Si está trabajando en una tabla PowerPivot, el contexto es la fila actual y sus valores. Si está trabajando con una tabla dinámica o un gráfico dinámico, el contexto significa el conjunto o subconjunto de datos que se define mediante operaciones como la segmentación o el filtrado. El diseño de la tabla dinámica o 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, en la tabla dinámica solo aparecerán los datos que se apliquen a esas regiones y años. Por lo tanto, las medidas que agregue a la tabla dinámica se calculan en el contexto de los encabezados de columna y fila, además de 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 quiera saber exactamente cuáles son los filtros actuales o que quiera modificar la parte del filtro de la fórmula. DAX proporciona varias funciones que permiten quitar filtros y controlar qué columnas se conservan como parte del contexto de filtro actual. Esta sección proporciona información general sobre cómo afectan estas funciones a los resultados de una fórmula.
Reemplazar todos los filtros con la función TODAS
Puede usar la ALL función para reemplazar los filtros que se aplicaron anteriormente y devolver todas las filas de la tabla a la función que realiza la operación de agregado u otra. Si usa una o varias columnas, en lugar de una tabla, como argumentos para ALL, la ALL función devuelve todas las filas, omitiendo los filtros de contexto.
Nota
Si está familiarizado con la terminología de las bases de datos relacionales, puede pensar en ALL generar la combinación externa izquierda natural de todas las tablas.
Por ejemplo, supongamos que tiene las tablas ventas y productos, y quiere crear una fórmula que calcule la suma de las ventas del producto actual dividida por las ventas de todos los productos. Debe tener en cuenta que, si la fórmula se utiliza en una medida, el usuario de la tabla dinámica podría usar una segmentación de datos para filtrar un producto determinado, con el nombre del producto en las filas. Por lo tanto, para obtener el valor real del denominador independientemente de los filtros o segmentaciones, debe agregar la función ALL para invalidar los filtros. La siguiente fórmula es un ejemplo de cómo usar ALL para anular los efectos de los filtros anteriores:
=SUM (Sales[Amount])/SUMX(Sales[Amount], FILTER(Sales, ALL(Products)))
- 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 a una columna calculada, se aplica el contexto de fila y, si agrega la fórmula a una tabla dinámica como medida, se aplican los filtros aplicados en la tabla dinámica (el contexto del filtro).
- La segunda parte de la fórmula calcula el denominador. La función ALL reemplaza los filtros que puedan aplicarse a la
Productstabla.
Para obtener más información, incluidos ejemplos detallados, vea Función TODO.
Reemplazar filtros específicos con la función ALLEXCEPT
La función ALLEXCEPT también invalida los filtros existentes, pero puede especificar que se conserven algunos de los filtros existentes. Las columnas que asigne como argumentos de la función ALEXPONER especifican las columnas que se seguirán filtrando. Si desea invalidar los filtros de la mayoría de las columnas, pero no de todas, ALLEXCEPT es más conveniente 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 la función ALEXEX.