Última actualización: Lunes, 17 de febrero de 2025

Microsoft Power Platform primer vistazo (Power Automate / Power BI) - Gonzalo A. Arenas Flores

Para poder solucionar un problema en mi actual proyecto me vi en la necesidad de reinventarme (nuevamente) para meterme en áreas del Business Intelligence y aprender nuevas formas de explotar información, hacer minería de datos, reunir diferentes fuentes de información, y finalmente crear reportes valiosos para la toma de desiciones. Esto me llevó a revisar las opciones que disponía con herramientas del cliente, en este caso, Microsoft Power Platform; y para este artículo, únicamente Power Automate y Power BI.

GonzaloArenasF - Microsoft Power Platform primer vistazo (Power Automate / Power BI) - Gonzalo A. Arenas Flores

Algunos ya sabrán que no soy un adepto a las herramientas de Microsoft. Siempre que me veo en la situación de tener que utilizarlas me acuerdo de un excelente desarrollador frontend (que no recuerdo su nombre... jajaj) que conocí en mi periodo en 2Brains. Él acostubraba a decir Si es Microsoft, algo malo debe tener. Honestamente me da risa, pero en general no me siento cómodo con sus interfaces y la experiencia que ofrecen. Es indiscutible que son muy útiles, pero no me gustan. Sin embargo, "la necesidad tiene cara de hereje" y aquí vamos nuevamente. No voy a explicar qué situación específica me llevó a tener que entrar en este universo, pero de que es bueno, es muy bueno. Empecemos...

Microsoft ya hace unos años liberó una serie de herramientas cloud y low-code para entrar en el mercado de la reportería, automatización de procesos y creación de aplicaciones sin necesidad de escribir todo el código que eso conllevaría. Este tipo de herramientas son muy demandadas hoy en día debido al necesidad de poder manejar volúmenes importantes de información y poder responder preguntas importantes para el negocio. Business Analysts, Business Intelligence, Data Analysts, entre otros roles, empezaron a brillar en busca de poder manejar este aspecto del negocio, y apoyados por las herramientas de inteligencia artificial, se desarrollaron rápidamente en este tiempo.

Power Platform es la respuesta de Microsoft a esta oportunidad, ofreciendo una serie de herramientas en versión Web y Desktop con diferentes caracteristicas y capacidades. Desde ya les digo que hay bastantes diferencias entre estas 2 versiones de cada herramienta. Para el caso de este artículo, me centraré únicamente en Power Automate y Power BI en sus versiones web, y diré que lo que más me hizo en falta eran más opciones de conectar fuentes de datos.

Uno de los pricipales problemas que tuve en este periodo de tiempo fue que no tenía acceso a toda la información de los proyectos, equipo, e iniciativas, lo que me dificultava mucho el poder ayudar. Creo que entiendo la necesidad de que no deba saber todo del cliente, pero si están pagando por un perfil como el mío, y que solo pretendo ayudarles, porqué no aprovecharlo. Bueno, la cosa es que habían diversos puntos donde atacar, y mi experiencia como desarrollador me abrió varias posibilidades, una de ellas fue la expliqué en el proyecto Jira BI Custom Reports donde creo una aplicación rápida para consumir la API de Jira y construir reportes personalizados. En su momento me pareció buena idea pero llevaría mucho tiempo llegar a donde necesitaba ir. Fue entonces que me metí en estas herramientas.

Power Automate, Excel, y Power BI

Microsoft Power Automate
Imagen referencial de la aplicación desde Microsoft

Power Automate es una herramineta construida para automatizar diversos tipos de procesos considerando 2 tipos de artefactos: Triggers y Acciones. Conectado a diversos tipos de fuentes de datos, las herramientas de Office, y las integraciones con Apps de terceros, le ofrece a los usuarios una infinidad de casos de uso, por ejemplo:

  • Enviar un correo al momento de que un usuario llena un formulario, y enviar esos datos a una base de datos SQL server, y al mismo tiempo llenar un archivo excel que alimente un reporte de Power BI.
  • O, en mi caso, consultar la API de Jira y obtener la información de proyectos, iniciativas, épicas, etc; filtrar la información, y guardarla en tablas de un archivo excel, que pueda usar como fuente de datos de un reporte Power BI.

