Blog

COMO, CUANDO, DONDE (VARIABLES EN DAX)

Publicado por:

Buenos días a todos, hace ya algún tiempo escribimos un pequeño artículo sobre las variables y su sintaxis. En este artículo, queremos profundizar un poco más, sobre esta herramienta en DAX, que nos permitirá tener unos códigos más legibles.

Con respecto a su sintaxis, ya lo indicamos anteriormente, aunque lo repasemos, siempre comenzara con VAR para indicar cada una de las variables que intervendrán en la expresión de nuestra medida y RETURN que almacenara dichos valores para su posterior uso en la medida

Recordar que antes de RETURN, se pueden definir una o varias variables (pueden ser más de una)

VAR

<NombreVariable> = <Expresión DAX para Medida o Tabla>

RETURN

<Expresión DAX> 

 

El ejemplo que pusimos en nuestro anterior artículo, fue la siguiente expresión:

Incremento anual % de Ingresos =

VAR

PREV_YEAR =

CALCULATE (

SUM ( ‘INGRESOS'[Ingresos] );

DATEADD ( ‘CALENDARIO'[Fecha].[Date]; -1; YEAR )

)

VAR

TOTAL_INGRESOS =

SUM ( ‘INGRESOS'[Ingresos] )

RETURN

DIVIDE ( TOTAL_INGRESOS – PREV_YEAR; PREV_YEAR )

En este caso, se definieron dos variables dentro de la misma expresión

Podemos empezar escribiendo nuestra medida primero sin variables, para posteriormente ir añadiendo variables a nuestra expresión. Es decir, al final, nuestra medida se convierte en algo simple y sencillo de entender

DIVIDE ( TOTAL_INGRESOS – PREV_YEAR; PREV_YEAR )

Esta seria nuestra sencilla expresión, llevada a su máxima simplicidad, donde previamente hemos definido cada una de las variables que la conforman. Lo que nos beneficia a nosotros o a cualquiera que lea nuestro código con posterioridad.

Cumpliendo así uno de los fines de las variables, LA LEGIBILIDAD DEL ALGORITMO.

Veamos pues cuales son las máximas que nos empujan a utilizar variables en nuestro código.

  • Mejorar la legibilidad
  • Simplificar la depuración
  • Mejora del rendimiento
  • Reducir la complejidad

 

En el ejemplo que hemos indicado, observemos que los ingresos del año anterior, que hemos denominado como PREV_YEAR, debería de calcularse en dos ocasiones, para el calculo del incremente anual que estábamos calculando, mientras que, al hacer uso de la variable, esta se calcula una única vez quedando almacenada para su uso en el resultado de la expresión.

Esta mejora del rendimiento, es mucho mas ostensible, cuando hacemos uso de la variable en una expresión de iteración que se ha de repetir varias veces en el algoritmo.

Una expresión pasada como argumento VAR, puede contener otra declaración VAR, declarada anteriormente

Cuando nos referimos a una variable, debemos de tener en cuenta lo siguiente:

  • Las variables, pueden hacer referencia a medidas
  • Pueden referirse a variables previamente definidas
  • Las medidas, no pueden referirse a variables fuera de la propia expresión, es decir, no podremos almacenar variables para ser utilizadas en otras expresiones de medidas, deberemos de volver a definirlas en la expresión
  • No podremos referirnos a las columnas en las variables de la tabla, mediante la sintaxis TableName [ColumnName].
  • La variable, puede almacenar valores, es decir podremos definir una variable como un único valor a almacenar, por ejemplo (VAR Dias = 365   RETURN), con lo que al utilizar en nuestra medida la referencia a la variable Días, utilizaría dicho valor  (365)

Por ejemplo, utilicemos una expresión de medida de la variación porcentual de las ventas anuales

Podríamos utilizar 3 medidas de la manera siguiente

VentasTotal =
SUM ( Facturas[importe] )

 

Una segunda medida que nos diera las ventas del periodo anterior

VentasPY =
CALCULATE (
SUM ( Facturas[importe] ),
SAMEPERIODLASTYEAR ( Calendario[Fecha] )
)

Y una tercera medida que nos diera el porcentaje

% VariacionVentas =

IF (
VentasPY,
DIVIDE (
VentasTotal – VentasPY,
VentasTotal
)
)

Si usamos variables, podríamos crear una única medida que nos diera el mismo resultado

%VariacionVentas =
VAR 

VentasTotal =

SUM ( Facturas[importe] )
VAR 

VentasPY =

       CALCULATE (
SUM ( Facturas[importe] ),
SAMEPERIODLASTYEAR ( Calendario[Fecha] )
)
RETURN

IF (
VentasPY,
DIVIDE (
VentasTotal – VentasPY,
VentasTotal
)
)

Podremos reducir la complejidad de nuestras medidas, facilitando con variables, no ya su comprensión que también, si no, además, la complejidad de la medida.

Una de las fórmulas DAX, quizás más difícil de entender y utilizar al principio, se la función EARLIER(). Veamos un ejemplo de una medida DAX en la que sustituiremos la función EARLIER, por una variable.

Supongamos que queremos crear una columna calculada, que nos indique el numero de ventas cuyo importe fue mayor que el importe en el contexto de fila actual

VentasporEncima =

    COUNTROWS (
FILTER (
Facturas;
Facturas[Importe]  >  EARLIER ( Facturas[Importe] )
)
)

 

Con variables podríamos escribir esa misma columna calculada, de la siguiente manera:

VentasporEncima =

VAR 

ImporteActual  =  Facturas[Importe]

RETURN

COUNTROWS (
FILTER ( Facturas ;  Facturas[Importe]  > ImporteActual
)

 

Donde la expresión, ha ganado en simplicidad y comprensión, evitando la utilización de una formula DAX que a veces suele ser engorrosa de utilizar adecuadamente.

1

Sobre el Autor:

  Posts Relacionados
  • No related posts found.

Comments

  1. Arlinda Scotti Mapes  agosto 23, 2020

    Uno puede aprender algo nuevo aquí todos los días. Estoy un habitual para la mayoría de los blogs, pero aún no sabía nada de un par de ellos. Arlinda Scotti Mapes

    reply

Escribe un Comentario