Automatizar la carga de datos de Power BI

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.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *