Modificar el contexto de filtro

Completado

Puede usar la función CALCULATE de DAX para modificar el contexto de filtro en las fórmulas. La sintaxis de la función CALCULATE es la siguiente:

CALCULATE(<expression>, [[<filter1>], <filter2>]…)

La función requiere pasar una expresión que devuelve un valor escalar y tantos filtros como sea necesario. La expresión puede ser una medida (que es una expresión con nombre) o cualquier expresión que se pueda evaluar en el contexto de filtro.

Los filtros pueden ser expresiones booleanas o expresiones de tabla. También es posible pasar funciones de modificación de filtro que proporcionan un control adicional cuando se modifica el contexto de filtro.

Cuando hay varios filtros, se evalúan mediante el operador lógico AND, lo que significa que todas las condiciones deben ser TRUE al mismo tiempo.

Nota

La función CALCULATETABLE de DAX realiza exactamente la misma funcionalidad que la función CALCULATE, salvo que modifica el contexto de filtro que se aplica a una expresión que devuelve un objeto de tabla. En este módulo, las explicaciones y los ejemplos usan la función CALCULATE, pero tenga en cuenta que estos escenarios también se pueden aplicar a la función CALCULATETABLE.

Aplicar filtros de expresión booleana

Un filtro de expresión booleana es una expresión que se evalúa como TRUE o FALSE. Los filtros booleanos deben cumplir las siguientes reglas:

  • Solo pueden hacer referencia a una única columna.
  • No pueden hacer referencia a medidas.
  • No pueden usar las funciones que examinan o devuelven una tabla que incluye funciones de agregación, como SUM.

En este ejemplo, creará una medida. En primer lugar, descargue y abra el archivo Adventure Works DW 2020 M06.pbix. A continuación, agregue la siguiente medida a la tabla Sales que filtra la medida Revenue mediante un filtro de expresión booleana para los productos rojos.

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

Agregue la medida Revenue Red al objeto visual de tabla que se encuentra en la Página 1 del informe.

Una imagen muestra una tabla con tres columnas: Region, Revenue y Revenue Red. La tabla muestra 10 filas y un total.

En el siguiente ejemplo, la medida siguiente filtra la medida Revenue por varios colores. Observe el uso del operador IN seguido de una lista de valores de color.

Revenue Red or Blue = CALCULATE([Revenue], 'Product'[Color] IN {"Red", "Blue"})

La medida siguiente filtra la medida Revenue por productos caros. Los productos costosos son aquellos con un precio de venta superior a 1000 USD.

Revenue Expensive Products = CALCULATE([Revenue], 'Product'[List Price] > 1000)

Aplicar filtros de expresión de tabla

Un filtro de expresión de tabla aplica un objeto de tabla como un filtro. Podría ser una referencia a una tabla de modelo; sin embargo, es probable que sea una función de DAX que devuelve un objeto de tabla.

Normalmente, usará la función FILTER de DAX para aplicar condiciones de filtro complejas, incluidas las que no se pueden definir mediante una expresión de filtro booleana. La función FILTER se clasifica como una función de iterador, por lo que se pasaría en una tabla o una expresión de tabla, y una expresión para evaluar para cada fila de esa tabla.

La función FILTER devuelve un objeto de tabla con exactamente la misma estructura que la tabla pasada. Sus filas son un subconjunto de esas filas que se pasaron, que son las filas donde la expresión se evaluó como TRUE.

En el ejemplo siguiente, se muestra una expresión de filtro de tabla que utiliza la función FILTER:

Revenue High Margin Products =
CALCULATE(
    [Revenue],
    FILTER(
        'Product',
        'Product'[List Price] > 'Product'[Standard Cost] * 2
    )
)

En este ejemplo, la función FILTER filtra todas las filas de la tabla Product que se encuentran en el contexto de filtro. Cada fila de un producto cuyo precio de lista supera el doble de su costo estándar se muestra como una fila de la tabla filtrada. Por lo tanto, la medida Revenue se evalúa para todos los productos devueltos por la función FILTER.

Todas las expresiones de filtro que se pasan a la función CALCULATE son expresiones de filtro de tabla. Una expresión de filtro booleana es una notación abreviada para mejorar la experiencia de lectura y escritura. Internamente, Microsoft Power BI traduce las expresiones de filtro booleanas en expresiones de filtro de tabla, que es cómo traduce la definición de medida Revenue Red.

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

Comportamiento de filtro

Dos posibles resultados estándar se producen al agregar expresiones de filtro a la función CALCULATE:

  • Si las columnas (o tablas) no están en el contexto de filtro, para evaluar la expresión CALCULATE se agregarán filtros nuevos al contexto de filtro.
  • Si las columnas o tablas ya están en el contexto de filtro, los nuevos filtros sobrescribirán los filtros existentes para evaluar la expresión CALCULATE.

En los siguientes ejemplos, se muestra cómo funciona la adición de expresiones de filtro a la función CALCULATE.

Nota

En cada uno de los ejemplos, no se aplica ningún filtro al objeto visual de tabla.

Como en la actividad anterior, se ha agregado la medida Revenue Red a un objeto visual de tabla que agrupa por región y muestra los ingresos.

Una imagen muestra una tabla con tres columnas: Region, Revenue y Revenue Red. La tabla muestra 10 filas y un total.

Dado que no se aplica ningún filtro en la columna Color de la tabla Product, la evaluación de la medida agrega un nuevo filtro para filtrar el contexto. En la primera fila, el valor de 2 681 324,79 USD es para los productos rojos que se vendieron en la región australiana.

El cambio de la primera columna del objeto visual de tabla de Region a Color generará un resultado diferente porque la columna Color de la tabla Product está ahora en el contexto de filtro.

Una imagen muestra una tabla con tres columnas: Color, Revenue y Revenue Red. La tabla muestra 10 filas y un total. El valor de Revenue Red es el mismo para cada fila.

La fórmula de medida Revenue Red evalúa la medida Revenue mediante la adición de un filtro en la columna Color (rojo) de la tabla Product. Por lo tanto, en este objeto visual que agrupa por color, la fórmula de medida sobrescribe el contexto de filtro con un nuevo filtro.

Este resultado puede ser o no el que desee. En la siguiente unidad, se presenta la función KEEPFILTERS de DAX, que es una función modificadora de filtro que puede usar para conservar los filtros en lugar de sobrescribirlos.