Automatización de las actualizaciones de dataflows y datasets

Automatización de las actualizaciones de dataflows y datasets

A principios de octubre, el genio de los dataflows Matthew Roche publicaba en su blog que ya estaba disponible la posibilidad de automatizar el refresco de los datasets dependientes de dataflows cuando terminara la actualización de los dataflows.

Esto se debía a una modificación en la REST API de Power BI que propiciaba un end-point para ello.

Pero el mismo Matthew indicaba en su post que la única forma que había disponible de momento era a través del código de powershell que habían creado y que el equipo de desarrollo de Microsoft está trabajando en poder facilitar a los usuarios la automatización de ese proceso, aunque aun no hay fecha oficial para este desarrollo.

Me puse entonces a investigar y trabajar con el script de powershell para intentar modificarlo en el sentido de poder automatizar ese proceso sin tener que abrir powershell y lo he conseguido.

Vayamos a su explicación, desde el principio.

1.      Descarga de los cmdlets de powershell

Lo primero que tenemos que hacer es tener preparado nuestro powershell para realizar el proceso y verificar que funciona perfectamente a través de powershell.

Todos los componentes e infinidad de ejemplos podemos encontrarlos en Git Hub en el siguiente repositorio:

https://github.com/microsoft/powerbi-powershell

Instalaremos todos los módulos de powershell para power bi:

La forma de instalarlos es muy simple:

1º Abrimos powershell en nuestra máquina en modo administrador

2º se nos abre la siguiente consola:

3º En el repositorio de github, vamos pinchando en cada uno de los links de la galería de powershell, copiando el código para su instalación y ejecutándolo en la consola:

Así con cada uno de los módulos.

Cuando terminamos de instalar todos podemos listarlos para comprobar que los tenemos bien con el siguiente comando:

Get-Module MicrosoftPowerBIMgmt* -ListAvailable

Y nos devolverá el siguiente listado:

Todo listo en cuanto a instalación de componentes genéricos del cmdlet de power Shell para la API rest de Power BI

2.      Instalación de los componentes específicos de Powershell para dataflows.

En el mismo repositorio de GitHub tenemos los componentes específicos para la actualización de los dataflow que vamos a necesitar y tendremos que descargárnoslos a nuestro equipo a través del siguiente enlace:

https://github.com/microsoft/powerbi-powershell/tree/master/examples/dataflows

Descargamos todos los ficheros existentes en ese repositorio y los copiamos en la carpeta c:\windows\system32

Esto nos va a permitir directamente poder ejecutar en Powershell el proceso de actualización como muestro en el siguiente mini video:

El primer reto ya está logrado. Actualizarlo a través de PowerShell.

Si esto nos funciona perfectamente como en el vídeo ya estamos preparados para saltar al paso 2 que es crear un archivo de power bi que haga automáticamente todo este proceso para que no tengamos que abrir en ningún momento la consola de powershell para su ejecución.

Para ello el primer reto que tenía que solventar era la eliminación del cuadro de diálogo de la autentificación que salta en powershell ya que si lo que queremos es automatizarlo, no podemos estar pendientes de poner la contraseña, sino que debe estar contemplada directamente en el código.

Esto es relativamente sencillo de realizar con el siguiente código que deberemos incluir en el script:

$password = «XXXXNuestroPasswordXXXX» | ConvertTo-SecureString -asPlainText -Force

$username = «XXXnuestroususarioPowerBIXXX»

$credential = New-Object System.Management.Automation.PSCredential($username, $password)

Connect-PowerBIServiceAccount -Credential $credential

Si ejecutamos ese código en la consola, directamente nos loguea PowerShell en nuestro servicio de PowerBI

Viendo que funciona, simplemente tendremos que hallar el lugar adecuado donde ponerlo en nuestro archivo RefreshModel.ps1. Esto no me fue fácil ya que mis conocimientos de Powershell son limitados, pero al final lo logré:

Simplemente hay que cambiar la línea del código original del archivo que pone:

LoginPowerBi($Enviroment) por nuestro código:

En la parte del código de Process:

                $password = «Nuestropassword» | ConvertTo-SecureString -asPlainText -Force

                $username = «nuestrousuario»

                $credential = New-Object System.Management.Automation.PSCredential($username, $password)

                Connect-PowerBIServiceAccount -Credential $credential

Por tema de permisos no nos dejará editarlo directamente en la carpeta System32 por lo que tendremos que copiarlo a otra carpeta, modificarlo y sustituirlo en la carpeta system32. En todo caso os dejaré un archivo con los archivos finales para que solo tengáis que introducir usuario y contraseña.

Ejecutamos de nuevo la sentencia que probamos en el video para comprobar que funciona sin necesidad de introducir las credenciales:

Pues ya solo nos queda crear un archivo pbix que sea capaz de ejecutar la sentencia de powershell sin abrir powershell. Para ello recurriremos a un script de R

Veamos cómo crearlo con RStudio

Ya tenemos nuestro script de R listo, pues simplemente nos lo llevamos a power BI para crear un archivo pbix que nos sirva para llamar a powershell y ejecutar la actualización.

Éste va a ser el código resultante de ejecución de R que tenemos que pegar en M simplemente cambiando “Pruebas Fran” por vuestro workspace y “ConsolidacionFehas” por vuestro dataset.

let
    Origen = R.Execute("actualizar<- system('powershell -command ""RefreshModel.ps1 -Workspace """"""Pruebas Fran"""""" -Dataflow """"""ConsolidacionFechas"""""" -RefreshDatasets""', intern=FALSE)#(lf)datos <- data.frame(""OK"")"),
    datos = Origen{[Name="datos"]}[Value],
    #"Personalizada agregada" = Table.AddColumn(datos, "Fecha Ultima Actualizacion", each DateTime.LocalNow()),
    #"Tipo cambiado" = Table.TransformColumnTypes(#"Personalizada agregada",{{"Fecha Ultima Actualizacion", type datetime}})
in
    #"Tipo cambiado"

Le he agregado una columna con la fecha del sistema para saber cuando hemos ejecutado la actualización.

Subimos este PBix al servicio y cada vez que lo actualicemos, nos iniciará el proceso de actualización 1º del dataflow y después de los datasets dependientes.

NOTA:  Al ser un script de R, para que actualice debemos crear una puerta de enlace personal en la misma máquina que tengamos R instalado y powershell con todos los componentes que en este post he ido explicando que teníamos que instalar.

El resultado final es el video que ayer colgué y como veis no tenía trampa ni cartón.

Materiales:

Contiene todos los archivos que debéis pegar en la carpeta c./windows/system32 En el archivo RefreshModel.ps1 es necesario agregar la contraseña y el usuario de power bi que aparece como XXXTUCONTRASEÑAXXX y XXXUSUARIOXXX.

FranM

2 comentarios

Francisco Publicado el1:22 pm - 25/11/2020

Muy bueno y muy bien explicado. Solo me falta aplicarlo cuando tenga tiempo 🙂 Muchas gracias por compartir.

Diego Diaz Publicado el12:26 pm - 20/11/2021

Excelente aporte, muchas gracias, lo pondré en practica y les contare…

Deja una respuesta