Mejora de tiempos en medidas de Power BI, ¿Cómo utilizar DAX STUDIO para aumentar el rendimiento y depuración de las medidas en Power BI?

Publicado por

El uso del lenguaje DAX que es utilizado para la construcción de medidas en Power BI en muchas ocasiones no se emplea de manera adecuada lo cual no permite tener buenos tiempos en la obtención de nuestros indicadores al momento de refrescar el lienzo del reporte en POWER BI,  logrando ser algo frustrante es así como surgen programas de terceros como DAX STUDIO un software libre que nos permite optimizar las medidas  de manera sencilla reduciendo los tiempos de procesamiento para la obtención de las visuales e indicadores

¿Qué es DAX STUDIO?

DAX STUDIO es un software libre reconocido por Microsoft que nos permite ejecutar y analizar consultas de los modelos Tabulares de Microsoft permitiéndonos conectar a múltiples fuentes de datos incluyendo algunas como, PowerPivot en Excel, Power BI Desktop, Servicio de análisis Tabular, Servicio de Análisis de Azure, también ofrece algunas características que nos permitirá entender detalladamente el proceso de tiempo de procesamiento de nuestras medidas que empleamos en Power BI Desktop.

El proceso de construcción de medidas en Power BI empieza con la conformación del calculo que requerimos llevar su lógica utilizando el lenguaje DAX conformando una medida que nos permitirá obtener el valor de un indicador, para construir una medida lo primero que se realiza desde POWER BI Desktop una vez cargado nuestro conjunto de datos en el reporte nos dirigimos al panel derecho en donde agregaremos el calculo o medida utilizando los datos del modelo previamente cargado

Enseguida se tendrán una serie de pasos que nos permitirá conocer como optimizar nuestras medidas al momento de tener medidas demasiado lentas y también recomendaciones a tener en cuenta al momento de la construcción de estas.

Como primera medida por organización llevaremos nuestras medidas a una única tabla de medidas para la construcción de esta como PRIMER PASO nos dirigimos al reporte con nuestros datos y modelo creado en donde daremos click izquierdo a una nueva tabla la cual será la tabla de medidas posterior a esto daremos click izquierdo a esta tabla y finalmente damos click en new measure como se permite ver en la figura 1.

Figura 1. Visual de creacion de medida en Power BI

Esto nos abrirá un editor en la parte superior izquierda de nuestro lienzo, en este agregaremos nuestras medidas y cálculos como se permite ver a continuación en la figura 2.

Figura 2. Parametros de creacion de Medida

Aunque la medida creada anteriormente, no es una medida muy compleja nos permite evidenciar los elementos bases que conforma una gran parte de las medidas creadas en Power BI, el uso de variables y de funciones que en este caso fue una función IF condicional

Es importante conocer lo básico del lenguaje DAX para hacer correcto uso de este, en ejemplo presenta diferentes formatos de tipo de dato, algunos de ellos se pueden clasificar como Enteros, Decimales, Valor, Tiempo, Booleanos, String, Variante, Binario cada uno con sus características útiles en la representación de datos según lo que estos representan, a su vez el uso de operadores en los que destacan Paréntesis, aritméticos, de comparación, de concatenación y de uso lógico

Nuestro SEGUNDO PASO es conocer el tiempo de respuesta de las medidas actuales que están presentando una pagina de nuestro reporte, para ello damos click en View en la parte superior izquierda y posterior nos dirigiremos a Performance Analyzer como se puede observar en la siguiente imagen

Figura 3. Analizador de Rendimiento Power BI

Enseguida se nos desplegará el menú de Performance Analyzer el cual nos permitirá conocer los tiempos de ejecución de cada uno de nuestros indicadores y visuales de la página actual, así mismo podremos conocer aquellos que están demorando más en términos de milisegundos, como se puede apreciar en la imagen de la figura 3.  

Figura 4. Panel del Analizador de Rendimiento en Power BI

En la figura anterior se da el paso a paso de la ejecución del Análisis de Rendimiento para conocer nuestros tiempos, como primera medida se empieza registrando la grabación enseguida se refresca los visuales lo cual establecerá el tiempo de carga de cada visual y finalmente daremos click en el botón + para la medida que mas tiempo esta demorando en este caso, al dar click se desplegará el siguiente menú

Figura 5. Tiempos de la Visual en Power BI

La figura anterior nos permite evidenciar tres ítems importantes al momento de la ejecución de una medida en un indicador

  • DAX query: es el tiempo que esta tardando nuestra medida en ejecutarse y procesarse si este indicador presenta un alto valor esto indicaría que la medida empleada no cuenta con buenas practicas de uso del lenguaje DAX,
  • Visual display: es el tiempo de grafica de la visualización cuando este presenta un alto valor esto quiere indicar que nuestro lienzo presenta muchos indicadores, una buena practica es visualizar estos en otras paginas o solo dejar los más importantes,
  •  Other: los otros tiempos altos son presentados debido al rendimiento del procesador que actualmente se esté usando la actualización de nuestros indicadores.

