POWER BI: ¿Debo crear una columna calculada o una medida en DAX?

POWER BI: ¿Debo crear una columna calculada o una medida en DAX?

Photo by Keira Burton on Pexels.com

DAX es el lenguaje nativo de Power BI cuya naturaleza es funcional, lo que indica que cada expresión es una llamada a una función. Tiene la particularidad de que el contexto de evaluación de las consultas es como el corazón del funcionamiento de dicho lenguaje.

El contexto de evaluación puede hacer referencia al contexto del filtro o al contexto de la fila. El contexto de filtro se le llama al que filtra los datos, mientras que el contexto de la fila, es un contexto que itera la tabla. Es importante anotar que cuando DAX itera, no filtra la tabla. Por eso no son lo mismo.

Justo por esta razón, al iniciar a codificar código utilizando DAX en los informes de Power BI, resulta en ocasiones confuso si se debe utilizar una columna calculada o una medida. Si optamos por crear una columna calculada, esta se puede realizar de dos maneras, una es por medio del panel de Datos que se ubica a la izquierda de la aplicación de Power BI Desktop tal y como se muestra en la Figura No.1:

Figura 1: Crear una columna desde el panel de “Data”.

Otra forma de realizar la misma acción es desde el panel de “Fields” de la derecha, al seleccionar una tabla y darle clic derecho + “New column” como se visualiza en la Figura No.2:

Figura 2: Crear una columna calculada desde el panel de la derecha de “Fields”.

Por otra parte, cuando hablamos de medidas, estas son creadas desde el panel de “Fields” o “Campos” ubicado al lado derecho de la aplicación, y donde se habilita la opción de crear nuevas medidas tal y como se muestra en la Figura No.3:

Figura 3: Crear una medida desde el panel de la derecha de “Fields”.

Aunque parecen muy similares, la columna calculada se basa en datos cargados en el modelo. Aplica la fórmula individualmente a cada fila. Se evalúa en su definición y se almacena en el modelo (implica memoria RAM y espacio). La columna calculada aplica en un contexto de fila (en inglés llamado “Row Context”).

Por otro lado, una medida se calcula en el tiempo de consulta, es guardada como código fuente, pero se calcula solamente cuando se utiliza en el informe y aplica en contexto de filtro (en inglés llamado “Filter Context”).

En resumen, se podrían comparar de la siguiente forma:

Columna CalculadaMedida
Se almacena, ocupa espacioNo se almacena, solo el código fuente de la fórmula
Consume memoria RAMConsume CPU
Se calcula cuando se refresca el reporteSe calcula en tiempo de ejecución de la consulta
CONTEXTO:  ROW (fila por fila)CONTEXTO: Filtro
Tabla 1: Comparación entre columna calcula y medidas en DAX.

Por ejemplo, supóngase que tenemos la siguiente formula:

Sales[Quantity] * (Sales[Net Price] – Sales[Unit Cost])

¿Considera usted que puede ser usada como columna calculada, como medida o ambas?

Para responder la pregunta, véase la Figura No.4 donde es utilizada como una columna calculada de la tabla llamada “Sales”:

Figura 4: Codificando la columna calculada “Gross Margin” en POWER BI.

Sin embargo, si colocamos la misma fórmula en el código de una medida de “Sales” obtendremos la siguiente advertencia luego de codificarla, como se muestra a continuación en la Figura No.5:

Figura 5: Error al crear una medida.

En este caso, el código es el mismo que se utiliza para la columna calculada, sin embargo, lo que afecta en uno u otro cálculo es el contexto. En el caso de la columna calculada, mostrada en la Figura No.4, tiene un comportamiento predeterminado de contexto de fila, los datos de cada fila determinan su contexto. Por otro lado, la medida, correspondiente a la Figura No.5, no posee dicho contexto, no tiene visibilidad de las filas de los datos, por ende, genera el error que no puede determinar las columnas utilizadas en la fórmula. Es por este motivo que, para poder utilizarlas, se requiere de iteraciones y funciones que utilicen agregación, como por ejemplo SUMX entre otras.

Para finalizar, recuerde tener presente cuál es el objetivo del cálculo que desea agregar a su informe, para definir si requiere hacerlo fila por fila, o si es de tipo de agregación o iteración sobre todo el conjunto de datos, eso le ayudara de antemano a tener claro si usa una medida o una columna calculada.

Bibliografía

Russo, M., & Ferrari, A. (2020). The Definitive Guide to DAX. Pearson Education , Inc.