💡 Introducción
En el ecosistema de BI, existe una verdad fundamental que todo profesional de datos debe asimilar: un reporte visualmente asombroso es inútil si tarda treinta segundos en cargar un gráfico. En Power BI, el rendimiento y la escalabilidad de nuestras soluciones no dependen principalmente de la potencia de la máquina del usuario final, sino de la arquitectura subyacente de nuestro modelo de datos.
🛠️ Principios de un Modelado de Datos de Alto Rendimiento
1. Esquema en Estrella (Star Schema)
Aunque Power BI ofrece la flexibilidad de trabajar con modelos planos o esquemas Snowflake, el Esquema en Estrella sigue siendo la recomendación oficial y el estándar de oro para el modelado multidimensional. Este diseño organiza los datos en dos tipos de tablas claramente diferenciadas:
- Tablas de Hechos (Fact Tables): Contienen los datos cuantitativos u observaciones del negocio (ventas, transacciones, logs). Son tablas estrechas y muy largas, compuestas por métricas y claves externas (FK).
- Tablas de Dimensiones (Dimension Tables): Contienen los atributos descriptivos que contextualizan los hechos (clientes, productos, tiempo, geografía). Son tablas anchas con texto o descripciones detalladas.

2. Entendiendo el Motor VertiPaq y la Cardinalidad
Power BI utiliza el motor analítico en memoria VertiPaq, el cual emplea un almacenamiento de bases de datos orientadas a columnas. A diferencia de las bases de datos relacionales tradicionales que almacenan datos por filas, VertiPaq comprime cada columna de forma independiente utilizando algoritmos como Value Encoding, Hash Encoding y Run-Length Encoding (RLE).
3. Query Folding
El rendimiento del modelo comienza en la fase de extracción y transformación de datos (ETL). El Query Folding es la capacidad de Power Query de traducir los pasos de transformación definidos en la interfaz gráfica a una única consulta SQL nativa que se ejecuta directamente en el origen de datos de origen (servidor SQL, Synapse, Snowflake, etc.).
⚖️ Tabla Comparativa: Prácticas Recomendadas vs. Errores Comunes
A continuación, presentamos una comparativa directa para evaluar la salud de tus modelos de Power BI:
| Aspecto de Diseño | Práctica Recomendada | Error Común |
|---|---|---|
| Granularidad Temporal | Separar fechas y horas en columnas distintas. Redondear horas a minutos o cuartos de hora si la precisión absoluta no es crítica. | Mantener columnas de tipo «Fecha/Hora» combinadas, disparando la cardinalidad del modelo. |
| Dirección de Relaciones | Relaciones unidireccionales de 1 a varios (*). | Uso excesivo de relaciones bidireccionales para «simplificar» filtros, generando ambigüedad y lentitud. |
| Uso de Columnas Calculadas | Crear columnas calculadas en el origen de datos o en Power Query antes de cargar al modelo. | Crear columnas calculadas complejas con DAX, las cuales no se comprimen eficientemente. |
| Selección de Columnas | Importar únicamente las columnas estrictamente necesarias para la visualización y el análisis. | Hacer un «SELECT *» o traer tablas completas de la base de datos «por si acaso» se necesitan en el futuro. |
✍️ Mini Ejercicio Práctico: Optimización de Cardinalidad con Power Query
Para ilustrar el impacto de la cardinalidad en el almacenamiento, simularemos un escenario común: optimizar una columna de transacciones que incluye la marca de tiempo exacta (Fecha y Hora).
Sigue estos pasos en tu editor de Power Query para reducir drásticamente el tamaño de tu archivo y acelerar el rendimiento del modelo:
Paso 1: Identificar el problema
Imagina que tienes una tabla de hechos llamada FactVentas con 5 millones de filas. La columna FechaTransaccion tiene el formato DD/MM/AAAA HH:MM:SS. Al tener segundos y minutos únicos, esta columna tiene casi 5 millones de valores únicos (cardinalidad extrema).

Paso 2: Separar los componentes
Vamos a dividir esta columna en dos columnas individuales: una columna de Fecha (para relaciones de calendario) y una columna de Hora (para análisis de patrones de tráfico intradiario si es necesario).
// Código M ilustrativo del proceso de separación en Power Query
let
Origen = Sql.Database("ServidorSQL", "DB_Ventas"),
FactVentas_Table = Origen{[Schema="dbo",Item="FactVentas"]}[Data],
// Duplicamos la columna original para preservar datos
#"Columna Duplicada" = Table.DuplicateColumn(FactVentas_Table, "FechaTransaccion", "SoloHora"),
// Cambiamos el tipo de la primera columna a solo Fecha
#"Tipo Fecha Cambiado" = Table.TransformColumnTypes(#"Columna Duplicada",{{"FechaTransaccion", type date}}),
// Cambiamos el tipo de la segunda columna a solo Hora
#"Tipo Hora Cambiado" = Table.TransformColumnTypes(#"Tipo Fecha Cambiado",{{"SoloHora", type time}}),
// Opcional: Redondear la hora a la hora en punto para reducir drásticamente la cardinalidad
#"Hora Redondeada" = Table.TransformColumns(#"Tipo Hora Cambiado", {{"SoloHora", Time.StartOfHour, type time}})
in
#"Hora Redondeada"
Paso 3: El Resultado
Al realizar este cambio:
- La columna FechaTransaccion ahora solo tiene fechas únicas (baja cardinalidad, típicamente unos pocos cientos o miles de valores según el histórico).
- La columna SoloHora, al estar redondeada al inicio de la hora, pasa de tener millones de variaciones a solo 24 valores únicos posibles.
- El motor VertiPaq ahora puede comprimir ambas columnas a una fracción minúscula de su tamaño original, liberando memoria RAM y acelerando los cálculos DAX concurrentes.
📚 Fuentes Consultadas
Para expandir tus conocimientos teóricos y técnicos sobre arquitectura de datos en Power BI, recomendamos consultar las siguientes fuentes de alta autoridad en la industria:
- Entender el esquema en estrella y su importancia para Power BI
- SQLBI (Marco Russo & Alberto Ferrari): The VertiPaq Engine in Power BI (Artículos de Referencia Técnica)
- Prácticas recomendadas para el plegado de consultas en Power Query
📌 Conclusión
El modelado de datos en Power BI no es una tarea de «una sola vez»; es un proceso iterativo de optimización continua. Diseñar pensando en la escalabilidad desde el primer día diferencia a un desarrollador de reportes visuales de un verdadero Arquitecto de Soluciones de Datos.


Deja un comentario