Si se presenta que el tiempo de DAX query es demasiado alto una solución a esto es examinar la medida indicada y tratar de optimizar nuestro código, para ello vamos hacer uso DAX STUDIO este software nos permitirá como primera medida conectarnos a nuestro modelo de datos, para ser uso de este software basta con dirigirnos a la página de DAX Studio – The ultimate client tool for working with DAX queries e instalarlo siguiendo las instrucciones del instalador una vez instalado existen varias forma de iniciar este, una primera forma de inicio del programa es desde el icono de lanzamiento que ocasionalmente encontraremos en nuestro escritorio previo a la instalación como se permite apreciar en la siguiente imagen

Figura 6. Icono Dax Studio

, una segunda forma es desde Power BI, para ello nos dirigimos a nuestro reporte posterior a esto damos click en herramientas externas y por ultimo en el icono DAX STUDIO

Figura 7. Icono de Dax Studio en el entorno de Power BI

Al iniciar desde la aplicación nos aparecerá la siguiente pantalla, automáticamente nos reconocerá las posibles conexiones a los modelos que actualmente se encuentran en el computador, siendo así modelos de Power Query, Power BI, de Servicio de análisis de Azure entre otros,

Figura 8. Conexion a Power BI

Al seleccionar el modelo conectaremos a este, en donde la parte izquierda nos aparecer la información de las tablas registradas en el modelo construido en Power BI

Figura 9. Modelo conectado desde Dax Studio

La imagen anterior nos mostrara todo los datos y valores cargados al modelo, enseguida nos dirigiremos al reporte en la pestaña previamente abierta Performance Analyzer en donde daremos click en copiar query como se muestra en la siguiente imagen

Figura 10. Copia del query para el visual

Esto nos copiara la consulta de la medida empleada para dicha visual y posterior la pegaremos en el DAX STUDIO, es allí donde daremos un análisis a la medida creada, posterior a esto daremos click en el panel derecho del DAX STUDIO,

Figura 11. Entorno de Dax Studio con la query visual

Como se puede observar en la imagen anterior al copiar el código este contendrá las variables necesitadas para la ejecución de nuestras medidas, a su vez en la parte inferior con la función evaluate nos permitirá la ejecución de dichas variables necesarias para la medida en cuestión,

Optimización

Si ejecutamos todo el código que hemos puesto en DAX STUDIO este nos arrojara los valores que se tendría en power bi para dicho indicador, como se puede evidenciar en la siguiente imagen

Figura 12. Resultados del codigo en Dax Studio

Es de suma importancia conocer el resultado y que este coincida de manera igual al resultado de power Bi ya que posteriormente ajustaremos la medida para mejorar el rendimiento, pero debe tenerse en cuenta que esto no afecte nuestros resultados en la medida, para este caso la medida suministrada corresponde a un visual de mapa visual enseguida se tomara otra medida mas compleja, medida empleada para representar la siguiente visual,

Figura 13. Visual con medidas en Power BI
Figura 14. Panel de datos con medidas Power BI

El visual anterior representa los casos por cada semana de infecciones de Covid entre los meses de Enero del 2020 y abril del 2021 en gris y en donde la línea verde interior representa el porcentaje de población vacunada a nivel mundial a su vez también la imagen de la derecha nos permite evidenciar las medidas y valores de las tablas empleadas, para el caso de optimización si observamos en analizador de rendimiento obtendremos los siguientes tiempos,

Figura 15. Tiempos de Analizador de Rendimiento para la Visual de Casos de Covid

En efecto la imagen anterior nos permite evidenciar que esta medida la cual es % of Population Vaccinated está bien optimizada, pero para este caso de estudio vamos a indagar mas en esta, los mayores tiempos se encuentran en otros y no en el DAX query o el Visual display, en seguida copiaremos el query y lo llevaremos hacia el DAX STUDIO al copiar el query nos arrojara el siguiente código

Figura 16. Codigo de Visual de Power BI en Dax Studio

Si evaluamos este código utilizando DAX STUDIO nos arrojara el siguiente resultado

Figura 17. Resultados del Codigo Visual de Power BI en Dax Studio

La imagen anterior nos muestra el resultado de las medidas empleadas en este caso son las representadas en rojo para la imagen anterior a esta, si buscamos optimizar esta medida necesitamos conocer cual de estas dos medidas es la que esta perjudicando en mayor medida nuestro rendimiento de la visual, una practica que se realiza en estos casos es eliminar alguna de las medidas y posterior a esto evaluar el rendimiento

Como evaluamos el rendimiento en DAX STUDIO,  para esto nos dirigiremos al siguiente botón en el panel superior

Figura 18. Tiempos de Servidor en Dax Studio

