Power BI dispone de ciertas herramientas de administración: APIs administrativas, un SDK .NET y un módulo de PowerShell con cmdlets que permiten a los administradores ir más allá de lo que el portal de Power BI Admin ofrece. Vamos a ver las diferencias entre la API y los cmdlets y después mostraremos cómo usarlos en un caso práctico: resfrescar el dataset tras un evento, en este caso al finalizar la carga del datawarehouse.

Power BI REST APIs

En pocas palabras, la API es una interfaz para interactuar con el servicio de Power BI. La API REST de Power BI nos permite:

  • Crear apps que integren informes y cuadros de mando de Power BI. Podemos insertar contenido en nuestras aplicaciones, páginas web, SharePoint, Microsoft Teams…
  • Gran variedad de opciones de automatización que nos ayudan en muchos aspectos, por ejemplo, disminuyendo el tiempo de desarrollo. Con la API podemos crear nuevos data sources, clonar data sets, comprobar las credenciales de un data source, listar todo los data sources de un Gateway, refrescar un dataset…

Power BI API REST reference: https://docs.microsoft.com/es-es/rest/api/power-bi/ Cabe resaltar que el uso de la REST API para crear apps no es sencillo. Requiere un registro desde la web de Power BI dev, registro de la app en Azure, revisión de permisos y conectividad…

Cmdlets para Windows PowerShell

Un cmdlet es una clase de .NET que implementa una tarea u operación específica (como, por ejemplo, un fichero ejecutable). Una de las ventajas de estos cmdlets es que están disponibles como módulos en la galería de PowerShell y se pueden instalar muy fácilmente con un comando (Install-Module -Name MicrosoftPowerBIMgmt -Scope CurrentUser).

Otra de las ventajas es que el uso de cmdlets no requiere el registro de una app en Azure. Esto simplifica mucho su uso para los desarrolladores. Para usarlos solo hay que identificarse en Power BI usando el cmdlet “Login-PowerBI” e invocar uno de los cmdlets disponibles o usar el cmdlet “Invoke-PowerBIRestMethod” para operaciones que solo están disponibles en la API Rest. En la imagen inferior podemos ver que hay muchas más funciones en la API rest que cmdlets. Power BI cmdlets reference: https://docs.microsoft.com/en-us/powershell/power-bi/overview?view=powerbi-ps

Caso práctico: refrescar un data set en Power BI tras la carga del DWH

Los refrescos de datasets en Power BI solo se pueden programar en base a un horario, pero a nosotros nos interesa que se refresque al finalizar nuestra carga de datos en DWH. Para ello vamos a usar cmdlets. Si vemos la lista de operaciones de datos de los cmdlets, no hay ninguna para operación de refresco de datos (en la fecha de escritura de este post – Nov 2019): Por ello, tenemos que usar el cmdlet Invoke-PowerBIRestMethod.

  • Si tienes Windows 10 Anniversary Update o Windows Server 2016 ya deberías tener Windows PowerShell 5.1. Abre PowerShell en tu equipo y comprueba que la versión es 5.0 o superior ejecutando este comando: Get-Host | Select-Object Version

       

Si tu versión de PowerShell es inferior a la 5.1, descarga e instala Windows Management Framework 5.1, el cual contiene Windows PowerShell 5.1:  https://www.microsoft.com/en-us/download/details.aspx?id=54616

  • Instala o actualiza los cmdlets de Power BI ejecutando uno de estos comandos:
Install-Module -Name MicrosoftPowerBIMgmt
Update-Module -Name MicrosoftPowerBIMgmt

  • Usa el comando Login-PowerBI para conectarte a tu cuenta de Power BI.

Aquí podemos ver que para usar este método necesitamos en “datasetid”. Para obtener el datasetID, vamos a la web de Power BI, al apartado “Datasets”, “Settings”:

Copiamos el id al final de la url:

Volvemos a la página de documentación API REST, pulsamos sobre el botón “try it” (identificándonos con nuestra cuenta de Power BI) y pegamos el “dataset id” que copiamos de la url en el campo “datasetID”:

Pulsamos sobre “Run” y si ahora vamos a ver la hora del último refresco del dataset en el portal de Power BI, debería haberse actualizado a la fecha actual.

Dataset actualizado:

  • Con la URL que nos genera la prueba de la API, montamos la llamada al cmdlet.

Se debe realizar una llamada de tipo POST y, además, es obligatorio poner en el body un parámetro para notificar el resultado del refresco por email. Nosotros lo vamos a dejar como cadena vacía para indicar que no queremos notificación:

$body = @{
     'notifyOption'= ""
}
Invoke-PowerBIRestMethod -Url "https://api.powerbi.com/v1.0/myorg/datasets/d4355aef-a4ab-424b-9816-8b773835ba32/refreshes" -Body $body -Method Post 

Para verificar el resultado, vamos a mostrar el histórico de refrescos para comprobar que se ha realizado correctamente el refresco. Para ello debemos añadir este código:

$result = Invoke-PowerBIRestMethod -Url "https://api.powerbi.com/v1.0/myorg/datasets/d4355aef-a4ab-424b-9816-8b773835ba32/refreshes" -Method Get
$result 

Lo probamos desde PowerShell, nos aparecerá el histórico de refrescos y, el primer resultado debería coincidirnos con la hora del último realizado:

El último paso sería guardar el script y ejecutarlo como último paso en nuestro ETL pero para poder automatizarlo y no tener que introducir las credenciales manualmente, este sería el código:

Import-Module MicrosoftPowerBIMgmt -Force
#region username and password
$user = "yourAccount@SolidQTraining.onmicrosoft.com"
$pass = "yourPassword" | ConvertTo-SecureString -AsPlainText -Force
#endregion

#region Connection to Power BI
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user, $pass
Connect-PowerBIServiceAccount -Credential $cred
#endregion


$body = @{
     'notifyOption'= ""
}
Invoke-PowerBIRestMethod -Url "https://api.powerbi.com/v1.0/myorg/datasets/yourDatasetID/refreshes" -Body $body -Method Post
$result = Invoke-PowerBIRestMethod -Url "https://api.powerbi.com/v1.0/myorg/datasets/yourDatasetID/refreshes"-Method Get
$result  

 

¿Quieres especializarte en administración y desarrollo con Power BI? Reserva tu plaza en nuestros próximos cursos de formación presencial:

 

Marta Pereira