En esta entrada mostramos como publicar en Power BI desde Microsoft Flow un conjunto de datos hacia los ambientes de prueba o de producción.
Al desarrollar un proyecto es una buena práctica tener un ambiente de desarrollo, separado de producción y, según la envergadura del proyecto, otros ambientes para pruebas. En Power BI podemos crear Areas de Trabajo para cada ambiente y usar parámetros de consulta para definir la configuración de cada ambiente.
Escenario
Por ejemplo, podríamos tener un escenario como este:
- El archivo PBIX está en una carpeta de OneDrive, con lo que tenemos la historia de los cambios.
- Utiliza como fuente de datos un archivo Excel y tiene dos parámetros de consulta, Data Folder y Data Filename, para indicar la ubicación del archivo Excel.
- Tenemos una copia del archivo Excel en el ordenador donde desarrollamos con Power BI Desktop.
- El archivo Excel de producción está en un servidor que tiene instalado la puerta de enlace de datos de Power BI, y donde está configurada la ruta de acceso al archivo Excel.
Como la ubicación del archivo Excel es distinta en el entorno local y en el entorno de producción, cada vez que se publique en el servicio Power BI, hay que cambiar manualmente los valores de los parámetros.
Para automatizar la tarea vamos a crear un flujo con Microsoft Flow que hará lo siguiente:
- Obtendrá el archivo PBIX desde OneDrive y lo importará en el servicio Power BI
- Modificará los parámetros a los valores requeridos en producción
- Refrescará el conjunto de datos
Conector Power BI REST API
Utilizaremos la API REST de Power BI, para lo cual tendremos que crear un conector personalizado en Flow, porque aunque ya existe uno, es muy limitado.
Llamaremos a las siguientes operaciones de la API REST de Power BI:
Sobre cómo crear un conector personalizado ya hablamos en una entrada anterior. Y hay más información en otros blogs, como este de Konstantinos Ioannou, con todos los detalles de la configuración de seguridad, y este de Chris Webb, que explica cómo utilizar un archivo Open API.
Sin embargo, si utilizamos directamente este archivo para crear el conector, veremos que todas las acciones y referencias tienen errores de validación. La causa de los errores es que en el archivo Open API no se asignó el tipo object a ninguna de las definiciones. Nosotros lo hemos modificado y hemos compartido el nuevo archivo en GitHub.
También hicimos otra modificación, en la operación Imports_PostImportInGroup adicionamos un parámetro para poder adjuntar un archivo PBIX.
Esta es la definición JSON del parámetro:
{
"name": "pbixFile",
"in": "formData",
"description": "PBIX to upload",
"required": false,
"type": "file"
}
Con estos cambios, nuestro archivo está listo para crear el connector personalizado. Los pasos los pueden consultar en los blogs que hemos mencionado antes, por lo cual no los vamos a repetir. Sólo agregar que le pondremos el nombre Power BI REST API.
Inicio del flujo
Una vez hayamos creado el conector, podemos comenzar con el flujo y para ello creamos uno usando la opción Instantáneo: desde cero, le ponemos el nombre Power BI Publish y seleccionamos que el flujo se desencadenará desde Microsoft Flow.
Ya dentro del flujo, lo primero que haremos es inicializar algunas variables.
- Ruta OneDrive del PIBX, de tipo cadena, con la ubicación del archivo PBIX que queremos publicar.
- ID del Área de Trabajo, de tipo cadena, para indicar dónde queremos publicar. Para obtener este ID, podemos ir al sitio de Power BI, entrar al área de trabajo, y mirar en el URL
- Parámetros Conjunto Datos, de tipo matriz, que incializaremos con un objeto JSON con los valores de los parámetros en el ambiente de producción.
[ { "name": "Data Folder", "newValue": "C:\\data\\powerbi" }, { "name": "Data Filename", "newValue": "DataProduction.xlsx" } ]
- Omitir Informe, de tipo booleano, para indicar si queremos publicar el informe contenido en el PBIX, o sí sólo queremos publicar el conjunto de datos.
Los dos siguientes pasos del flujo consisten en obtener el archivo PBIX desde OneDrive y para ello buscamos el conector de OneDrive para la Empresa y las acciones Obtener contenido de archivo mediante ruta de acceso y Obtener metadatos de archivo mediante ruta de acceso. Adicionamos estos dos pasos al flujo, nos autenticamos en OndeDrive si es necesario, y en ambos casos le asignamos al parámetro Ruta de archivo la variable Ruta OneDrive del PBIX.
Importar el archivo PBIX en Power BI
Ya estamos listos para importar el archivo PBIX y lo haremos adicionando un nuevo paso. Buscamos el conector Power BI REST API, lo escogemos, buscamos la acción con el nombre Creates new content on the specified workspace from .pbix, .json, Excel, Rdl, or file path in OneDrive for Business, y configuramos los parámetros como se muestra en la siguiente imagen.
Los parámetros filePath y connectionType sólo son necesarios si se quiere publicar un archivo Excel que esté almacenado en OneDrive, y el parámetro fileUrl es para cuando se va a publicar un PBIX con tamaño mayor de 1 GB desde un blob de Azure. Estos tres parámetros los dejaremos en blanco.
Los parámetros pbixFile y pbixFile (nombre de archivo) aparecen debido al parámetro de tipo file que adicionamos en el archivo Open API, y son estos parámetros los que nos permitirán publicar el archivo PBIX que hemos obtenido desde OneDrive.
Antes de guardar el flujo, se debe re-nombrar este paso, porque el nombre sugerido es muy largo.
Evitar error 403
Esta acción de la API de Power BI reporta de forma inmediata que ha comenzado la importación del archivo, y devuelve el ID del proceso de importación. Luego se puede llamar a otra acción de la API para saber el estado de la importación, y eso es lo que vamos a hacer en los próximos pasos. Pero antes queremos hacer una observación.
Si guardamos el flujo y lo ejecutamos, es muy probable que ocurra un error en el último paso y obtengamos el código de estado 403. Pero si vamos al sitio de Power BI veremos que el conjunto de datos sí se creó o se actualizó. Para evitar este error, debemos ir a la configuración del paso y desactivar el modelo asincrónico. La causa del error es que la API de Power BI no envía la información necesaria para que Flow pueda sondear la terminación de la operación asincrónica.
Bucle
En los próximos pasos haremos un bucle esperando que termine la importación y guardaremos en una variable el ID de conjunto de datos que nos devuelvan, que lo necesitaremos para los dos últimos pasos.
Para chequear el estado de la importación creamos un paso donde volvemos a utilizar el conector Power BI REST API y la acción con el nombre Returns the specified import from the specified workspace, y le pasamos como parámetros la variable ID Area de Trabajo y el ID de la importación que recibimos como respuesta en el paso anterior.
Este paso lo insertamos en un bucle Repetir hasta, que termina cuando el estado de la importación sea «Succeeded».
Dentro del bucle, y después de chequear el estado, tenemos un paso de control para preguntar si ya está disponible el ID del conjunto de datos importado y asignárselo a una variable.
Actualizar parámetros y refrescar
El próximo paso después del bucle es para actualizar los parámetros del conjunto de datos, y para ello volvemos a utilizar el connector Power BI API REST, esta vez con la acción Updates the parameters values for the specified dataset from the specified workspace. Le indicamos el área de trabajo usando la variable que definimos al principio. El ID del conjunto de datos lo obtenemos de la variable que llenamos dentro del bucle. Y al parámetro updateDetails le asignamos el JSON que definimos en la variable Parámetros Conjunto Datos.
Y llegamos al último paso donde empleamos la acción Triggers a refresh for the specified dataset from the specified workspace, para indicarle a Power BI que refresque el conjunto de datos, y que de esta manera se actualicen los datos desde el archivo Excel indicado en los parámetros que modificamos en el paso anterior.
Ejecución
Bueno, ya el flujo está listo, podemos guardarlo y ejecutarlo.
La imagen muestra el resultado de una ejecución, donde se puede ver que el bucle se repitió 5 veces antes de que se comprobara que la importación había terminado.
Conclusiones
Hemos construido un flujo que puede emplearse para automatizar la publicación de los conjuntos de datos Power BI hacia el ambiente de pruebas o de producción. Este flujo se podría adaptar para llamarlo desde una PowerApp que le pase los parámetros para cambiar el área de trabajo, la ubicación del PBIX y los parámetros de consulta, y así podríamos manejar la publicación de varios proyectos hacia varios ambientes.