DAX – Introducción – Parte 2 – Columnas calculadas

Las columnas calculadas poseen las siguientes características:

  • Su definición aplica para todos los registros de la tabla que la contiene y se calculan registro a registro.
  • Se construyen con una expresión DAX, cuya función debe retornar un valor simple.
  • Los valores de estas columnas se calculan al actualizar el modelo de datos, manteniéndose estáticas hasta la próxima actualización.
  • Ocupan memoria, su calculo es persistido físicamente.
  • Son útiles para agrupaciones, filtros o como punto intermedio de un calculo complejo.
  • Tienen la potencia que pueden calcularse a partir de cualquier otras tablas y columnas del modelo, independiente del origen de cada una.
  • Los nombres de columnas son únicos dentro de la tabla que las contiene.

El mayor potencial de la columnas calculadas se logra cuando nuestro modelo posee datos importados, en cambio cuando trabajamos en modo DirectQuery las columnas calculadas poseen una capacidad mas limitada.

La sintaxis para definir una columna calculada es

NombreDeColumna = ExpresionDAX

un ejemplo sencillo:

DiaDeSemana = WEEKDAY( [OrderDate])

En este caso la columna se llamara «DiaDeSemana» y almacenara valores del 1 al 7 correspondiente al día de semana de la columna «OrderDate»

DAX - Columnas Calculadas 1

otro ejemplo podría ser

VentasTotal = [OrderQuantity] * [UnitPrice]

en este caso estamos calculando una columna como el producto de otras dos, como podría ser Cantidad x Precio, para obtener el monto de las ventas

DAX - Columnas Calculadas 2

Tambien es posible que una columna de una tabla guarde el resultado de una expresión sobre una segunda tabla, por ejemplo

VentasTotal = SUMX( Sales, Sales[UnitPrice] * Sales[OrderQuantity] )

En este caso si la columna la alojamos en la tabla clientes por ejemplo, estaremos calculando una columna que contendrá el total de las ventas de la tabla Sales, para ser mas exacto, estamos diciéndole que recorra la tabla Sales y realice el producto de dos columnas y los sume.

Veremos lo siguiente:

DAX - Columnas Calculadas 3

Como se puede observar como estamos calculando valores basados en otra tabla, cada fila posee el mismo valor, pues nuestra expresión esta diciendo para cada fila en la tabla «Customer», itera (SUMX) sobre la tabla «Sales», realiza el producto de «Quantity» y «Unit Price» y súmalo (SUMX)

Ahora si en cambio escribimos lo siguiente

VentasTotalCliente = SUMX( RELATEDTABLE( Sales), Sales[UnitPrice] * Sales[OrderQuantity])

lo que obtenemos es

DAX - Columnas Calculadas 4.png

En este caso estamos diciéndole que al iterar (SUMX) lo realice sobre los registros relacionados (RELATEDTABLE).

Ahora sirve tener estas dos columnas de ventas como columnas del cliente?, y la respuesta seria «depende», quizás con unas medidas logremos lo buscando, sin ocupar espacio, y teniendo otros beneficios adicionales.

Para novatos la sugerencia seria traten de armar «medidas», excepto que lo que necesiten sea una «columna calculada», pero no apliquen el pensamiento opuesto…

Deja un comentario