La premisa es muy sencilla e intuitiva, si alguna vez creaste un diagrama de flujo o diagramas de arquitectura, donde todo inicia desde un trigger y las acciones van ejecutando otras encadenadas entre ellas en un orden lógico.

Para el caso de este artículo, como mencioné, la idea es rescatar información desde la API de Jira y guardarla en tablas de un archivo Excel. Por lo que hice diversas pruebas más pequeñas, donde utilicé varios actions para intentar obtener la data desde Jira. Asi que el primer ejercicio fue: Obtener todos los tipos de issue y guardarlos en un archivo excel. Ahora lo explicaré:

No entraré en detalles de la conexión ya que es propia del cliente así que solo me remitiré a mostrar a grandes razgos el primer ejercicio. En la imagen al costado pueden ver un flujo que a algunos desarrolladores les parecerá familiar y que intentaré explicar sin muchos rodeos (si hay algo que no entiendan me escriben):

  1. Trigger manual (no hay mucho que decir. Se ejecuta a demanda)
  2. Una acción de conexión HTTP, donde se incluye la llamada al endpoint /rest/api/3/issuetype y se dejan configurados el email de conexión y el token de seguridad de la API.
  3. A continuación, una acción para recibir la respuesta del servicio y efectuar un parse JSON que nos permita poder trabajarla. Aquí se debe indicar el contrato del servicio con la estructura que deberán ver los pasos posteriores.
  4. Esta acción podría haber estado en pasos previos, pero para la prueba está bien. Aquí se efectúa una limpieza de la data anterior en el excel para evitar duplicarla. Para eso, por cada registro que se recibe desde el endpoint se elimina su registro con el mismo identificador.
  5. Ahora si, una acción que recorre la respuesta y guarda los nuevos datos. (Si, podría haber utilizado el loop del paso anterior, pero esto fue solo una prueba).
  6. Y finalmente una acción donde me envío un mensaje vía Teams a mi usuario indicándome que el proceso terminó.

Pueden ver, también, como quedó la información en el archivo excel, en la imagen acontinuación.

Debo decir que no me llevó más de 2 horas entender y aplicar todo esto. Básicamente porque todo es muy similar a como se desarrolla en casi cualquier lenguaje de programación. Los mayores problemas fueron la interfaz que a ratos presentaba muchos errores, se me modificaban los nombres de los artefactos, perdía configuraciones, Microsoft realizaba cambios y perdía configuraciones, hace poco liberaron la nueva interfaz para diagramar los pasos y tiene algunos problemas aún.

GonzaloArenasF - Microsoft Power Platform primer vistazo (Power Automate / Power BI) - Gonzalo A. Arenas Flores
Flujo de prueba en Power Automate
GonzaloArenasF - Microsoft Power Platform primer vistazo (Power Automate / Power BI) - Gonzalo A. Arenas Flores
Datos en excel obtenidos al terminar el proceso de Power Automate
GonzaloArenasF - Microsoft Power Platform primer vistazo (Power Automate / Power BI) - Gonzalo A. Arenas Flores
Reporte en Power BI consultando la data en Excel

Finalmente creé un proyecto en Power BI donde conecté dicho excel como fuente de datos del reporte y terminé listando los tipos de issue.

Aquí se presentó uno de los primeros problemas. La idea inicial era conectar la API de Jira directamente con Power BI, pero las posibilidades desde la versión web eran unicamente desde Excel, CSV, o entregar la información manualmente. Además, no tenía la posibilidad de descarga la versión desktop por temas de licencia, así que era lo que había, y fue como llegué a Power Automate.

Ahora, el proyecto de verdad

