🔀

Modelos Compuestos

La arquitectura avanzada que combina lo mejor de Import y DirectQuery en un único modelo: datos históricos rápidos + datos en tiempo real frescos

Avanzado
🔀

¿Qué son los Modelos Compuestos?

Un modelo con múltiples modos de conexión

Un modelo compuesto es un modelo de Power BI donde diferentes tablas pueden usar diferentes modos de almacenamiento en el mismo modelo. Algunas tablas están en modo Import (cargadas en memoria), otras en modo DirectQuery (consultadas en tiempo real a la fuente).

Antes de los modelos compuestos, todo el modelo era o Import o DirectQuery. Con los modelos compuestos, puedes mezclar según las necesidades de cada tabla.

Cuándo necesitas un modelo compuesto:

  • Tienes tablas de hechos enormes que no puedes cargar en Import (Big Data, 10B+ filas)
  • Necesitas datos en tiempo real para algunos indicadores (ventas del día) pero histórico rápido para el resto
  • Quieres combinar datos de múltiples fuentes con diferentes requisitos de latencia
  • Implementas agregaciones (que requieren que la tabla de detalles sea DirectQuery y la agregación Import)
📦

Modos de Almacenamiento

Los tres modos disponibles

Import

Datos cargados en memoria. Consultas ultrarrápidas. Actualización programada.

DirectQuery

Consulta en tiempo real a la fuente. Sin límite de tamaño. Depende del origen.

Dual

Cargada en memoria Y disponible para DirectQuery. Actúa como Import o DQ según el contexto.

Modo Dual: el más importante para modelos compuestos

El modo Dual es especial: la tabla se carga en memoria (como Import) pero también puede ser consultada en DirectQuery si el contexto lo requiere. Las dimensiones en modo Dual son perfectas para modelos compuestos porque:

  • Cuando se usan con tablas Import → se resuelven desde memoria (rápido)
  • Cuando se usan con tablas DirectQuery → se incluyen en la consulta SQL enviada al origen (consistencia)
  • Esto evita las "islas de datos" (explicadas abajo)

Cómo cambiar el modo de almacenamiento:

  • Vista de modelo → selecciona la tabla → panel de propiedades → "Modo de almacenamiento"
  • O clic derecho en la tabla en la vista de modelo → "Propiedades"
  • Advertencia: cambiar de Import a DirectQuery es destructivo (requiere confirmación)
🏝️

Islas de Datos

El problema de mezclar tablas sin modo Dual

Una isla de datos ocurre cuando tienes tablas DirectQuery y tablas Import que no están conectadas a través de una tabla en modo Dual o Import. Power BI no puede combinar los resultados de ambas islas en una sola consulta SQL, lo que fuerza consultas separadas y puede producir resultados incorrectos o lentos.

// PROBLEMA — Dos islas separadas:
DimProducto (Import) ─── FactVentas (DirectQuery)  // isla DirectQuery
DimCliente  (Import)                                 // isla Import

// Si DimCliente no tiene relación con FactVentas DirectQuery
// → Power BI no puede crear un solo query SQL
// → Comportamientos inesperados en los visuals

// SOLUCIÓN — Usar modo Dual para las dimensiones compartidas:
DimProducto (Dual) ─── FactVentas (DirectQuery)    // dimensión en ambas islas
DimCliente  (Dual) ─── FactVentas (DirectQuery)    // dimensión en ambas islas
// → Power BI puede incluir las dimensiones en el SQL enviado al origen
📌 Buena práctica: En un modelo compuesto, configura tus tablas de dimensión en modo Dual. Deja tus tablas de hechos de gran volumen en DirectQuery y tus tablas de hechos históricas o de resumen en Import.

Patrón Recomendado

Arquitectura de modelo compuesto con agregaciones

// Arquitectura típica de modelo compuesto:

// Dimensiones → Modo DUAL (en memoria + disponibles para DQ)
DimFecha     (Dual)  ← Tabla de fechas, pequeña
DimProducto  (Dual)  ← Dimensión, pocas filas
DimCliente   (Dual)  ← Dimensión, pocas filas
DimTienda    (Dual)  ← Dimensión, pocas filas

// Agregación → Modo IMPORT (en memoria, muy rápida)
FactVentas_Agg (Import)  ← 1M filas resumen por mes+producto
// Responde el 90% de los visuals del dashboard ejecutivo

// Tabla de hechos → DIRECTQUERY (en el origen, sin límite)
FactVentas  (DirectQuery)  ← 5B filas en Azure Synapse
// Solo se consulta para drill-down a nivel de transacción

// Resultado:
// → Visuals ejecutivos: respuesta en < 1 segundo (usa Import)
// → Drill-down de transacciones: 2-5 segundos (usa DirectQuery)
// → Dataset puede tener 5 billones de filas sin limitación de tamaño
⚠️

Limitaciones y Consideraciones

Lo que debes tener en cuenta

  • Complejidad: Los modelos compuestos son más difíciles de depurar y mantener que los modelos puramente Import
  • No todas las funciones DAX funcionan: Algunas funciones (como SUMMARIZECOLUMNS con filtros complejos) pueden no optimizarse bien en DirectQuery
  • Seguridad de datos: Los datos de diferentes fuentes pueden tener diferentes niveles de privacidad — configura correctamente los niveles de privacidad en la fuente
  • Actualizaciones: Las tablas Import necesitan actualización programada; las DirectQuery son siempre frescas — planifica los tiempos de actualización
  • Gateway requerido: Para fuentes on-premise en DirectQuery necesitas un Data Gateway instalado y configurado
⚠️ Ojo con esto: Los modelos compuestos son una tecnología avanzada. No los uses por defecto — evalúa primero si Import puro con optimizaciones es suficiente. La complejidad extra solo se justifica cuando el volumen de datos o la necesidad de tiempo real son reales y no pueden resolverse de otra manera.
🚀 ¡Arquitectura avanzada dominada! Para profundizar en los patrones de diseño más complejos del modelado, visita Patrones Avanzados donde se cubren role-playing dimensions, SCD, bridge tables y más. Si tu objetivo es rendimiento extremo, combina modelos compuestos con Agregaciones.