Inicio / Power BI / Power BI: Dashboards e Informes Profesionales / Rendimiento y Buenas Prácticas

Rendimiento y Buenas Prácticas

Performance Analyzer, optimización de modelo, DAX eficiente, reducir cardinalidad y checklist de rendimiento.

Intermedio
🔒 Solo lectura
📖

Estás en modo lectura

Puedes leer toda la lección, pero para marcar progreso, hacer ejercicios y ganar XP necesitas una cuenta Pro.

Desbloquear por $9/mes

Rendimiento y Buenas Prácticas

Un reporte lento es un reporte que nadie usa. Optimizar el rendimiento de Power BI requiere atención al modelo de datos, las medidas DAX y el diseño del reporte.

Diagnóstico de rendimiento

Performance Analyzer

  1. Ve a Vista → Analizador de rendimiento → Iniciar grabación.
  2. Interactúa con el reporte (cambia filtros, navega entre páginas).
  3. Observa los tiempos de cada visualización:
Visual "Gráfico de Ventas":
  DAX Query:        120ms
  Visual Display:    45ms
  Other:            15ms
  Total:           180ms

Si una visualización toma más de 2-3 segundos, necesita optimización.

DAX Studio

Herramienta externa gratuita para analizar y optimizar consultas DAX:

  • Ejecuta medidas individualmente.
  • Ve el plan de ejecución.
  • Analiza el uso de memoria del modelo.
  • Identifica columnas con alta cardinalidad.

Optimización del modelo de datos

Reducir la cardinalidad

La cardinalidad es el número de valores únicos en una columna. A menor cardinalidad, mejor compresión y rendimiento.

ANTES: Fecha/Hora completa → 525,600 valores únicos
DESPUÉS: Solo Fecha        → 1,440 valores únicos (365x menos)

ANTES: ID Transacción (GUID) → Millones de valores únicos
DESPUÉS: ID Transacción (int) → Misma cantidad pero más comprimido

Eliminar columnas innecesarias

Cada columna ocupa memoria RAM. Elimina en Power Query:

  • Columnas que no usas en relaciones, filtros ni visualizaciones.
  • Columnas de ID intermedias que solo sirven para transformación.
  • Columnas de texto largo que no necesitas.

Tipos de datos correctos

En vez de Usa
Texto para números Número entero o decimal
Datetime si solo necesitas fecha Date
Texto para sí/no Booleano
Número decimal para enteros Número entero

Deshabilitar auto date/time

Power BI crea automáticamente tablas de fechas ocultas por cada columna de tipo fecha. Desactívalo:

  1. Archivo → Opciones → Datos actuales → Autocreación date/time → Desactivar.
  2. Usa tu propia tabla de calendario.

Optimización de DAX

Evitar FILTER cuando puedas usar filtros directos

// ❌ Más lento: FILTER itera toda la tabla
CALCULATE([Ventas], FILTER(Productos, Productos[Categoría] = "Electrónica"))

// ✅ Más rápido: Filtro directo optimizado por el motor
CALCULATE([Ventas], Productos[Categoría] = "Electrónica")

Usar variables (VAR) para evitar recálculo

// ❌ Calcula [Ventas] tres veces
Indicador = 
IF([Ventas] > 100000, "Alto",
IF([Ventas] > 50000, "Medio", "Bajo"))

// ✅ Calcula [Ventas] una sola vez
Indicador = 
VAR V = [Ventas]
RETURN
    IF(V > 100000, "Alto",
    IF(V > 50000, "Medio", "Bajo"))

DISTINCTCOUNT vs COUNTROWS + VALUES

// Ambos dan el mismo resultado, pero DISTINCTCOUNT es más rápido
Num Clientes = DISTINCTCOUNT(Ventas[ClienteID])  // ✅
Num Clientes = COUNTROWS(VALUES(Ventas[ClienteID]))  // ❌ más lento

Evitar columnas calculadas cuando puedas usar medidas

Las columnas calculadas se almacenan en memoria y aumentan el tamaño del modelo. Las medidas se calculan on-demand.

// ❌ Columna calculada innecesaria
Ganancia = Ventas[Precio] - Ventas[Costo]  // Ocupa RAM por cada fila

// ✅ Medida: se calcula solo cuando se necesita
Ganancia Total = SUMX(Ventas, Ventas[Precio] - Ventas[Costo])

Optimización del reporte

Reducir el número de visualizaciones

  • Máximo 8 visualizaciones por página.
  • Cada visual genera una consulta al modelo.
  • Más visualizaciones = más consultas = más lento.

Limitar las filas en tablas/matrices

// En vez de mostrar 10,000 filas, usa Top N
Top 20 Clientes = 
CALCULATE(
    [Ventas],
    TOPN(20, ALL(Clientes[Nombre]), [Ventas], DESC)
)

Evitar bi-directional cross-filtering

Los filtros bidireccionales multiplican el costo computacional. Usa unidireccional siempre que sea posible.

Deshabilitar interacciones innecesarias

Si un slicer no necesita afectar una visualización específica, deshabilita la interacción:

  • Selecciona el slicer → Formato → Editar interacciones → Ninguno en el visual.

Tamaño del archivo .pbix

Acción Impacto
Eliminar columnas innecesarias Alto
Usar tipos de datos correctos Medio
Reducir cardinalidad Alto
Eliminar datos históricos antiguos Alto
Deshabilitar auto date/time Medio
Eliminar tablas no referenciadas Bajo

Checklist de rendimiento

  • Modelo en esquema estrella.
  • Columnas innecesarias eliminadas.
  • Tipos de datos correctos.
  • Auto date/time deshabilitado.
  • Tabla de calendario dedicada.
  • Medidas con VAR para evitar recálculo.
  • Filtros directos en vez de FILTER cuando sea posible.
  • Máximo 8 visualizaciones por página.
  • Filtros bidireccionales eliminados.
  • Performance Analyzer revisado.

Resumen

El rendimiento de Power BI depende de un modelo limpio (pocas columnas, baja cardinalidad, tipos correctos), DAX eficiente (VAR, filtros directos, evitar columnas calculadas innecesarias) y reportes ligeros (pocas visualizaciones, Top N en tablas). Usa Performance Analyzer y DAX Studio para diagnosticar cuellos de botella.

🔒

Ejercicio práctico disponible

Optimiza el rendimiento de un modelo de datos

Desbloquear ejercicios
// Optimiza el rendimiento de un modelo de datos
// Desbloquea Pro para acceder a este ejercicio
// y ganar +50 XP al completarlo

function ejemplo() {
    // Tu código aquí...
}

¿Te gustó esta lección?

Con Pro puedes marcar progreso, hacer ejercicios, tomar quizzes, ganar XP y obtener tu constancia.

Ver planes desde $9/mes