Función CALCULATE en DAX – Pt 4: CALCULATE y Su Orde de Precedencia.
Este artículo pertenece a la tercera parte de la serie de cuatro enfocados a documentar los cuatro pilares para dominar la función más importante del lenguaje DAX: CALCULATE, de hecho, los cuatro rubros son: Argumentos de Filtros, Transición de Contextos, Modificadores de CALCULATE y Orden de Precedencia.
— TABLA DE CONTENIDO DE ESTE ARTÍCULO
1. Generalidades de los parámetros de Filtros
a. Faceta 1: COMO FILTROS
2. CALCULATE y Su Orden de Precedencia
a. Preparación de Filtros Explicítos
b. Copia del Contexto de Filtro Original
c. Transición de Contextos
d. Modificadores de CALUCLATE
e. Inyección de Filtros Explicítos
f. Aplicación de Filtros al Modelo de Datos
g. Ejecución de Expresión Escalar
h. Reinicio del Contexto de Filtro
No está de sobra mencionar que este cuarto artículo supone que has leído los tres anteriores:
(1): Función CALCULATE en DAX, Pt1: Argumento Expresión
(2): Función CALCULATE en DAX, Pt2: Argumentod de Filtro
(3): Función CALCULATE en DAX, Pt3: Modificadores de CALCULATE
CALCULATE tiene un montón de operaciones involucradas:
- Transición de Contextos
- Inyección de Filtros
- Modificación del Modelo de datos
Mas los todas las implicacioens subyacentes como: invalidadción de contexto de fila, sobreescritura de filtros, intersección de elemtnos, ruptura de la forma de filtros, etc.
y su orden de ejecución no es el intuitivo siguiendo del primero al último parámetro, en realidad sigue un orden establecido bien definido y exactosas,
Al igual que el primer y segundo manuscrito de la función CALCUALATE debemos hacer dos declaraciones:
En primer lugar, esta serie de artículos esta creado a partir de la ficha técnica de la Carta DAX de CALCULATE: Mago de la Modificación de Contextos.
Por lo que te recomiendo que la descargues y las tengas a la mano siempre si eres una persona que trabaja frecuentemente con DAX, es más imprímela.
DESCARGAR CARTAS DAX: CALCULATE MAGO DE LA MODIFICACIÓN DE CONTEXTOS
En segundo lugar, estos artículos aportan mucha luz si tienes un bagaje previo sobre el lenguaje DAX, contexto de evaluación, así como un estudio de la función CALCULATE.
Estos manuscritos no son para ti si arrancas desde cero en DAX y CALCULATE, si es verdad, que te pueden dar una idea con meridiana claridad, y las aplicaciones con los modificadores de CALCULATE es una parte muy sencilla de forma aislada, a pesar de ello, muchas cosas te sonarán a marciano C2 y el impacto de diversas implicaciones pasarán desapercibidas.
Si quieres un estudio desde cero, profundo, detallado y de altísimo impacto en CALCULATE te recomiendo que hagas nuestro:
Énfasis en CALCULATE y CALCULATETABLE
Una capacitación OnLine y 100% en vivo de 6 horas, donde la apabullante complejidad de CALCULATE la simplificamos a 4 pilares sencillos.
Sus ediciones ocurren esporádicamente para brindar una experiencia lo más personalizada posible, vista la web y lee lo que dicen nuestros antiguos participantes [Visitar Web del Énfasis en CALCULATE].
Generalidades de los Parámetros de Filtro
Tragiamos aquí un breve repaso de los parámetros de filtros de la funcón CALCULATE →
Este conjunto de parámetros (del dos en adelante)de la función CALCULATE tiene dos facetas:
(1): Cómo Filtro
(2): Como Modificador (Modificadores de CALCULATE).
Faceta 1: COMO FILTROS
Esto lo estudiamos en el segundo manuscrito de CALCULATE
Expresión tabular que representa un filtro, el cual se inyecta como nueva restricción para el contexto. Comúnmente, esta expresión de tabla se indica como una expresión booleana (TRUE/FALSE), no obstante, no es más que un azúcar sintáctico (syntax sugar) para hacer las expresiones tabulares más fáciles de leer:
Faceta 2: CÓMO MODIFICADOR
Mediante la ayuda de unas funciones especiales llamadas modificadores, el parámetro ya no actúa como filtro para ser inyectado al contexto, sino que cambia su comportamiento para manipular el modelo de datos, así:
• Cambios en la arquitectura de las relaciones mediante: USERELATIONSHIP para cambios en el tipo de relación y/o CROSSFILTER para cambios en e filtro cruzado o desactivar una relación.
• Cambios en la estructura original del contexto mediante:
(1) ALL, ALLEXCEPT, ALLNOBLANK y REMOVEFILTERS para remover filtros del contexto de filtro
(2) ALLSELECTED para restaurar filtros en el contexto de filtro, y
(3) KEEPFILTERS para mantener filtros nativos del contexto de filtro (aunque este último es propiamente un modificador de parámetro -Véase las artículo 4)
Si tenemos más de una operación CALCULATE en su algortimo interno sigue un orden establecido.
CALCULATE y su Orden de Precedencia
i. Preparación de Filtros Explícitos
Todos los parámetros de filtros explícitos son preparados individualmente en el contexto de evaluación original, es decir, contexto de filtro original y contextos de fila si existen.
Aquí son preparados más no inyectados al contexto de filtro nuevo.
ii. Copia del Contexto de Filtro Original
Se crea una copia del contexto de filtro original, sin ningún contexto de fila porque son invalidados.
iii. Transición de Contextos
Se ejecuta la operación de transición de contextos si previamente se ha generado un contexto de fila bien sea automático o programable, con lo cual, todos las columnas actuales y sus valores son creados como parámetros de filtros implícitos e inyectados a la copia del contexto de filtro
Es posible evitar la imposición de sobreescritura de filtros añadidos por transición de contextos (argumentos implícitos o fantasmas), encerrando la expresión tabular donde se itera con KEEPFILTERS (especialmente útil para mantener la forma de filtro arbitrario)
iv. Modificadores de CALCULATE
Se ejecutan los parámetros que actúen como modificadores de CALCULATE: USERELATIONSHIP, CROSSFILTER; ALL, ALLEXCEPT, ALLNOBLANK, ALLCROSSFILTER, REMOVEFILTERS y ALLSELECETED.
Gracias a este orden, se puede anular la transición de contextos con cualquier función ALLxxxx.
v. Inyección de Filtros Explicítos
CALCULATE inyecta todos los parámetros de filtros explícitos a la copia del contexto del filtro, haciendo que convivan e intersequen aquellos que afecten la misma columna y vayan encerrados en KEEPFILTERS.
vi. Aplicación de Filtros al Modelo de Datos
Se aplican todos los filtros del nuevo y más reciente contexto de filtro a el modelo de datos: a todas las tablas que corresponda, generando un nuevo subconjunto de datos visibles (contexto de evaluación).
vii. Ejecución de Expresión Escalar
Se ejecuta el primer parámetro: Expresión escalar, en el nuevo y más reciente contexto de evaluación.
viii. Reinicio al Contexto de Filtro Original
Una vez finalizado el más reciente contexto de filtro es descartado regresando al contexto original.
– Ejemplo:
IngDeDiaMayorParaColSegunLlegada :=
MAXX (
— (2) Ejecución de transición de contextos:
Calendario;
CALCULATE (
— (5) Evaluación de la expresión:
[IngTot];
— (3) Ejecución de modificador:
USERELATIONSHIP ( Pedidos[FechaLlegada]; Calendario[Fecha] );
— (1) Preparación de filtro (queda latente):
— (4) Inyección de filtro al contexto de filtro nuevo:
Pedidos[País] = «Colombia»
)
)
Véase que el orden es totalmente diferente a una secuencia lógica que dicta la intuición, puesto que, el primer parámetro de CALCULATE es el último en ejecutarse.
Bueno así concluimos esta serie de documentación de CALCUALATE
— Miguel