Lo dije al principio, al tener diversas fuentes de información la construcción de reportes de valor se hace muy complejo. Pero sumémosle dificultad a esto, en los tiempos actuales donde el acceso a la información es masiva y las fuentes son múltiples, tu Data Lake siempre tenderá al caos, y olvidate de la cantidad de datos que tendrás en tu Data Werehouse. ¿Cuánto crees que demorará la construcción de un reporte si se debe consultar y filtrar la información manualmente?. Bueno, es ahí donde Power Automate se transforma en el agente clave. Es el caso de uso que presentaré a continuación.

La misión es la siguiente: Almacenar en tablas diferentes, pero en el mismo Excel, tanto los proyectos como las iniciativas, épicas, y los equipos que las estuvieran desarrollando, todo esto para poder mirar la carga de trabajo y estimar los posibles desvíos de las fechas comprometidas.

Como ya lo he mencionado, no puedo dar mucha información, así que me remitiré a explicar los pasos sin detalles. Pra fines del ejercicio es suficiente lo podrán aplicar en sus proyectos personales con una curva de aprendizaje mínima (si es que ya has trabajado en esto o eres un desarrollador. Si no, siempre puedes escribirme.)

GonzaloArenasF - Microsoft Power Platform primer vistazo (Power Automate / Power BI) - Gonzalo A. Arenas Flores
Creación de tablas en excel

Antes de todo, debemos crear un archivo Excel, y dentro del este 5 páginas diferentes. Dentro de cada una de ellas habrá una tabla con un propósito particular para guardar información.

Es importante que la información sea guardada en tablas y les otorguen nombres específicos para no perder la cadena de la información conectada entre Power Automate, Excel, y Power BI.

  • Proyecto activos
  • Proyecto archivados
  • Iniciativas
  • Hitos
  • Épicas

Paso 1

  1. Similar al proyecto de prueba, iniciamos un cun trigger manual, pero con unas diferencias. Considerando que llamaremos a varios endpoints de la API de Jira, y hacer más sencilla la mantención del flujo, es que aquí solicitaremos al usuario el email y el token de seguridad, los cuales se almacenaran en variables que podrán ser solicitadas en acciones posteriores.
  2. Enviamos un mensaje a Teams indicando que el proceso ha iniciado.
  3. Aquí un artefacto nuevo muy util. Scope que nos permite encapsular procesos. Al igual que en Javascript, lo que sucede aquí no se conoce afuera más que su estado general.
  4. Se ejecutan 5 procesos en paralelo para eliminar la información existente en el archivo Excel. Este proceso es algo tedioso y exigente para la rutina. Básicamente es recuperar todo lo que tiene cada tabla y eliminar registro por registro. (No encontré otra forma en ese momento)
  5. Finalmente enviamos un mensaje vía Teams indicando que la eliminación de datos antiguos fue terminado.

Como antecedente, esta priemra parte demora cerca de 30 minutos.

GonzaloArenasF - Microsoft Power Platform primer vistazo (Power Automate / Power BI) - Gonzalo A. Arenas Flores
Paso 1 del proyecto principal
GonzaloArenasF - Microsoft Power Platform primer vistazo (Power Automate / Power BI) - Gonzalo A. Arenas Flores
Paso 2 del proyecto principal

Paso 2

Siendo exitoso y cumpido el paso 1, nos vamos con lo siguiente. Considerando la arquitectura de información de Jira, tuve que consultar la información ofical en reiteradas ocaciones, además de utilizar la aplicación Insomnia para revisar las respuestas de los endpoints y poder determinar cómo estaban anclados los issues a los proyectos y entre los diferentes issues.

