⚖️

Columnas Calculadas vs Medidas

Una de las decisiones más importantes en DAX: entender cuándo usar columnas calculadas y cuándo usar medidas marcará la diferencia entre un modelo lento y uno eficiente

Principiante
📋

Columnas Calculadas

¿Qué es una columna calculada?

Una columna calculada es una columna nueva que añades a una tabla existente usando una fórmula DAX. Se calcula una vez durante la actualización de datos y su resultado se almacena en el modelo — ocupa espacio en memoria.

Características:

  • Se evalúa fila por fila (contexto de fila)
  • El resultado se almacena en el archivo PBIX (en memoria)
  • Se calcula al actualizar datos, no en tiempo de consulta
  • Puede usarse en slicers, ejes X/Y de gráficos, filas de tabla, y para filtrar
  • Puede usarse como campo en relaciones

Ejemplo:

// Columna calculada en FactVentas — se almacena en el modelo
Importe Total = FactVentas[Cantidad] * FactVentas[PrecioUnitario]

// Columna calculada con IF — categoriza cada fila
Segmento Precio =
IF(
    FactVentas[PrecioUnitario] > 100,
    "Premium",
    IF(FactVentas[PrecioUnitario] > 50, "Medio", "Básico")
)

// Columna calculada con RELATED — trae datos de otra tabla
Categoria Producto = RELATED(DimProducto[Categoria])
📏

Medidas (Measures)

¿Qué es una medida?

Una medida es una fórmula DAX que se evalúa dinámicamente en el momento de la consulta, respondiendo al contexto de filtro actual del visual o informe. No almacena datos — solo calcula cuando es necesario.

Características:

  • Se evalúa en contexto de filtro (no fila por fila)
  • No ocupa espacio en memoria — solo se calcula cuando se usa
  • Se recalcula dinámicamente con cada cambio de filtro o slicer
  • Puede usarse en la sección Valores de un visual
  • Puede contener CALCULATE para modificar el contexto de filtro

Ejemplo:

// Medida básica — se recalcula según los filtros del visual
Ventas Totales = SUM(FactVentas[Importe Total])

// Medida con CALCULATE — modifica el contexto de filtro
Ventas Año Anterior =
CALCULATE(
    SUM(FactVentas[Importe Total]),
    SAMEPERIODLASTYEAR(DimFecha[Fecha])
)

// Medida de ratio — combina dos medidas
% Margen =
DIVIDE(
    SUM(FactVentas[Margen]),
    SUM(FactVentas[Importe Total]),
    0
)
🔍

Diferencias Clave

Comparativa completa

📋 Columna Calculada

  • Contexto de fila (row context)
  • Se calcula al actualizar datos
  • Almacena el resultado (usa RAM)
  • Puede usarse en slicers y ejes
  • Puede usarse en relaciones
  • No puede usar CALCULATE directamente
  • Visible en la tabla de datos

📏 Medida

  • Contexto de filtro (filter context)
  • Se calcula en tiempo de consulta
  • No almacena datos (usa CPU)
  • Solo en la sección "Valores"
  • No puede usarse en relaciones
  • Puede usar CALCULATE libremente
  • No ocupa columnas en tablas

Impacto en el rendimiento:

Aspecto Columna calculada Medida
Tamaño del archivo PBIX Aumenta (guarda datos) No cambia
Tiempo de actualización Aumenta (recalcula todas) No afecta
Velocidad de consulta Rápida (dato ya calculado) Variable (depende de la fórmula)
Flexibilidad Resultado fijo Responde al contexto dinámicamente
🎯

¿Cuándo Usar Cada Una?

Usa una columna calculada cuando...

  • Necesitas el valor para filtrar, agrupar o segmentar (en un slicer o eje de gráfico)
  • Necesitas crear una columna de clave para una relación
  • El cálculo no depende del contexto del visual (es fijo por fila)
  • Necesitas acceder a valores de otra tabla relacionada con RELATED()
  • La columna no existe en el origen y sería difícil crearla en Power Query

Usa una medida cuando...

  • Necesitas un valor que cambia según los filtros del informe
  • Quieres hacer totales, ratios, comparativas o cálculos de período anterior
  • El cálculo requiere CALCULATE o funciones de inteligencia de tiempo
  • Quieres mantener el archivo PBIX pequeño
  • El cálculo es una agregación (SUM, AVERAGE, COUNT, etc.)
💡 Regla de oro: Si tu cálculo termina con SUM, AVERAGE, COUNT, MAX, MIN o cualquier otra agregación — es una medida. Si describes un atributo de una fila específica (color, categoría, precio con descuento) — puede ser una columna calculada. Cuando tengas duda, elige la medida: es más flexible y eficiente. 🌸
⚠️

Errores Comunes de Principiantes

Error #1: Crear columnas calculadas para todo

El error más frecuente es crear una columna calculada Ventas = SUM(FactVentas[Importe]). Esto no funciona como esperas — SUM en una columna calculada suma toda la tabla sin tener en cuenta los filtros del informe. Siempre crea medidas para las agregaciones.

Error #2: Columnas calculadas con alta cardinalidad innecesaria

Crear columnas calculadas que generan muchos valores únicos (como concatenar ID + fecha para crear un ID único) aumenta la cardinalidad del modelo y lo hace más lento. Si no necesitas esa columna para filtrar o como clave de relación, evítala.

Error #3: No usar tablas de medidas

// RECOMENDADO: crea una tabla vacía solo para organizar medidas
// En Power Query crea una tabla: = #table({},{})
// Nómbrala "Medidas" o "_Medidas" (el _ la pone al principio)

// Así todas tus medidas quedan organizadas en un sitio
// y no dispersas por todas las tablas del modelo
📌 Buena práctica: Crea siempre una tabla vacía dedicada para tus medidas (se llama tabla de medidas o measure table). Nómbrala con un guion bajo al principio (_Medidas) para que aparezca primero en el panel de campos y sea fácil de encontrar.
🚀 ¡Gran avance! Ahora que entiendes la diferencia, el siguiente paso es aprender a crear medidas poderosas con las funciones de filtro y contexto DAX (CALCULATE, ALL, FILTER). Para entender el impacto en rendimiento en profundidad, visita Optimización de Rendimiento.