Mastering Filter Context – Decil10.com

DAX: Contexto de Filtro

Inmersión Profunda en las Funciones de Control de Datos – Decil.com

¿Qué es el Contexto de Filtro?

En Power BI, el Contexto de Filtro define qué subconjunto de datos está “viendo” una fórmula en un momento dado. A diferencia del contexto de fila (que mira fila por fila), el contexto de filtro es dinámico y es determinado por los Slicers, los filtros de página y las filas/columnas de tus visuales. Las funciones que veremos a continuación son las herramientas que tienes para sobrescribir, ignorar o expandir esos filtros por código.

CALCULATE
Medida Modificador
Explicación Técnica
CALCULATE es la función reina de DAX. Su propósito es evaluar una expresión en un contexto de filtro modificado. Es la única función que permite la Transición de Contexto (convertir un contexto de fila en uno de filtro). Si no existiera CALCULATE, Power BI solo podría sumar o promediar lo que el usuario selecciona en pantalla; con ella, nosotros tomamos el control total.
Diferencia con otras: A diferencia de un SUM simple, CALCULATE puede inyectar filtros externos. Es el motor que permite comparar, por ejemplo, las ventas de hoy contra las ventas de ayer.
Sintaxis y Argumentos
CALCULATE( <Expresión>, [<Filtro1>], [<Filtro2>], ... )
El primer argumento es obligatorio (una medida o agregación). Los filtros siguientes son opcionales y pueden ser expresiones booleanas o tablas.
Ejemplo Práctico: Chile Business Context
DAX – Medida
Ventas Vino Tinto Maule = CALCULATE( [Ventas Total], Producto[Tipo] = “Vino Tinto”, Geografia[Region] = “Maule” )
Contexto: Esta medida calcula el total de ventas filtrando estrictamente por productos de tipo “Vino Tinto” y sucursales ubicadas en la “Región del Maule”, sin importar lo que el usuario haya seleccionado en los filtros globales del informe.
FILTER
Tabla Iterador
Explicación Técnica
FILTER no devuelve un número, devuelve una tabla. Es un iterador que recorre una tabla fila por fila y evalúa una condición lógica. Se usa casi siempre dentro de CALCULATE cuando la condición de filtrado es demasiado compleja para los filtros estándar (por ejemplo, cuando necesitas comparar una columna contra una medida o contra otra columna).
CALCULATE vs FILTER: Nunca uses FILTER para filtros simples como Color = "Rojo" (es más lento). Úsalo solo para lógicas avanzadas.
Ejemplo Práctico: Clientes de Alto Valor
DAX – Tabla / Medida
Monto Clientes VIP = CALCULATE( [Ventas Total], FILTER( Clientes, [Ventas Total] > 1000000 && Clientes[Ciudad] = “Santiago” ) )
Contexto: Aquí FILTER recorre la tabla de Clientes en Chile y selecciona solo aquellos cuyo RUT ha generado ventas superiores a $1.000.000 y residen en Santiago. Luego, CALCULATE suma las ventas de ese subconjunto.
ALL
Tabla Modificador
Explicación Técnica
ALL devuelve todas las filas de una tabla o todos los valores de una columna, ignorando cualquier filtro que se haya aplicado. Es vital para crear denominadores en cálculos de porcentajes (ej. % de participación de una región sobre el total nacional).
Ejemplo Práctico: % Participación Regional
DAX – Medida de Porcentaje
% Part. Nacional = VAR VentasActuales = [Ventas Total] VAR VentasTodoChile = CALCULATE([Ventas Total], ALL(Geografia)) RETURN DIVIDE(VentasActuales, VentasTodoChile)
Contexto: Si estamos viendo una tabla por Región, VentasActuales tendrá el monto de la región en la fila. VentasTodoChile ignorará el filtro de la fila gracias a ALL, obteniendo la suma de todo el país.
ALLEXCEPT
Modificador
Explicación Técnica
Quita todos los filtros de una tabla excepto los filtros aplicados a las columnas que especifiques. Es muy útil cuando quieres que un cálculo se mantenga fijo a nivel de una categoría (como Región) pero ignore filtros de niveles inferiores (como Ciudad o Sucursal).
Ejemplo Práctico: Total Fijo por Región
DAX – Medida
Ventas de la Region = CALCULATE( [Ventas Total], ALLEXCEPT(Geografia, Geografia[Region]) )
Contexto: Si un usuario filtra por una “Comuna” específica dentro de un gráfico, esta medida seguirá mostrando el total de la Región completa a la que pertenece esa comuna.
ALLSELECTED
Modificador
Explicación Técnica
Es la función más “visual”. Quita los filtros de las filas y columnas del objeto visual actual, pero mantiene los filtros que vienen de afuera (segmentadores o paneles de filtro). Se usa para calcular totales que sumen solo lo que el usuario está viendo actualmente en pantalla.
ALL vs ALLSELECTED: ALL ignora todo (incluso el Slicer). ALLSELECTED respeta el Slicer pero ignora la fila de la tabla.
Ejemplo Práctico: Porcentaje de Selección Visual
DAX – Medida
% del Total Visible = DIVIDE( [Ventas Total], CALCULATE([Ventas Total], ALLSELECTED(Ventas)) )
Contexto: Si el usuario filtra el reporte para ver solo el año 2023, esta medida calculará el peso de cada producto sobre el total de solo ese año 2023.
VALUES
Tabla
Explicación Técnica
Devuelve una tabla de una columna que contiene los valores únicos (distintos) de la columna especificada, respetando el contexto de filtro actual. Si hay una relación de datos y hay filas “huérfanas”, VALUES incluirá una fila en blanco adicional.
Ejemplo Práctico: Lista de Ciudades Filtradas
DAX – Medida de Texto
Ciudades con Venta = CONCATENATEX( VALUES(Geografia[Ciudad]), Geografia[Ciudad], “, ” )
Contexto: Esta medida crea una lista separada por comas de todas las ciudades chilenas que tienen ventas en el periodo seleccionado por el usuario.
DISTINCT
Tabla
Explicación Técnica
Similar a VALUES, devuelve los valores únicos de una columna o tabla. La diferencia técnica principal es que DISTINCT no devuelve la fila en blanco que Power BI genera automáticamente cuando hay integridad referencial rota (por ejemplo, una venta que apunta a un producto que no existe en la tabla de productos).
Ejemplo Práctico: Conteo de Productos
DAX – Medida
Cant. SKUs Unicos = COUNTROWS(DISTINCT(Producto[ID]))
Contexto: Cuenta cuántos códigos de producto únicos existen en el catálogo. Es preferible sobre VALUES cuando quieres ignorar errores de relación en el modelo.
REMOVEFILTERS
Modificador
Explicación Técnica
Es un alias moderno de ALL. Solo se puede usar dentro de CALCULATE como un modificador. Su nombre es más descriptivo: su único trabajo es quitar filtros de una tabla o columna. A diferencia de ALL, no puede ser usada para devolver una tabla física, solo para modificar el cálculo de CALCULATE.
Ejemplo Práctico: Ignorar Filtro de Fecha
DAX – Medida
Ventas Historicas Totales = CALCULATE( [Ventas Total], REMOVEFILTERS(‘Calendario’) )
Contexto: Muestra el total de ventas desde el día 1 de la empresa hasta hoy, incluso si el usuario selecciona un mes específico en el reporte.
KEEPFILTERS
Modificador
Explicación Técnica
Por defecto, los filtros internos de un CALCULATE sobrescriben los filtros externos. KEEPFILTERS cambia este comportamiento: en lugar de sobrescribir, hace una intersección (AND). Es decir, el filtro interno solo se aplicará si no contradice al filtro externo.
Ejemplo Práctico: Filtro Seguro de Vino
DAX – Medida
Venta Segura Vino = CALCULATE( [Ventas Total], KEEPFILTERS(Producto[Tipo] = “Vino Tinto”) )
Contexto: Si el usuario filtra el reporte por “Cerveza”, un CALCULATE normal con “Vino Tinto” mostraría datos de vino. Con KEEPFILTERS, el resultado será 0 o vacío porque el “Vino Tinto” no existe dentro de la selección de “Cerveza”.
CROSSFILTER
Modificador
Explicación Técnica
Permite modificar el comportamiento de una relación entre dos tablas durante el tiempo que dura la fórmula. Puedes desactivar una relación o, lo más común, cambiar el sentido del filtro a ambos sentidos (Both) para permitir que una tabla de hechos filtre a una dimensión.
Ejemplo Práctico: Contar Clientes desde Ventas
DAX – Medida
Conteo Clientes con Transaccion = CALCULATE( COUNTROWS(Clientes), CROSSFILTER(Ventas[RutCliente], Clientes[RutCliente], BOTH) )
Contexto: Normalmente la tabla Clientes filtra a Ventas. Con CROSSFILTER(…, BOTH), permitimos que los filtros aplicados a Ventas (como una fecha) viajen hacia atrás y filtren la tabla de Clientes, permitiéndonos contar cuántos clientes únicos compraron en esa fecha.