Por suerte todo era bastante sencillo e intuitivo dentro de la respuesta de los diferentes servicios, por lo que pude darme cuenta que cada uno de los issues, independiente de su tipo, estaban anclados directamente con el proyecto. Por lo que lo siguiente a realizar es la obtención de todos ellos. Aquí se empieza a complicar un poco el esquema.

  1. Enviamos un mensaje a Teams indicando que inicia la segunda etapa.
  2. Definimos un Scope para los procesos de obtención de proyectos.
  3. Llamamos al endpoint /rest/api/3/project configurando el email y token de conexión usando las variables definiddas en el trigger inicial.
  4. Definimos un Parse JSON con el contrato del servicio indicando que solo utilizaremos el atributo self de la respuesta del servicio. Una de las particularidades de la API de Jira, es que las respuestas usualmente incluyen en cada registro el endpoint para llamar ala servicio que tiene más detalles del mismo contenido. Ese endpoint se obtiene en el atributo self.
  5. Denfinimos una iteración para recorrer la respuesta del servicio.
  6. Dentro de la iteración llamamos al endpoint que recibimos dentro edl atributo self.
  7. Definimos un nuevo Parse JSON con la información que guardaremos en la tabla de Excel.
  8. Aquí un nuevo artefacto: Condition, para los programadores, es basicamente un "If" con el cual vamos a preguntar si el proyecto está archivado o no. Esto es importante para guardarlo en la abla cortrespondiente en el paso siguiente.
  9. Finalmente enviaremos el mensaje a Teams respectivo dependiendo de si el proceso se hizo con éxito o no.

Paso 3

Era importante hacer la distinción entre proyectos activos y los archivados. Si bien los consideré en el reporte, no es información de valor para la duda que se deseaba resolver. Para fines de este ejercicio, solo nos interesan los activos, por lo que el primer paso es por ellos al archivo Excel.

  1. Solo una vez que el proceso de recuperación de proyectos termine correctamente es que se ejecutará esta última etapa. Teniendo esto en cuenta, enviamos el mensaje de que la recuperación de Issues se iniciará.
  2. Creamos un nuevo Scope para la recuperación de Issues, y su primer paso es ir por los proyectos que fueron guardados en la tabla de proyectos activos.
  3. Abrimos un loop para iterar sobre cada registro y paralelizamos 3 procesos:
    • Recuperación de Iniciativas
    • Recuperación de Hitos
    • Recuperación de Épicas
  4. Los 4 procesos son exactamente iguales, solo que el endpoint se utilizar diferentes parámetros. Primero se llama al endpoint /rest/api/3/search/ con el siguiente queryparam: jql=issuetype={{ código de Iniciativa, Hito, o Épica}}&project={{Key del proyecto}}.
  5. Como en procesos anteriores, usamos un Parse JSON para únicamente pedir el atributo self.
  6. Como cada proyecto puede tener 1 o muchos issues, entonces debemos abrir una nueva iteración.
  7. Por cada registro obtenido del servicio Search utilizaremos su self para obtener el detalle de cada uno.
  8. Utilizaremos nuevamente un Parse JSON para solo mapear la información que guardaremos en las tablas correspondientes.
  9. Agregamos un condicionante para validar cuando el estado del servicio efectivamente responda con un status 200. Me pasó varias veces que este fallaba por malas vinculaciones entre issues o porque eran data de prueba.
  10. Finalmente guardamos cada registro en las tablas correspondientes.
  11. Una vez que los procesos paralelizados terminen, enviamos un mensaje vía Teams indicando si terminó exitosamente o con fallos esta última etapa.
GonzaloArenasF - Microsoft Power Platform primer vistazo (Power Automate / Power BI) - Gonzalo A. Arenas Flores GonzaloArenasF - Microsoft Power Platform primer vistazo (Power Automate / Power BI) - Gonzalo A. Arenas Flores
Paso 3 del proyecto principal

Todo lo que les he mostrado en su totalidad demora cerca de 2 horas. Por lo que ahora pueden entender porqué es tan imperiosa la automatización de este tipo de procesos, el cuál se puede dejar configurado para ejecutarse todas las noches y al terminar, compartir la referencia al reporte que les mostraré a continuación.

Como dato al margen, al momento de terminar este artículo, sigo peleando con un proceso que siempre termina con error debido a datos mal configurados, al parecer. Debo pensar cómo puedo controlar ese tipo de excepciones. Quizá más adelante lo agregaré a estos comentarios.

