Si disponemos de datos en una base de datos local y tenemos conjuntos de datos en Power BI que deban ser importados, para actualizarlos en Power BI disponemos de diferentes posibilidades.
- Actualizar el fichero local con Power BI Desktop y volver a publicarlo
- Realizar una actualización manual desde Power BI Service
- Programar la actualización en Power BI Service
- Utilizar una aplicación propia llamando a la REST API de Power BI
- Generar y lanzar un script con Power Shell
Es habitual en muchas empresas utilizar una base de datos donde mediante un proceso de ETL se importen, transformen y consoliden los datos en una serie de pasos, en estos casos probablemente la opción más simple para actualizar Power BI sea la de añadir un último paso que realice la actualización de datos. La solución está en las dos últimas posibilidades descritas y la más simple es recurrir a Power Shell.
Para poder realizar la actualización mediante Power Shell deberemos configurar un script, aunque este script necesita conocer el valor de unas variables que le permitirá autentificarse, autorizarse y saber el identificador del conjunto de datos a actualizar.
Básicamente necesitamos dos pasos: un primer paso maestro que nos permita identificarnos para todos los conjuntos de datos y un segundo, el propio script, que configuraremos para cada conjunto de datos.
Configurar la identificación y los permisos de acceso
El objetivo es obtener el ClientID de nuestra aplicación en la nube. Hay dos formas de hacerlo, mediante un formulario o bien mediante el portal de Azure. La más sencilla es la del formulario donde registraremos la aplicación. Hay que introducir un nombre, el tipo de aplicación debe ser nativa (Native app), unas URLs correctas (cualquiera, pero válidas) y asignar los permisos (los marcamos todos). Una vez pulsamos «Register APP» dispondremos del ClientID.
Esto registra una aplicación en directorio activo de Azure dentro de nuestra organización y que podemos gestionar mediante el portal del propio Azure.
Obtener los datos para el script
Necesitamos el GroupID (identificador del área de trabajo) y el DatasetID (identificador del conjunto de datos). No hay una forma sencilla para obtenerlo, pero no es tan difícil. Si vamos a la configuración del conjunto de datos y nos fijamos en la URL del navegador ya tenemos la información.
En mi ejemplo, para un conjunto de datos propio, la URL es
https://app.powerbi.com/groups/aad6373b-e6b3-44da-a9ac-f25dffefd5a2/settings/datasets/d6e72248-4d38-4ef1-9cbb-0acea88cd7c1
El GoupID será aad6373b-e6b3-44da-a9ac-f25dffefd5a2
El DatasetID será d6e72248-4d38-4ef1-9cbb-0acea88cd7c1
Componer el Script
El script que tenemos que componer es el siguiente
$pbiUsername = “Poner la cuenta – nombre@dominio.com” $pbiPassword = "Contraseña" $groupID = “Poner el GroupID - Poner 'me' si es el espacio personal" $datasetID = “Poner el DatasetID" $clientId = “Introducir el ClientID” $authResponse = $null $authUrl = “https://login.microsoftonline.com/cc318280-7c9c-4662-8a9d-f5deee4d6fb7/oauth2/token” $body = @{ “resource” = “https://analysis.windows.net/powerbi/api”; “client_id” = $clientId; “grant_type” = “password”; “username” = $pbiUsername; “password” = $pbiPassword; “scope” = “openid” } $authResponse = Invoke-RestMethod -Uri $authUrl –Method POST -Body $body $headers = @{ “Content-Type” = “application/json”; “Authorization” = $authResponse.token_type + ” ” + $authResponse.access_token } $groupsPath = “myorg/groups/$groupID” $uri = “https://api.powerbi.com/v1.0/$groupsPath/datasets/$datasetID/refreshes” # Actualizamos el dataset Invoke-RestMethod -Uri $uri –Method POST -Headers $headers –Verbose # Obtenemos la fecha de actualización Invoke-RestMethod -Uri $uri –Method GET -Headers $headers –Verbose
Nota. Para la programación de actualizaciones desde Power BI Service es necesario instalar una puerta de enlace si la fuente de datos está en un servidor local.