Función CALCULATE en DAX – Pt 3: Argumentos de Filtros, Faceta 2: Modificadores de CALCULATE.
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
b. Faceta 2: COMO MODIFICADOR (Modificadores de CALCULATE)
2. Parámetros de Filtros: Modificadores de CALCULATE
a. Modificadores de Arquitectura de las Relaciones
i. Modificador de Relación Activa
ii. Modificador del Filtro Cruzado
b. Modificadores de Estructura del Contexto de Filtro
i. Modificadores que Remueven Filtros
ii. Modificadores que Restauran Filtros
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)
En el presente artículo brindaremos detalles de la segunda face: Modificadores de CALCULAE.
Recordemos:Parámetro = Argumento.
Parámetros de Filrtos: Cómo Modificador (Modificadores de CALCULATE)
Cuando las personas empiezan a explorar CALCULATE no es frecuente qu empiecen por aquí, no obstante, más temprano que tarde encuentran utilidades con la función USERELATIONSHIP
Vamos a ello →
Modificadores de Arquitectura de las Relaciones
El primer conjunto de modificadores tiene como objetivo: Alterar la arquitectura de las relaciones, bien sea activando una relación o cambiando el filtro cruzado, esta categoría está compuesta por las funciones USERELATIONSHIP y CROSSFILTER.
i. Modificador de la Relación Activa
Si se desea activar una relación para el tiempo de vida de ejecución de una expresión DAX, el modificador USERELATONSHIP permite llevar acabo esta tarea.
IngLleg :=
CALCULATE (
[IngTot];
USERELATIONSHIP ( Pedidos[FechaLlegada]; Calendario[Fecha] )
)
— En la función USERELATIONSHIP primero se indica la clave externa
— Y en el segundo parámetro la clave primaria.
No olvidar que la relación física debe existir previamente en la interfaz, puesto que USERELATIONSHIP la activa, si no está creada arroja error.
ii . Modificador del filtro Cruzado
Si se desea alterar el filtro cruzado, esto se puede conseguir con el modificador CROSSFILTER, quien acepta tres opciones en su tercer parámetro: BOTH (Bidireccional), ONEWAY (Unidireccional) y NONE (desactiva la relación).
La opción más utilizada es con BOTH, la cual es la opción recomendada si se necesita la propagación en ambos sentidos, en lugar de activar la relación bidireccional físicamente en la interfaz.
• Ejemplo:
PrDtsVend :=
CALCULATE (
COUNTROWS ( SKUProductos );
CROSSFILTER ( Pedidos[SKU]; Productos[SKU]; BOTH )
)
— Opción preferible siempre que sea posible.
Modificadores de Estructura del Contexto de Filtro
El segundo conjunto de modificadores tiene como objetivo: Cambiar la estructura del contexto de filtro, bien sea (1) removiendo filtros del contexto o (2) restaurando filtros al contexto.
(1) En la primera subcategoría (modificadores que remueven filtros) tenemos las funciones: ALL, ALLEXCEPT, ALLNOBLANK, ALLCROSSFILTER y REMOVEFILTERS, esta última simplemente es un alias de ALL para su segunda cara.
(2) En la segunda subcategoría (modificadores que restauran filtros) tenemos la función ALLSELECTED.
Es imperativo no dejarnos confundir por el comportamiento dual/silencioso de las funciones ALLxxxx, ya que tienen dos caras, la primera cuando se utiliza en cualquier expresión DAX que no la involucra de manera libre o cómo función de primer nivel en los parámetros de CALCULATE y CALCULATETABLE, aquí materializa la tabla. La segunda cara cuando se utiliza cómo función de primer nivel en parámetros de filtros de CALCULATE y CALCULATETABLE, es de esta manera cuando pasan a actuar como modificadores. [Véase la Ficha Técnica de ALL]
ii. Modificadores que Remueven Filtros
El ejemplo por excelencia de ALL cómo modificador para CALCUALTE consiste en determinar el porcentaje de participación, el cual se compone del cálculo aritmético:
El ejemplo por excelencia de ALL cómo modificador para CALCUALTE consiste en determinar el porcentaje de participación, el cual se compone del cálculo aritmético:
• Ejemplo:
%Particiacion :=
VAR Numerador =
SUM ( Pedidos[Ingresos] )
VAR Denominador =
CALCULATE ( SUM ( Pedidos[Ingresos] ); ALL ( Pedidos ) )
VAR PctParticipacion =
DIVIDE ( Numerador; Denominador )
RETURN
PctParticipacion
La variable Denominador utiliza como parámetro de filtro la expresión: ALL(Pedidos), la cual remueve todos los filtros que afecten a la tabla Pedidos, en este caso, no se crea ninguna tabla, sino que manipula el contexto de filtro borrando listas de valores existentes.
Si lo que se busca es la participación respecto a un subtotal, bien sea a nivel de columnas o filas, se puede conseguir con un parámetro modificador y un parámetro de filtro, así:
%PartVisible :=
DIVIDE (
[IngTot];
CALCULATE ( [IngTot]; ALLSELECTED (); VALUES ( Pedidos[País] ) )
)
ii . Modifacores que Restauran Filtros
Si lo que se desea es tener en cuenta los filtros generados por objetos visuales por fuera de la visualización actual, entonces, es necesario la restauración de filtros, para esta tarea se precisa la función ALLSELECTED.
• Ejemplo:
%PartVisible :=
DIVIDE ( [IngTot]; CALCULATE ( [IngTot]; ALLSELECTED () ) )
Tener varios modificadores de CALCULATE en distintos parámetros de filtros es perfectamente válido
• Ejemplo:
TotalIngLleg :=
CALCULATE (
[Ing];
ALL ( Pedidos );
USERELATIONSHIP ( Pedidos[FechaLlegada]; Calendario[Fecha] )
)
Bueno eso est todo de mi parte mil gracias por leerme, nos vemos en la tercera entrega de la función CALCULATE
— Miguel