Introducción «Aporx.» a la Función CALCULATE en DAX
En el lenguaje DAX contamos con un extenso número de funciones, tales como:
.
- FILTER, VALUES, ALL, ALLSELECTED, ALLEXCEPT, etc.
- DATEDADD, CLOSINGBALANCEMOTH, FIRSTNOBALNK, PARALLELPERIOD, etc.
- SUM, SUMX, AVERAGE, AVERAGEX, RANKX, etc.
- PATH, PATHITEM, PATHCONTAINS, etc.
- USERELATIONSHIP, EARLIER, CROSSFILTER, TREATAS, etc.
- etc. etc.
.
Sólo por mecionar algunas ¡La lista es inmensa!
Pero hay que reconocer que: «hay funciones con más -importancia- que otras» y la más importantes de las funciones en DAX, y por mucho, es la función CALCULATE.
Entender la función CALCULATE en un primer momento es bastante sencillo y rápido, pero no nos dejemos engañar, esta función es tan versátil y el número de escenarios en la cual es indispensable, hace que se puedan dedicar un cursos completos solo a ella, de hecho:
Si quieres un estudio desde cero, profundo, detallado y de altísimo impacto en LENGUAJE DAX te recomiendo que hagas nuestro:
Magíster en Lenguaje DAX – Nivel 1.
Una capacitación OnLine y 100% en vivo de 33 horas, donde la apabullante complejidad de CALCULATE la simplificamos en 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 de la Capacitación de Lenguaje DAX].
De hecho, su potencial y todas sus implicaciones son tales que no hemos decidido llamarla el rey de las funciones, no, en su lugar: la reina de las funciones. Ya sabes es una «ella», por lo tanto, nunca se entenderá completamente. =)
Es una pequeña broma tomada de Alberto Ferrari.
A pesar de ello, si queremos dar a conocer que la función CALCULATE, es una función un amplio espectro de posibilidades.
Aquí vamos a dar una introducción, empero, podrás encontrar muchísimo más detalles en su ficha técnica: CALCULATE: Mago de la modificación de contextos.
Por otra parte, la mini-serie de introducción a CALCULATE en nuestro canal de YouTube te brindará mucho más conocimiento, también en los siguientes recursos de aprendizaje:
.
.
CALCULATE: Una Función en Modo Turbo
Hay un enfoque de explicación clásico para la función CALCULATE que me gusta mucho para dar a conocer su funcionamiento en una primera etapa, lo quiero compartir con ustedes.
Nota: Hay que recalcar, que esta explicación simplemente es una aproximación para conocer la función CALCULATE, no es bajo ninguna circunstancia la explicación precisa y exacta, su entendimiento requiere de teoría, varios pasos esenciales y ejercicios para comprender, honestamente, como opera la función CALCULATE.
Estoy 100% seguro de que la mayoría de lectores en EFB han utilizado las funciones:
SUMAR.SI, SUMAR.SI.CONJUTNO, PROMEDIO.SI, PROMEDIO.SI.CONJUNTO, CONTAR.SI, CONTAR.SI.CONJUTNO, …
– ¿Cierto?
Bien, imagina, solo por un momento, que tuviéramos a nuestra disposición una función que abarcará todas ellas y más en una misma sintaxis.
– Lo has advertido sin duda alguna …
Y si!, CALCULATE es precisamente esa función, pero para entenderlo mejor veamos su sintaxis
– CALCULATE SINTAXIS
<Expresión>: Uan expresión DAX a evaluar.
Ejemplo 1:
Ganancia :=
SUM ( Ventas[Margen] )
Ejemplo 2:
Costos :=
MEDIAN ( Ventas[Costos] )
Ejemplo 3:
Clientes Recurrentes :=
COUNTROWS (
CALCULATETABLE (
VALUES ( Ventas[Cliente ID] );
VALUES ( Ventas[Cliente ID] );
FILTER (
ALL ( ‘Calendario’ );
‘Calendario'[Fecha] < MIN ( ‘Calendario'[Fecha] )
)
)
)
.
<Filtro 1>: Un filtro para restringir el conjutno de datos, ejemplos
.
• Inventario[Edad] = 20
• Ventas[Cliente] = «Éxito»
.
CALCULATE en sus argumentos de filtro recibe condiciones booleanas como la de los ejemplos y además expresiones tabulares, sin embargo, este último no se trata en el artículo, a pesar de que la condición booleana no es más que una sytax sugar de una expresión de tabla, para conocer más vease el vídeo de la mini serie de CALCUATE: CALCULATE para inyección de filtros.
– Tabla de Datos
Démosle un vistazo a nuestra tabla de datos del día para ver de que va la función CALCULATE.
– A la Acción
Qué sucede si nos solicitan el total de ingresos para el producto «GS6», con la función SUMAR.SI sería:
– ¿Cuál sería la solución con una tabla dinámica?
Intuitivamente llevariamos el campo ID Producto al área de filas e Ingresos al área de valores, con lo cual solo tendríamos que ubicar el producto
Pero qué pasa si quisiéramos ver sólo el valor para el producto «GS6» sin filtros y sin nada, es decir, como en la imagen enseguida:
Nótese que no hay ningún campo en las áreas de: filas, columnas y filtros. Ni tampoco sliceres, además véase que no hay ningún tipo de filtro aplicado en la tabla dinámica.
¿Cómo lograrlo? Es allí precisamente dónde llega CALCULATE, en realidad se a creado una medida así:
[Ingresos GS6] :=
CALCULATE (
SUM ( RegistroDeVentas[Ingreso ($)] );
RegistroDeVentas[ID Producto] = «GS6»
)
¡Exactamente!: es como si hubieramos utilizado la función SUMAR.SI como función de resumen para una tabla dinámica. Comparemos la función CALCULATE con la función SUMAR.SI:
Primer Beneficio:
En lugar de estar restrigdos a usar SUMA (ó PROMEDIO, CONTAR si utilizamos una de sus funciones primas) podemos utilizar cuaklquier tipo de calculo que neceistemos, por ejemplo un percentil:
[Ingresos Per3]:=
CALCULATE (
PERCENTILE.INC ( RegistroDeVentas[Ingreso ($)]; 3 );
RegistroDeVentas[ID Producto] = «GS6»
)
Segundo Beneficio:
Su sintaxis es mucho más limpia, es un detalle que sin duda aporta a no confundir argumentos como si pasa con SUMAR.SI y SUMAR.SI.CONJUNTO cuando se esta empeando a conocerlas.
Tecer Beneficios:
Número indeterminado de filtros, por ejemplo:
[Ingresos GS6 y C181215]:=
CALCULATE (
SUM ( RegistroDeVentas[Ingreso ($)] );
RegistroDeVentas[ID Producto] = «GS6»;
RegistroDeVentas[ID de Cliente] = 181215
)
Lo anterior es únicamente por mencionar algunas cosas básicas, sin embargo, es bueno ir conociedo esta función tan potente, algunos artículos y vídeos relacionados:
Más Recursos Sobre CALCULATE en DAX
• Función CALCULATE en DAX – Pt1: Argumeno Expresión
• Vídeo de Introducción a CALCULATE desde contextos
• Ficha Técnica de la Función CALCULATE en DAX
Bueno esto ha sido todo de mi parte, hasta la próxima oportunidad, tienes inquietudes por favor déjala en la sección de comentarios.
– Miguel