¿Cómo integrar Power BI y Azure Data Factory?

  • Artículos
  • Ingeniería de Datos

Introducción

Hoy en día, existen empresas que generan ventajas competitivas con respecto a otras a través del uso conveniente de sus datos. Pero no es algo rápido de hacer, ni mucho menos sencillo. Muchas veces los datos que se generan en las bases tradicionales de las organizaciones almacenan registros en un formato orientado a la atomicidad, coherencia, aislamiento y durabilidad (conocidas como propiedades ACID), las cuales son características clásicas de los motores de bases de datos relacionales. Sin embargo, para poder analizarlos y tomar decisiones basadas en ellos, es necesario transformarlos y almacenarlos en algún otro lugar que les permita ser consultados rápidamente. Aquí es donde entra en juego integrar Power BI y Azure Data Factory, ya que dependiendo de las dimensiones de los datos, suelen aparecer los conceptos de data warehouses, data marts y data lake

Sin ahondar mucho más allá, en Brain Food ayudamos a empresas a diseñar e implementar arquitecturas tecnológicas que permitan hacer un uso eficiente e inteligente de sus datos, para que puedan tomar mejores decisiones, mejorar sus procesos, aumentar su competitividad y hacer la diferencia en sus respectivos mercados. Sin embargo, es usual encontrarse con el problema de que los usuarios no puedan visualizar gráficamente la información, y por ello, es vital contar con una buena herramienta de reportería, como, por ejemplo, Microsoft Power BI. Esta herramienta es líder en el mercado y cuenta con servicios cloud, lo que permite procesar y visualizar reportes en línea, crear espacios de trabajo, compartir con otros usuarios, limitar accesos, entre otras características. Por otro lado, para tener la información de calidad que se desea visualizar en los reportes, es común realizar previamente procesos ETLs (Extract, Transformation & Load), que tomarán datos crudos para procesarlos y almacenarlos en el destino definido por la arquitectura de la organización. Para esa labor, existen diferentes herramientas y una de nuestras preferidas es Azure Data Factory, que es el servicio ETL de la nube de Azure para la integración y transformación de datos sin servidor de escalabilidad horizontal. Ofrece una interfaz de usuario sin código que favorece la creación intuitiva y una supervisión y administración desde un único panel, simplificando notoriamente la gestión de este tipo de procesos. En este post se explicará cómo funciona la integración entre Power BI y Azure Data Factory (ADF).

Desarrollo

Comúnmente, se establece que los procesos que cargan datos en un data mart o data warehouse, se desencadenen periódicamente para mantener una base lo más actualizada posible (esto último, sujeto a las reglas del negocio), sin embargo, aquello no necesariamente mantiene actualizados los reportes, pues es usual que en Power BI existan dataflows y datasets específicos para cada visualización. Entonces, una solución sería que cada vez que finalice correctamente un ETL en Azure Data Factory, se pudiese ejecutar el dataflow correspondiente, que a su vez actualizaría el dataset que consume el reporte y así evitar que el usuario visualice una versión antigua.

El primer paso para lograr ello, es habilitar en el panel de administración de Power BI Service que las aplicaciones registradas en Azure Active Directory (más adelante, AAD) puedan utilizar sus APIs con el botón enabled, y seleccionar también el security group que podrá hacerlo, como se puede ver en el segundo recuadro rojo en la siguiente imagen (por supuesto que el recurso de ADF debe estar registrado allí también).

Una vez ya configurados los permisos, hay que enviar un HTTP request al servicio de autenticación de AAD con el fin de obtener el token que permitirá comunicarse con PBI desde ADF, y esto se puede realizar con una web activity que dentro del body envíe como parámetros las credenciales necesarias usando el método POST, a la url correspondiente como se puede ver a continuación:

La url debe seguir el formato: https://login.microsoftonline.com/{tenantid}/oath2/token

De resultar exitosa la petición, AAD responderá con los parámetros token_type y access_token que permitirán hacer requests seguros a la API de PBI. Luego, el siguiente paso entonces, es ejecutar la actualización del dataflow correspondiente y para ello se utilizará el siguiente endpoint disponible:

POST: https://api.powerbi.com/v1.0/myorg/groups/{groupId}/dataflows/{dataflowId}/refreshes

Donde groupId y dataflowId son los identificadores del workspace y el dataflow asociado.

Además, los parámetros obtenidos desde AAD deben ser concatenados con el formato ‘{token_type} {access_token}‘ e incluidos en los headers de cada petición. Por otro lado, este endpoint requiere enviar un parámetro para configurar el tipo de notificación que se recibirá una vez el dataflow se actualice. Lo descrito anteriormente se puede observar en la siguiente imagen:

Ahora bien, para actualizar el dataset que consume específicamente el reporte, hay que esperar a que el dataflow termine de actualizarse, lo cual, dependiendo de la envergadura del modelo, puede tardar varios minutos. Para saber cuándo ocurrirá eso, se puede utilizar el siguiente endpoint:

GET: https://api.powerbi.com/v1.0/myorg/groups/{groupId}/dataflows/{dataflowId}/transactions

El cual retornará el parámetro status, que corresponde al estado de la transacción (en este caso, la actualización del dataflow). Como es probable que la respuesta sea InProgress, se puede utilizar como condición de borde cuando el estado ya no sea así, como se puede visualizar en el siguiente pipeline:

Una vez verificado que el proceso del dataflow terminó, finalmente es momento de actualizar el dataset con el siguiente endpoint:

POST: https://api.powerbi.com/v1.0/myorg/datasets/{datasetId}/refreshes

(Notar que este endpoint también requiere el parámetro notifyOption.)

Finalmente, una orquestación de este tipo puede verse así:

Cierre

Con esta implementación se logra tener un flujo continuo y automático, que obtiene datos desde un sistema transaccional, los transforma y los disponibiliza como información en una capa especialmente desarrollada para el negocio, capaz de generar accionables concretos. Todo esto sin la necesidad por parte del usuario de actualizar el dataset, puesto que la integración de la API deja el reporte listo, ahorrando cerca de 10 minutos que demoraría cada iteración, que, en tiempos de alta demanda, pueden llegar a ser más de 3 iteraciones al día, por reporte.

Por otro lado, se comprobó la factibilidad de una integración entre Power BI y Azure Data Factory, herramientas que son bastante versátiles y amigables con el usuario, y que permiten construir capas analíticas de información que el día de mañana cada área de una organización podría usar para satisfacer sus propias necesidades.

Referencias