Dando click en este botón, podremos registrar el tiempo que consume nuestro visual en ejecutarse y declarar las variables del modelo, así que enseguida daremos click y posterior a esto daremos click en Clear Cache este paso es importante para no registrar en memoria datos previos enseguida daremos click en Run de la parte izquierda conociendo el tiempo que demora en refrescar nuestro visual, enseguida nos dirigiremos hacia server timings en la parte inferior lo cual nos representara la siguiente imagen

Figura 19. Visualizacion de Tiempos de Consulta en Dax Studio

Para interpretar los resultados de esta consulta nos daremos cuenta que el tiempo de Motor de fórmulas (FE: Formula Engine) el cual es el tiempo de procesamiento cuando este tiempo esta muy alto quiere decir que hay problemas en el procesamiento de nuestra medida los cálculos que esta realizando son muy complejos lo cual evidencia que se necesita realizar un reajuste en las funciones de las medidas empleadas, si el tiempo empleado del motor de almacenamiento es muy alto en este caso (SE : Engine)  esto quiere decir que en la medida existen procesos que están creando múltiples iteraciones y llamamiento de los datos es decir bucles llamando una y otra vez la información en la mayoría de los casos, los querys para estas consultas encontradas aparecen en la parte derecha.

Teniendo monitoreado que el tiempo que consumió la ejecución de las variables y medidas para obtener el visual fue de un total de 42 ms es un buen tiempo lo normal es tener tiempos por debajo de 100ms, sin embargo si nos encontramos con tiempos muy altos lo recomendable es evidenciar cual es la medida que nos esta afectando para esto eliminaremos alguna de  las medidas, como realizamos esto vasta con suprimir la línea de código roja del llamamiento de la variable de salida

Figura 20. Codigo con omision de medida en Dax Studio

La imagen anterior evidencia esta supresión de la medida de casos promedio cada 7 días por millón y volveremos evaluar nuestros tiempos como lo realizamos en el paso anterior, lo cual se muestra en la siguiente imagen

Figura 21. Tiempos con omision de medida en Dax Studio

Lo anterior evidencia que la medida que esta causando tiempos de 5ms es la medida que se omitió si tuviéramos tiempos muy altos tendríamos que indagar en esta medida, ¿Pero como hacemos esto desde DAX STUDIO?, basta con seleccionar la medida que nos aparecerá en los modelos de la parte izquierda de DAX STUDIO como se muestra en la siguiente imagen

Figura 22. Consulta de Medida desde Dax Studio

Al dar click en definir medida se nos desplegara el código de esta medida en el panel de la derecha como se puede evidenciar enseguida

Figura 23. Codigo de la medida y codigo de la ejecucion visual

Como se puede evidenciar enseguida nos aparecerá la medida que es empleada en el código de ejecución de la visual, esta es una de las mayores ventajas que nos ofrece DAX STUDIO nos permite definir múltiples medidas empleadas en un visual de manera descriptiva todo en una misma hoja, a su vez otra ventaja que nos ofrece DAX STUDIO a la hora de mejorar nuestro código en las medidas es poder hacer un llamado de todas las medidas dependientes de la medida principal empleadas en nuestro codigo para esto damos click como se puede mostrar en la siguiente imagen

Figura 24. Consulta de las medidas y sus medidas dependientes en Dax Studio

Teniendo todas las medidas desplegadas en la misma hoja nos permitirá hacer modificaciones a cada una de estas e ir evaluando el rendimiento del código de la visual obteniendo una mejora en los resultados, para ello es muy importante tener en cuenta las buenas prácticas al momento de crear nuestras medidas en DAX

Algunas de estas buenas practicas se mencionaran acontinuacion:

  • En algunas ocasiones es mas adecuado utilizar la función CALCULATETABLE en vez de CALCULATE esto permitirá una mejora de los tiempos al momento de tener una tabla con varias columnas o medidas que presenten un alto incremento de tiempo
  • Optimizar el tiempo de Consulta especificando la columna a la cual la medida va buscar los datos en lugar de agregar búsquedas hacia todos los datos de una tabla para esto es útil utilizar KEEPFILTERS
  • En algunas ocasiones al emplear una comparación haciendo uso de un comparador IF, una buena practica es utilizar solo cuando sea necesario, en algunas ocasiones se puede optimizar el proceso utilizando KEEPFILTERS y agregar la condición de búsqueda
  • Agregar de manera adecuada el uso de condicionales es decir si se requiere IF( XXX <>0, XXX / XXXX) se puede remplazar por  DIVIDE ( XXXX /XXXX)

Entre otras recomendaciones mas detalladas se pueden encontrar en referencias como el libro The definitive guide to DAX, buenas practicas que van a permitir mejorar los tiempos en nuestras medidas

Una vez las medidas se hayan modificado y optimizado los tiempos sin alterar los resultados remplazaremos estas medidas en nuestro reporte de Power bi

Referencias:

  1. The definitive Guide to DAX (Microsoft, Marco Russo and Albert Ferrari)
  2. https://daxstudio.org

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *