(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa
Modelação de Dados (Kimball)
Modelação de Dados (Kimball) 2 min

Modelado para Power BI: optimizar el modelo semántico con VertiPaq

João Barros 06 de January de 2026 2 min de lectura

El motor VertiPaq de Power BI (y Analysis Services) tiene características de almacenamiento y ejecución diferentes de un RDBMS tradicional. Modelar específicamente para VertiPaq puede mejorar el rendimiento de las consultas en 10x o más.

Cómo almacena los datos VertiPaq

VertiPaq = columnar + compresión por diccionario
  - Cada columna almacenada por separado
  - Diccionario: valores únicos → IDs enteros compactos
  - Run-length encoding para valores repetidos consecutivos
  - Impacto: las columnas con POCOS valores únicos comprimen mejor
  - 1 columna TEXT "Pais" con 50 valores únicos ≈ 3-4 bytes/fila
  - 1 columna TEXT "Descripcion" con 1M valores únicos ≈ 50+ bytes/fila

Reglas de oro para VertiPaq

1. ELIMINAR columnas no usadas en visuales o relaciones
   → Cada columna ocupa memoria INCLUSO sin relaciones

2. EVITAR columnas de alta cardinalidad innecesarias
   → Campos como "comentario libre" o "ID secuencial con prefijo"
   → Prefiera enteros (ID INT) a strings ('PROD-001234')

3. NUNCA usar RELATED() en columnas calculadas en tablas de hechos
   → Materializa la columna en cada fila — explota el modelo

4. USAR medidas en lugar de columnas calculadas para agregaciones
   → Las medidas se calculan en query time; las columnas calculadas ocupan memoria

5. FECHAS como tipo Date (no DateTime) cuando no necesita la hora
   → DateTime tiene una cardinalidad mucho mayor

Diagnóstico con DAX Studio

-- Ver el tamaño de cada columna del modelo
EVALUATE
SELECTCOLUMNS(
    FILTER(
        INFO.STORAGETABLECOLUMNS(),
        [DICTIONARY_SIZE_KB] > 100
    ),
    "Tabla",        [DIMENSION_NAME],
    "Columna",      [ATTRIBUTE_NAME],
    "Dict KB",      [DICTIONARY_SIZE_KB],
    "Data KB",      [USED_SIZE_KB],
    "Cardinalidad", [SEGMENT_COUNT]
)
ORDER BY [DICTIONARY_SIZE_KB] DESC

Relaciones y filtrado

-- Reglas para las relaciones Power BI:
✓ Siempre que sea posible: relación 1:N (dimensión → hechos)
✗ Evitar: many-to-many directas
✗ Evitar: filtrado bidireccional (Both)
   → Causa consultas ambiguas y loops de filtrado
   → Use la función DAX CROSSFILTER() solo cuando sea absolutamente necesario

Conclusión

Optimizar para VertiPaq no es sobre SQL — es sobre cardinalidad, número de columnas y diseño de medidas. Un modelo bien optimizado cabe en 10x menos memoria, carga en la mitad del tiempo y responde a las consultas 5-10x más rápido. Invierta 30 minutos en DAX Studio tras cada refresh de modelo.

Compartir: