Es de las primeras dudas que le surgen a cualquiera que empieza con DAX: «esto que quiero calcular, ¿lo hago como columna calculada o como medida?». Ambas usan el mismo lenguaje, pero por debajo funcionan de forma completamente distinta, y elegir mal tiene un coste real en el tamaño del modelo y en el rendimiento del informe.
Dos formas de calcular, dos momentos distintos
Una columna calculada se evalúa fila a fila durante la actualización de datos (el refresh). El resultado se calcula una vez y se guarda físicamente en el modelo, exactamente igual que si fuera una columna más que hubiera venido del origen. Por eso su contexto natural es el contexto de fila: cuando escribes la fórmula, DAX ya sabe en qué fila está posicionado.
Una medida, en cambio, no se calcula hasta que un visual la pide. No ocupa espacio como dato almacenado: cada vez que interactúas con un segmentador, cambias de página o aplicas un filtro, la medida se recalcula al vuelo usando el contexto de filtro que esté activo en ese momento.
Ejemplo sobre una tabla de ventas genérica
Supongamos una tabla Ventas con las columnas Cantidad y PrecioUnitario. Si quiero el importe de cada línea, tiene sentido como columna calculada, porque es un valor fijo por fila que no depende de lo que el usuario esté filtrando:
Importe = Ventas[Cantidad] * Ventas[PrecioUnitario]
Pero si lo que quiero es el total de ventas para lo que se esté viendo en el informe (un año, una región, un producto), eso es una medida, porque tiene que reaccionar al contexto de filtro:
Total Ventas = SUM(Ventas[Importe])
| Aspecto | Columna calculada | Medida |
|---|---|---|
| Cuándo se calcula | Durante la actualización de datos | En el momento de la consulta, bajo demanda |
| Almacenamiento | Sí, el resultado se guarda en el modelo | No, no ocupa espacio como dato |
| Contexto natural | Contexto de fila | Contexto de filtro |
| Reacciona a filtros del informe | No, el valor ya quedó fijado en el refresh | Sí, se recalcula con cada interacción |
| Uso típico | Usarla en segmentadores, filas, relaciones o filtros | Agregaciones, KPIs, ratios que varían según el contexto |
Idea clave: si necesitas que el valor pueda usarse para filtrar o agrupar (por ejemplo, un segmentador de «rango de importe»), necesitas una columna calculada, porque una medida no puede ir dentro de un segmentador ni en los ejes de una tabla como campo de agrupación.
El coste de elegir mal
Convertir cálculos pesados en columnas calculadas cuando en realidad son agregaciones que dependen del contexto (por ejemplo, «porcentaje sobre el total») es un error habitual: además de no funcionar como esperas cuando el usuario filtra, ese resultado queda fijado en el modelo y aumenta su tamaño en memoria de forma innecesaria. Al revés, forzar como medida algo que en realidad debería estar fijado por fila puede llevarte a escribir fórmulas DAX mucho más complicadas de lo necesario, con funciones de contexto de fila que se podrían haber evitado.
- Si el resultado tiene que aparecer en un segmentador, en filas o en columnas de una tabla, necesitas columna calculada.
- Si el resultado es una agregación (suma, promedio, ratio) que depende de lo que el usuario esté viendo, necesitas medida.
- Evita columnas calculadas «por comodidad»: cada una que añadas aumenta el tamaño del modelo en cada actualización.
- Prefiere medidas explícitas frente a los totales implícitos de Power BI: te dan control total sobre el formato y el comportamiento del cálculo.
- Si dudas entre las dos, pregúntate: «¿este valor cambia si el usuario filtra?». Si la respuesta es sí, casi seguro que es una medida.
Unas medidas DAX perfectas no sirven de mucho si debajo hay un modelo de datos mal planteado, ¿verdad? Vale la pena revisar primero los cimientos.
Leer el artículo sobre el modelo de estrella en Power BI