La solicitud

De Amanda Price, Jefa de e-commerce

“La página de canales tarda una eternidad cada vez que toco la segmentación de año. Nuestro contratista de BI dice que las medidas 'se ejecutan en el motor de fórmulas en lugar de en el motor de almacenamiento'. Asentí. ¿Qué significa realmente eso?”

Tu objetivo

Elige la afirmación que describe correctamente los dos motores que evalúan DAX en Power BI.

¿Qué afirmación describe correctamente los dos motores de DAX de Power BI?

Elige una respuesta y luego compruébala.

La lección

Cuando un informe es lento, “Power BI es lento” es el diagnóstico menos útil. Detrás de cada visual hay una cadena: se envía una consulta, se evalúa DAX, se recorren datos, se dibuja el visual. Un eslabón débil frena todo, y el primer trabajo es encontrarlo.

Dónde estás trabajando

Este es un cuestionario. Los niveles siguientes te dan medidas que reescribir en un motor de práctica en esta página. Para cronometrar un informe real en Power BI Desktop: Optimizar → Analizador de rendimiento (Optimize → Performance analyzer; en versiones antiguas Vista → Analizador de rendimiento), Iniciar grabación (Start recording) y luego Actualizar objetos visuales (Refresh visuals) o haz clic en una segmentación. Cada visual recibe una línea con su tiempo total, dividido en Consulta DAX (DAX query), Visualización de objeto visual (Visual display) y Otro (Other; espera a otros visuales). Un número grande en la consulta DAX apunta al modelo o a la medida; un número grande en la visualización apunta a un visual con demasiados puntos.

Dos motores detrás de cada consulta DAX

El motor de almacenamiento (SE). En un modelo Import es VertiPaq, el almacén columnar en memoria. Cada columna se comprime por separado, y el motor de almacenamiento recorre esas columnas muy rápido y en todos los núcleos de CPU. Se le dan bien unas pocas cosas sencillas: filtrar una columna por valores, agrupar por columnas y agregar con SUM, COUNT, MIN, MAX y DISTINCTCOUNT. En DirectQuery, ese mismo papel lo hace la base de datos de origen al recibir SQL.

El motor de fórmulas (FE). Lee tu DAX, elabora un plan, envía las partes sencillas al motor de almacenamiento y hace el resto él mismo: expresiones complejas por fila dentro de iteradores, lógica de IF y SWITCH, transición de contexto, combinar los resultados. Se ejecuta en un solo hilo y trabaja con tablas intermedias sin comprimir.

Qué empuja el trabajo hacia el motor lento

  • FILTER sobre toda una tabla de hechos con condiciones que el motor de almacenamiento no puede tomar como un simple filtro de columna, y luego un iterador sobre el resultado.
  • Iterar millones de filas y llamar a una medida por cada fila (una transición de contexto por fila).
  • Tablas intermedias grandes que el motor de fórmulas tiene que construir y mantener.

Una medida como CALCULATE(SUM(order_items[line_total]), orders[status] = "completed") es un filtro de columna más una suma: casi todo motor de almacenamiento. El mismo número escrito como SUMX(FILTER(order_items, RELATED(orders[status]) = "completed"), order_items[line_total]) construye primero una tabla filtrada de líneas de pedido. Con 30,000 filas nadie lo nota; con 30 millones la diferencia suele ser de diez a cien veces.

Ver el reparto

En el Analizador de rendimiento, Copiar consulta (Copy query) del visual lento y pégala en la vista de consulta DAX (DAX query view; el cuarto icono del carril izquierdo) o en la herramienta gratuita DAX Studio, donde Server Timings muestra cuántos milisegundos fueron a cada motor y cuántas consultas del motor de almacenamiento se ejecutaron.

Errores comunes

  • Optimizar antes de medir. Encuentra primero el visual lento.
  • Probar con una muestra pequeña. Los problemas aparecen con el volumen completo de datos.
  • Demasiados visuales en una página. Cada uno envía su propia consulta; veinte tarjetas son veinte consultas.

Elige qué puede ejecutarse en este sitio. Puedes cambiarlo cuando quieras desde "Configurar cookies", al pie de cada página.