Tablas de resumen precalculadas que permiten consultas ultrarrápidas sobre modelos con millones o miles de millones de filas — especialmente en DirectQuery
Avanzado
🔍
¿Qué son las Agregaciones?
Tablas de resumen para grandes volúmenes
Una agregación en Power BI es una tabla de resumen que contiene datos precalculados a un nivel de granularidad superior al de la tabla de detalles. Permite que Power BI use estos resúmenes para responder consultas de alto nivel, evitando acceder a millones de filas del origen.
Ejemplo conceptual:
-- Tabla de detalles (1.000 millones de filas en DirectQuery)
FactVentas: [IDFecha, IDCliente, IDProducto, IDTienda, Cantidad, Importe]
-- Tabla de agregación (500.000 filas en modo Import)
FactVentas_Agg: [IDFecha, IDProducto, SumaCantidad, SumaImporte, ConteoFilas]
-- Agrupa por Fecha + Producto (elimina el detalle de Cliente y Tienda)
Cuando un visual pide "ventas por mes y producto", Power BI usa la agregación (500K filas en memoria, respuesta instantánea). Cuando un visual pide "ventas por cliente individual", Power BI va a la tabla de detalles (1B filas en DirectQuery, más lento pero posible).
⚙️
Cómo Funcionan las Agregaciones
El proceso de consulta con agregaciones
Power BI evalúa automáticamente si puede responder una consulta con la tabla de agregación o necesita ir al detalle. El proceso es:
1. Análisis de la consulta: Power BI analiza qué columnas y métricas pide el visual
2. Comprobación de cobertura: ¿Pueden las columnas de la agregación responder esta consulta? ¿El nivel de agrupación es suficiente?
3. Cache hit (acierto): Si sí, usa la agregación — respuesta en milisegundos desde memoria
4. Cache miss (fallo): Si no, lanza una consulta SQL a la fuente directamente — más lento
Porcentaje de acierto (Hit Ratio):
El objetivo es maximizar el porcentaje de consultas que se resuelven desde la agregación. En un modelo bien diseñado, el 90-95% de las consultas de los informes ejecutivos usan la agregación, y solo el drill-down a nivel muy granular accede al detalle.
🛠️
Cómo Configurar las Agregaciones
Pasos para implementar una tabla de agregación
Paso 1: Crea la tabla de agregación en Power Query
// En Power Query, crea una nueva consulta que agrupa FactVentas
// Esta tabla puede estar en modo Import aunque FactVentas sea DirectQuery
// Power Query M:
let
Origen = FactVentas, // Referencia a la tabla de hechos
AgrupadoPor = Table.Group(
Origen,
{"IDFecha", "IDProducto"}, // Dimensiones de agrupación
{
{"SumaCantidad", each List.Sum([Cantidad]), type number},
{"SumaImporte", each List.Sum([Importe]), type number},
{"ConteoFilas", each Table.RowCount(_), type number}
}
)
in
AgrupadoPor
Paso 2: Cambia el modo de almacenamiento
Selecciona la tabla de agregación en la vista de modelo
En "Propiedades", cambia el modo de almacenamiento a Import
La tabla original (FactVentas) permanece en DirectQuery
Paso 3: Configura las agregaciones
Clic derecho en la tabla de agregación → "Administrar agregaciones"
Para cada columna de métrica (SumaCantidad, SumaImporte, etc.):
Asigna la función de resumen: SUM, COUNT, MIN, MAX, COUNTROWS
Asigna a qué columna de la tabla de detalles corresponde
Para las columnas de dimensión (IDFecha, IDProducto): asigna "Agrupar por"
Paso 4: Oculta la tabla de agregación
Oculta la tabla de agregación del panel de campos — los usuarios no deben saber que existe. Power BI la usará automáticamente cuando sea posible, sin intervención del usuario o del creador del informe.
🏆
Precedencia de Consultas
Múltiples niveles de agregación
Puedes tener varias tablas de agregación en diferentes niveles de granularidad. Power BI las evalúa en orden de precedencia (el número más alto tiene mayor prioridad). Siempre intenta usar el nivel más agregado que pueda responder la consulta.
// Tres niveles de agregación para FactVentas (1B filas en DQ):
// Nivel 3 (precedencia alta): Por año + categoría
FactVentas_Agg_Anual: [Año, Categoria, SumaImporte] → 10K filas
// Responde: "ventas totales por año y categoría" (muy rápido)
// Nivel 2 (precedencia media): Por mes + producto
FactVentas_Agg_Mensual: [IDFecha_Mes, IDProducto, SumaImporte] → 500K filas
// Responde: "ventas por mes y producto" (rápido)
// Nivel 1 (precedencia baja): Por día + producto
FactVentas_Agg_Diario: [IDFecha, IDProducto, SumaImporte] → 5M filas
// Responde: "ventas diarias por producto" (bastante rápido)
// Si ningún nivel cubre la consulta → DirectQuery a FactVentas (1B filas, más lento)
🎯
¿Cuándo Usar Agregaciones?
Las agregaciones son la solución cuando:
Tienes tablas de hechos con más de 10-50 millones de filas en DirectQuery
La mayoría de los visuals ejecutivos trabajan a niveles altos de agregación (mes/año, categoría, región)
Solo algunos usuarios necesitan el drill-down a nivel de detalle
El rendimiento del DirectQuery puro no es aceptable para el negocio
No puedes migrar a modo Import por limitaciones de gobernanza o tamaño
Alternativa: Modelo Compuesto
Las agregaciones funcionan mejor en combinación con los Modelos Compuestos: la tabla de agregación en modo Import (rápida, en memoria) y la tabla de detalles en modo DirectQuery (fresca, siempre actualizada).
📌 Buena práctica: Antes de implementar agregaciones, analiza los patrones de uso de tu informe con el Performance Analyzer. Identifica qué consultas son lentas y a qué nivel de granularidad operan. Diseña las agregaciones para cubrir el 80-90% de esas consultas.
🚀 ¡Siguiente nivel! Las agregaciones son más efectivas cuando se combinan con Modelos Compuestos para mezclar modos Import y DirectQuery estratégicamente. Para optimización más amplia del modelo, revisa Optimización de Rendimiento.