Acción de código DI006 (Mejora) Dividir un filtro multicolumna en varios filtros
Descripción
Al usar una única expresión de filtro que combina varias columnas con AND (o el operador equivalente &&), a menudo se puede lograr un mejor rendimiento si se especifican varios filtros, uno por cada columna.
Ejemplo
Cambiar:
CALCULATE([Total Sales], Products[Color] = "Red" && Products[Class] = "High-end")
Por:
CALCULATE([Total Sales], Products[Color] = "Red", Products[Class] = "High-end")
¿Por qué Tabular Editor sugiere esto?
Entre bastidores, un predicado escalar se convierte en una expresión de tabla que usa la función FILTER junto con la condición especificada. La tabla resultante de esta expresión tiene una columna por cada columna de la expresión de filtro. Es decir.:
Products[Color] = "Red" && Products[Class] = "High-end"
se convierte en:
FILTER(ALL(Products[Color], Products[Class]), Products[Color] = "Red" && Products[Class] = "High-end")
La función ALL, cuando se usa con varios parámetros de columna, devuelve una tabla con todas las combinaciones únicas de las columnas especificadas. Luego, esta tabla se filtra con la condición especificada y la tabla resultante se aplica al contexto de filtro de la función CALCULATE o CALCULATETABLE.
Sin embargo, cuando todos los operandos de la condición de filtro se combinan con AND, es más eficiente separarlos como filtros individuales. De ese modo, en lugar de crear una tabla con todas las combinaciones únicas de las columnas, se crean varias tablas más pequeñas, cada una con una sola columna que contiene únicamente los valores únicos de esa columna que cumplen los criterios de filtro. Esto puede traducirse en una mejora significativa del rendimiento, especialmente cuando las columnas tienen una alta cardinalidad y una baja correlación.