Creando el reporte en Power BI

Nuevamente, no puedo compartirles el detalle de la información por lo que habrán cosas debidamente ocultas. Sin embargo se entenderá para el pro`ósito de este artículo.

El primer paso es crear un nuevo reporte, donde puedes utilizar templates bastante útiles, o como es mi caso, abrir uno desde cero y vincular de inmediato el archivo Excel con la data que imcorporamos usando Power Automate. La aplicación por si sola reconocerá la información en su interior mediante las tablas que previamente definimos y te las ofrecerá como fuentes de información.

GonzaloArenasF - Microsoft Power Platform primer vistazo (Power Automate / Power BI) - Gonzalo A. Arenas Flores
Power BI - Modelo de entidades y relaciones

Ahora es cuando cobra valor el capturar buena información desde tu Data Werehouse y entender como se vinculan entre todas las fuentes. Para este caso, la clave es que todos los Issues pertenecen al mismo proyecto. Eso ya te ayuda con el primer filtro. Pero el resto depende de las relaciones definidas entre ellas. Por suerte, Jira maneja una relación parent por defecto, que es la que se usó para definir la relación entre una iniciativa, sus hitos, y las épicas de estos últimos.

Aquí algo que me gustó mucho de Power BI, y es la posibilidad de darle una lógica estructural a la información utilizando el clásico diagrama de entidades y relaciones. Esto es muy útil al momento de generar el reporte, ya que el usuario puede seleccionar un valor en específico del reporte, y todo se filtrará y adecuará a esa selección mediante las relaciones establecidas en el data model del reporte.

Aquí puedes crear las respectivas relaciones utilizando los valores key de cada tabla y su referencia guardada en las tablas vinculadas. Basicamente un Foreign Key (FK) al arquitecturar bases de datos.

Y finalmente... el reporte.

Todo este proceso culmina con la posibilidad de crear un reporte personalizado y dirigido a quienes toman decisiones. Este reporte tiene varias páginas, por lo que solo les muestro la portada donde ya se puede ver la distribución de los proyectos y la carga de trabajo en cada uno de ellos.

Power BI ofrece diversos recursos para representar la información, muy útiles, pero también habre la posibilidad de integrar recursos de terceros que te dan nuevas posibilidades. Ahora queda en tí qué tanto provecho le puedes sacar.

GonzaloArenasF - Microsoft Power Platform primer vistazo (Power Automate / Power BI) - Gonzalo A. Arenas Flores
Power BI - Reporte generado

Para ir cerrando: El proceso para llegar a esta etapa, considerando aprendizaje, pruebas de concepto, dolores de cabeza, y finalmente tener algo medianamente aceptable, tomó cerca de 1 semana donde tuve la suerte que mi agenda se alivianó.

Quedé gratamente sorprendido con estas herramientas de Microsoft. Power Automate entre en la competencia de mercado junto a servicios como Make o N8N, los cuales aún no he podido probar, donde realmente pude notar el ahorro de tiempo en la construcción de herramientas. Si bien me faltaron cosas que provee la versión desktop, se pueden ralizar cosas interesantes des pues de todo.

Power BI es un mundo a parte. El potencial de la herramienta es fiel reflejo de su demanda en el mercado junto a otros como Tableau, donde todos apuntan a lo mismo, solo que con interfaces y experiencias diferentes. Con el volumen de información, su nivel de cambio tan vertiginozo, y lo costoso de la mano de obra para generar reportes de valor le da todo el sentido a la utilización de estos recursos. Me hizo recordar mi esperiencia en la empresa Puratos donde parte de las tareas del equipo de TI era la preparación de reportes en Oracle Report. Si hubieramos tenido esta tecnología, quizá muchos habríamos sido despedidos.... jajajaj.

Finalmente, no dejen de ser curiosos y entren en este mundo. El mercado lo demanda, y aún estamos a tiempo.