La épica batalla de mejorar el rendimiento de nuestras consultas en Power Query: Consejos y estrategias claves (Parte 2)
En la entrega anterior de esta serie, nos paseamos por aquellos procesos de transformación y limpieza de nuestras consultas que tienen un gran peso en el uso de nuestras memorias de procesamiento y almacenaje dentro de Power Query. Tener en cuenta dichos procesos, es de suma importancia para poder elegir el orden de los pasos (Obviamente dependerá de cada escenario) en que diseñemos nuestros procesos de transformaciones una vez conectados a nuestros datos. Aquí te dejo el enlace al mismo, el cual, si no has leido, te recomiendo hacerlo antes de leer este.
También debemos tener en cuenta que cada proceso, es decir, cada paso de nuestras consultas consumen memoria caché, por lo que siempre debemos considerar realizarlas en la menor cantidad de pasos posibles.
En este sentido, en esta entrega hablaremos de cuales pasos se sugieren realizar primero dentro de nuestras consultas, que debemos considerar a la hora de escribir ciertas expresiones que puedan ser usadas a lo largo de nuestras consultas, como aprovechar las bondades de algunas funciones y expresiones sintácticas que nos ayuden a ahorrar pasos y de esa manera optimizar el almacenamiento en memoria, así como otras sugerencias claves a la hora de planificar nuestros proyectos de ETL.
Cabe mencionar que lo aquí sugerido es solo eso, sugerencias, ya que cada proceso dependerá del escenario y objetivo al que nos enfrentemos, pero se te ayudarán a definir bien tu estrategia dentro de Power Query.
Así que comencemos.
Aprovecha los tipos de conectividad a los datos
Por razones obvias, el primer paso a realizar en nuestras consultas es justamente conectarnos a las diferentes fuentes de datos. La conectividad a las fuentes de datos en Power Query es uno de los factores clave para optimizar el rendimiento de nuestras consultas. A menudo, el tipo de conexión puede mejorar la eficiencia del proceso de transformación de datos. En esta sesión, revisaremos cómo sacar el máximo provecho de los modos de conectividad y algunos trucos útiles para optimizar tus consultas desde el inicio.
Elegir el Mejor Modo de Conexión: Import vs. DirectQuery
Al conectar Power Query a una fuente de datos, tienes algunas opciones de conexión, siendo las más comunes Importar y DirectQuery. Elegir el modo adecuado puede tener un impacto significativo en el rendimiento.
¿Cuándo elegir cuál? Usa Importar si tus datos no cambian frecuentemente o si necesitas realizar transformaciones complejas a gran escala. Opta por DirectQuery cuando trabajes con grandes bases de datos que deben estar sincronizadas en tiempo real o cuando no puedas manejar todo el volumen de datos localmente y aprovechar los beneficios del Plegado de consultas.
Plegado de Consultas: Deja que la Fuente Trabaje por Ti
El plegado de consultas es el proceso mediante el cual Power Query transfiere los pasos de transformación a la fuente de datos (Especialmente Bases de Datos) para que se ejecuten allí, en lugar de hacerlos localmente. Esto es especialmente valioso cuando trabajas con grandes bases de datos, ya que puede reducir significativamente el uso de memoria.
Para optimizar el plegado de consultas, evita transformaciones que lo interrumpan. Funciones personalizadas, operaciones no soportadas o pasos intermedios complejos pueden romper el plegado, lo que significa que todo el procesamiento recae en tu máquina local.
Antes debes verificar si la fuente de datos admite plegado de consultas. Power Query, una vez elegido el modo Direct Query, traduce determinadas instrucciones en una Consulta con Lenguaje Nativo de la fuente de datos para que esta los procese en su entorno y nos devuelva el resultado solicitado. Las Base de datos mas usada con este tipo de conexión es SQL Server, Oracle, MySQL y PostgreSQL.
Verifica si tus transformaciones están plegadas, seleccionado el paso correspondiente (En Desktop) y verificando que la opción de "Ver consulta nativa" esté habilitada. Si el plegado está activo, Power Query ejecutará las transformaciones directamente en la fuente de datos. Una vez se genere un paso que no puede plegarse, esta opción aparecerá inactiva.
En el Flujo de Datos del Servicio de Power BI, existen íconos que te indican si el plegado está activo, Inactivo o si el paso es aplicable el plegado de consultas.
Debes considerar que el uso del modo de conexión Direct Query, puede limitar algunas funcionalidades dentro de Power Query o de ciertas funcionalidades de analíticas en DAX
Se requiere de un artículo único para hablar en detalle de este importante y vital proceso, así que lo dejaremos para otra pronta entrega, mientras continuemos con que otros pasos debemos realizar en un determinado orden para mejorar nuestro rendimiento.
Limpia y deshecha antes de ordenar o remodelar tu entorno
Trabajar con datos innecesarios impacta considerablemente en el uso de memoria, ya que estaremos realizando transformaciones y adecuaciones sobre datos que no son relevantes dentro de nuestros modelos o proyectos.
Filas o columnas vacías o con datos innecesarios, filas o columnas de totales o subtotales son registros candidatos a eliminar antes de realizar cualquier otro paso de transformación.
Filtra aquellas filas que solo serán analizadas o transformadas
Una vez eliminados estos registros considera filtrar solo aquellos datos con los que conoces trabajarás. Por ejemplo, si conectas a una BBDD con datos históricos de muchos años, y solo te interesan los últimos dos o tres años, fíltralos por dichos años antes de continuar con los procesos de transformación o enriquecimiento. Esto reducirá considerablemente el uso de memoria en tus consultas.
Esto hará que se disminuya la cantidad de filas o registros a transformar, lo que ayudará en el rendimiento de nuestras consultas ya que se cumpliría el principio de que a menos datos mayor rendimiento.
Cambio de tipos de Datos
Este es uno de los pasos que mas discusión genera, si los mismos deben hacerse al inicio o al final de nuestras consultas, y la respuesta es el clásico "Depende". Pero... ¿por qué? Veamos:
Impacto en el rendimiento de las consultas:
Cambiar los tipos de datos es un paso necesario en la mayoría de las transformaciones, ya que asegura que Power Query procese los valores de las columnas correctamente, como fechas, números o texto. Sin embargo, su ubicación dentro de la secuencia de pasos afecta significativamente el rendimiento.
Incidencia en el Uso de Memoria
Cambiar los tipos de datos en Power Query tiene un efecto directo en el uso de memoria, ya que este paso convierte las columnas a su representación más eficiente en términos de almacenamiento. Dependiendo del tipo de datos seleccionado, el impacto sobre la memoria varía:
El proceso de cambio de tipo de datos también implica que Power Query debe verificar y, en algunos casos, transformar los valores de todas las celdas de una columna. Si esto se realiza en las primeras etapas de la consulta, Power Query lo hará para todo el conjunto de datos, lo que puede saturar la memoria, especialmente en grandes bases de datos.
Cambiar los tipos de datos en Power Query es un paso crítico que afecta tanto el rendimiento como el uso de memoria. Para optimizar el rendimiento, lo mas aconsejable es realizar este cambio en las últimas etapas de la consulta, después de haber filtrado y transformado los datos, asegurando que Power Query trabaje sobre un conjunto de datos reducido. Solo realice el cambio de tipo si es necesario en un paso intermedio para realizar una transformación necesaria. Asegurarse de que los tipos de datos sean los adecuados para cada columna también garantiza cálculos precisos y rápidos, lo que mejora la eficiencia global de la consulta.
Transformaciones Básicas de Limpieza
Realiza transformaciones o limpiezas de datos básicas tales como: Reemplazar valores, cambiar nombres de columnas, eliminar duplicados, quitar espacios, limpiar caracteres especiales, relleno de filas, entre otras transformaciones básicas. Estas transformaciones son necesarias antes de realizar pasos de agregaciones o cálculos así como de integración o agrupación.
Recomendado por LinkedIn
Optimizar Expresiones repetitivas dentro de nuestros códigos
En muchas ocasiones, nos vamos a ver en la necesidad de realizar expresiones repetidas dentro de nuestros códigos, sean estas estáticas o dinámicas. Si existen expresiones que se repiten una y otra vez dentro de nuestros códigos, considera primero guardarlas en una sola variable o identificador, y luego hacer referencia a dicha variable a donde se requiera el uso de esa expresión.
Esto hace que la misma se evalúe una sola vez, sea almacenada y llamada cada vez que se solicite dicha variable. Usar una misma expresión repetidamente dentro de nuestro código hará que el motor la evalúe cada vez que sea instruida, usando memoria adicional para guardar un mismo valor.
Evitar pasos redundantes o repetitivos
Es común agregar pasos innecesarios cuando trabajamos con Power Query, pero cada paso adicional tiene un impacto en el rendimiento. Revisa tu consulta para identificar pasos que no aportan valor. Por ejemplo, pudieses cambiar el nombre de columnas varias veces dentro de tu consulta. Considera, si puedes hacer uso del mismo paso para cambiar el nombre a varias columnas a la vez, y evitar hacerlo en pasos separados.
Esto también aplica a cambio de tipo de datos de columnas, sobre todo en pasos intermedios como ya fue comentado en párrafos anteriores, o rellenado de filas en varias columnas, mismas transformaciones a varias columnas (Por ejemplo, cambiar a Mayúsculas los textos de varias columnas). Siempre evalúa si puedes hacer todos estos pasos en uno solo aprovechando las bondades que permiten las funciones correspondientes.
Recuerda que cada resultado de cada paso es almacenado en memoria.
Los pasos de mucho peso y uso de memorias dejarlos lo mas hacia el final posible
En la primera parte de esta entrega, hablamos sobre estos pasos de alto consumo de memoria. Combinaciones de consultas, Agrupaciones de datos, Agregaciones (Sumas, promedios, etc.) ordenado de filas y columnas, deben realizarse, en la medida de lo posible, al final de nuestras consultas.
Anidar Funciones: ¿Qué tanto conviene hacerlas?
La anidación de funciones en Power Query puede tener efectos adversos en el rendimiento de las consultas si no se realiza de manera cuidadosa. Al aumentar la carga de procesamiento, el uso de memoria y la posibilidad de romper el plegado de consultas, la anidación puede resultar en consultas lentas o ineficientes. Sin embargo, cuando se utiliza correctamente y con funciones optimizadas, puede ser una herramienta poderosa para realizar transformaciones eficientes.
Para maximizar el rendimiento, haciendo uso de este proceso considera los siguientes principios:
Planificar cuidadosamente cómo y cuándo usar funciones anidadas puede marcar una gran diferencia en el rendimiento de las consultas en Power Query.
Otros Procesos a tener en cuenta
Existen otros procedimientos que, si bien no inciden en buscar un mejor orden de pasos para lograr la optimización de nuestras consultas, son importantes para minimizar aún más, el uso de memoria y procesamiento de estas. Entre ellos podemos listar los siguientes:
Funciones Personalizadas para transformaciones complejas
Existen escenarios donde debemos repetir pasos complejos para aplicárselo a futuras consultas que contengan la misma estructura y lógica de transformaciones.
Si se aplican los mismos pasos a cada consulta por separado, esto hará que se apliquen pasos repetitivos en cada consulta o en cada valor anidado como tablas, cuando nos conectamos a una carpeta local o listas de Sharepoint, por ejemplo.
Si estos pasos complejos se configuran dentro de una Función Personalizada, y luego esta se invoca para ser aplicada a otras consultas o valores anidados como tablas, mejorarás sustancialmente el almacenaje en memoria, ya que evitarás que cada paso sea almacenado individualmente por cada consulta.
Uso de Parámetros
Los parámetros en Power Query no solo son útiles para las transformaciones, sino también para la conexión a las fuentes de datos. Puedes definir parámetros para controlar dinámicamente a qué base de datos o conjunto de datos conectarse, e incluso ajustar las fechas, límites o filtros de consulta. Esto mejora el rendimiento al evitar que tengas que modificar manualmente cada paso cuando cambian los requerimientos.
Un clásico ejemplo de estos parámetros, es cuando configuramos una conexión a una ruta de un archivo en nuestras carpetas locales, y aún si dos o más consultas apuntan a conectar al mismo archivo o carpeta. Si es así, configurar un parámetro de ruta, y sustituir cada cadena de ruta textual en estas consultas por dicho parámetro, hará que dicha cadena de texto sea evaluada y almacenada una sola vez, y no en cada llamada literal dentro de cada consulta.
Además, imagina si cambias la ubicación de el archivo o carpeta, esto te permitirá modificar solo el parámetro y no cada cadena de texto de la ruta en cada consulta que la requiera.
Deshabilitar la carga de Consultas Intermedias
Al construir tus consultas, es posible que utilices consultas intermedias para estructurar los datos antes de llegar al resultado final. Deshabilitar la carga de estas consultas intermedias evitará que Power Query use memoria para realizar las cargas de estos resultados parciales, lo cual es una manera sencilla y efectiva de optimizar el uso de recursos.
En Power Query, puedes desactivar la carga de consultas haciendo clic derecho sobre ellas en el panel de consultas y haciendo click en "Habilitar carga".
Habilitar o Deshabilitar la actualización de Informes
La funcionalidad de “Incluir en la actualización del informe” en Power Query de Power BI permite controlar si una consulta específica se actualiza cuando se actualiza el conjunto de datos en Power BI. Aquí tienes cómo funciona:
Esta funcionalidad es especialmente útil para optimizar el rendimiento y gestionar mejor los tiempos de actualización, ya que permite excluir consultas innecesarias de las actualizaciones regulares. Para deshabilitar la actualización, presiona botón derecho del mouse sobre la consulta correspondiente y haz click sobre la opción de "Incluir en la actualización del informe".
Nota: Si deshabilita la Carga de la Consulta, automáticamente queda deshabilitada la actualización.
Consideraciones y conclusiones finales
Optimizar el rendimiento de las consultas en Power Query es un proceso que requiere un enfoque estratégico, desde la selección de los tipos de datos hasta el manejo de funciones anidadas y la elección del momento adecuado para cada paso de transformación. Cada decisión puede afectar el uso de memoria, la velocidad de ejecución y la eficiencia general de las consultas.
En resumen, lograr consultas rápidas y eficientes en Power Query requiere un equilibrio entre la planificación de los pasos de transformación, el manejo adecuado de funciones y la optimización de la conectividad a los datos. Al aplicar estas mejores prácticas, no solo mejoramos el rendimiento, sino también la capacidad de manejar grandes volúmenes de información de manera efectiva y escalable.
Debes considerar que lo aquí expuesto siempre serán sugerencias basadas en la propia experiencia. Cada escenario debe ser evaluado y planificado con cautela teniendo en mente siempre el objetivo final al que debes llegar. También las capacidades de memoria y otras características de procesamiento de tu ordenador, ya que pueden incidir en los tiempos de evaluación de tus consultas.
En la próxima parte, hablaremos de los procesos de duplicar o referenciar consultas y sus implicaciones en temas de rendimientos así como pros y contras de hacer uso de estos procedimientos.
Si consideraste este artículo útil, no olvides dejarme una reacción, compartirlo entre tu red de contactos y seguidores así como dejarme en los comentarios que otro aspecto o procesos consideras agregar a los aquí expuestos.
Nos vemos en el próximo artículo {M}ágico. 🧙🏻🧙🏻🧙🏻
COORDINADOR DE PROYECTOS
3 mesesBuenísimo, cuantos tips para mejorar el proceso ETL, gracias por tomarte este tiempo Rafael González B.... excelente...
Power BI /Impuestos/ Finanzas/Contabilidad
3 mesesGracias Rafael, tus consejos siempre en el top de los más útiles!
Responsable de Administración en Maggiora S.A. | Master en Inteligencia de Negocios
3 mesesEsto es Genial!!!!! Siempre lucho esta batalla, pero yo soy de los que está en la arena con los leones jajajaja, a ver si este artículo me permite salir.....!!!!!
Técnico Administrativo e Informática de Gestión
3 mesesQuiero unirme a todos y también darte las gracias por todo lo que compartes y nos enseñas para poder aprender un poquito más. 🤗
¡Que genial esto Rafa! Muy buenoooooo 👍 Gracias por compartir tu conocimiento