DAX: Medidas vs Variables

Este escrito forma parte de la serie: Escenarios de Modelado con DAX

Algunos de los recursos que he consultado sobre Modelado tabular y DAX los podemos encontrar en Modelos tabulares y DAX – Recursos

Hoy quiero comentar sobre la posibilidad de crear variables para trabajar con expresiones DAX. Es una gran funcionalidad, da legibilidad al código, según el escenario es posible obtener mejor rendimiento al evaluar la expresión, permite evitar medidas innecesarias… todas son ventajas, veamos.

Variables en DAX

Es posible, a partir de la versión DAX 2015, crear variables y emplearlas en el código de una expresión DAX.

Hay que decir que a pesar de su nombre, las variables creadas en expresiones DAX actúan como constantes, ¡¡¿cómo?!! Pues sí, veamos un ejemplo.

Partimos de las mismas medidas que creamos en el caso anterior, donde, de paso sea dicho, solucionamos los problemas que planteaba el trabajo con columnas calculadas.

Total Importe = SUMX(Ventas;Ventas[CantidadETL]*Ventas[Precio])
Total Beneficios = SUMX(Ventas;Ventas[CantidadETL] * (Ventas[Precio] – Ventas[Coste]))
Total % Beneficios = DIVIDE([Total Beneficios];[Total Importe])

Digamos, que en nuestro modelo, lo único que necesitamos plasmar en el informe es Total % de Beneficio, que no utilizaremos las medidas Total Importe ni Total Beneficio.

Veamos las opciones de las que disponemos:

  • Escribir toda la lógica del cálculo en una única expresión DAX.
    • No es una mala idea, aunque según sea el caso, puede llegar a ser compleja la lectura y depuración.
    • Para ello creamos una nueva medida DAX, cuya expresión es:

Total % Beneficio v2 =
DIVIDE(
SUMX(Ventas;Ventas[CantidadETL] * (Ventas[Precio] – Ventas[Coste]));
SUMX(Ventas;Ventas[CantidadETL]*Ventas[Precio])
)

PorBene2

  • Mantener las dos medidas que creamos antes y ocultarlas ya que no van a ser utilizadas en los informes.
    • Solo nos sirven para solucionar el requisito por etapas.
    • En este caso Total Beneficio es el numerador mientras que Total Ventas es el denominador.
    • Para ocultar una medida, o cualquier objeto del modelo tabular que no queremos que sea visible para la herramienta destino, una opción es desde el panel de Campos, en el Power BI Desktop, seleccionar la medida y con el menú contextual, seleccionar Ocultar. Todos los elementos ocultos se encuentran disponibles para cálculoa previos y/o futuros.

OcultarTotImp

  • Trabajar con variables, que es nuestro objetivo hoy 🙂

Trabajar con variables en Modelos tabulares

Un breve resumen:

  • Las variables se pueden utilizar dentro de las expresiones DAX
  • Es posible crear y consumir más de una variable en una expresión de cálculo en DAX
  • Como requisitos de sintaxis, van precedidas de la palabra VAR y para ser evaluadas se precisa de la palabra RETURN
  • En el momento en que sean invocadas, se evalúan una única vez y se tratan como constantes
  • Una de las ventajas es que permite ver toda la lógica de negocio de una expresión compleja, que ha sido dividida en partes
  • Permite crear expresiones más legibles
  • Según sea el escenario, posibilitan un mejor rendimiento del modelo

Vamos a utilizar la misma lógica de negocio, expresada antes en medidas, ahora con variables

  • Lo primero, es definir las expresiones para las variables

DefineVar

  • Luego, definir la expresión que evalúa o consume las variables.

Intellisense, acude, una vez más a nuestra ayuda, mostrando las variables disponibles

UsaImporte

  • Hasta que obtenemos toda la expresión DAX que necesitamos

UsaVARs

  • Esta es la expresión DAX resultante.

Total % Beneficio v3 =
VAR Importes = SUMX(Ventas;Ventas[CantidadETL]*Ventas[Precio])
VAR Beneficios = SUMX(Ventas;Ventas[CantidadETL] * (Ventas[Precio] – Ventas[Coste]))
RETURN
DIVIDE(Importes;Beneficios)

Hemos creado una medida, para obtener Total % Beneficio a partir de la evaluación de dos variables: Importes y Beneficios, que a su vez, se han creado y definido dentro de la propia medida, ambos valores, al ser utilizados para el cálculo final, se tratan como constantes.

Este es el resultado de utilizar las tres opciones en un informe

TablaUsoVar

En esta serie veremos otros ejemplos de las ventajas de trabajar, siempre que sea posible, con Variables, en lugar de con Medidas intermedias que han de ser ocultadas de la vista informes.

Si trabajamos con Power BI Desktop, y utilizamos la funcionalidad Medidas rápidas, veremos que la herramienta hace un uso elevado y eficiente del trabajo con variables para crear complejas expresiones DAX

Espero que resulte de utilidad #HappyDAXing !!! 🙂

En la próxima entrada vamos a ver cómo trabajar con las relaciones y los cálculos DAX en Modelos tabulares con Power BI

3 comentarios en “DAX: Medidas vs Variables

  1. Sergio Diaz

    Excelente!!
    Tengo un caso que no tiene que ver con variables pero sí me urge su ayuda, no se que tan factible sea por este medio o via mail explicarle porque tengo que detallarlo.

    Me gusta

    Responder
  2. Mercedes

    Buenos días Ana.
    He detectado un error en la última línea de esta expresión DAX:

    Total % Beneficio v3 =
    VAR Importes = SUMX(Ventas;Ventas[CantidadETL]*Ventas[Precio])
    VAR Beneficios = SUMX(Ventas;Ventas[CantidadETL] * (Ventas[Precio] – Ventas[Coste]))
    RETURN
    DIVIDE(Importes;Beneficios)

    En realidad esa línea sería así:

    DIVIDE(Beneficios;Importes)

    Me gusta

    Responder

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.