¡Hola, chicos!
En este artículo que comparto contigo, me gustaría ayudarte con un problema muy común para quienes trabajan con BI y necesitan actualizar los datos del informe de Power BI automáticamente más de una vez al día. Generalmente veo muchos escenarios en los que el equipo de BI crea una rutina automática para actualizar datos en la base de datos, configurada para ejecutarse en momentos específicos, y luego programa la actualización de estos datos en el servicio Power BI en un momento en el que probablemente los datos ya han sido actualizados por la rutina ETL/DW.
Y luego, cuando la rutina tarda más de lo esperado, sus datos quedan desincronizados y, de hecho, mantener esta sincronización entre los tiempos de ejecución de la rutina de la base de datos y la actualización en Power BI es una tarea muy complicada.
¿No sería MUCHO MEJOR si existiera la posibilidad de que la rutina que carga y procesa los datos también comenzara a actualizar los conjuntos de datos de Power BI? Ha llegado el momento de aprender a hacer esto 🙂
El consejo de este artículo se refiere a conjuntos de datos cuyo modo de almacenamiento es Importar, que copia los datos del origen y los lleva al servicio Power BI. Si utiliza DirectQuery, no es necesario automatizar la actualización de datos, ya que la consulta se realiza dinámicamente en la fuente de datos. Al igual que la actualización programada de Power BI solo puede actualizar automáticamente un conjunto de datos 8 veces al día en la cuenta Pro (y 48 veces en Premium), la actualización bajo demanda también está dentro de este mismo límite
La actualización de datos mediante la API de Power BI solo funciona si su usuario es un administrador del espacio de trabajo. De lo contrario, el script mostrará un mensaje de error cuando se ejecute.
El primer paso para poder interactuar con el servicio Power BI a través de Powershell es instalar los cmdlets que facilitan la comunicación con la API del servicio. Además de actualizar el conjunto de datos, es posible realizar varias automatizaciones y controles usando esta función, dependiendo del Rafael Mendonça, uno de los mayores expertos en Power BI del mundo, nos lo muestra en el artículo [POWER BI] – Cmdlets para PowerShell – ¡Administrando Power Bi como un profesional!.
Abra Powershell (ISE o símbolo del sistema) como administrador:
En la pantalla del símbolo del sistema, escriba el comando "powershell”Para inicializar la interfaz de PowerShell.
Después de eso, escriba el comando “Módulo de instalación MicrosoftPowerBIMgmt" para instalar los cmdlets. Probablemente aparecerá una confirmación si confía en este repositorio. Marque la opción "Sí para todos":
Después de eso, los cmdlets ya están instalados y podemos comenzar a usarlos. Si desea utilizar la interfaz PowerShell ISE para instalar los cmdlets, no dude en hacerlo. La instalación sigue los mismos pasos. Si quieres saber más sobre estos cmdlets y algunos detalles más sobre la instalación, como instalar módulos por separado y también ejemplos usando PowerShell ISE, te recomiendo leer el artículo. [POWER BI] – Cmdlets para PowerShell – ¡Administrando Power Bi como un profesional!.
Si su PowerShell informa un error al intentar ejecutar el comando Install-Module, es porque su máquina todavía usa PowerShell 4.0 o una versión anterior. Si este es tu caso, necesitarás instalar el Marco de administración de Windows 5.1 para agregar este módulo a su PowerShell.
Creando un script de Powershell para actualizar datos
Haga clic aquí para ver el contenido
En nuestro script de actualización de datos usaremos los siguientes métodos:
Connect-PowerBIServiceAccount: Se utiliza para conectarse al servicio Power BI mediante el nombre de usuario y la contraseña de esta cuenta de Power BI.
Invocar el método PowerBIRest: Se utiliza para realizar una llamada a la API de Power BI que realizará determinadas acciones según los parámetros utilizados.
A continuación, proporcionaré un script para actualizar un conjunto de datos específico:
#1. Autenticação
$Usuario = "[email protected]"
$Senha = "senha_dificil_123"
$SenhaSegura = ConvertTo-SecureString $Senha -AsPlainText -Force
$Credencial = New-Object System.Management.Automation.PSCredential($Usuario,$SenhaSegura)
Connect-PowerBIServiceAccount -Credential $Credencial
#2. Recupera o ID do Workspace e do Dataset
$Workspace_ID = "8fda9bda-13c5-45ec-9a4f-3bcfe51ed57f"
$Dataset_ID = "fd3df53a-9a3a-40ee-91f0-585c9fb52c67"
#3. Monta a URL de atualização do DS
$Url_Atualizacao = 'groups/' + $Workspace_ID + '/datasets/' + $Dataset_ID + '/refreshes'
#5. Executa a atualização e notifica por e-mail em caso de falha
$NotificacaoFalhaPorEmail = @{"notifyOption"="MailOnFailure"}
Invoke-PowerBIRestMethod -Url $Url_Atualizacao -Method Post -Body $NotificacaoFalhaPorEmail
Para identificar el ID del espacio de trabajo y del conjunto de datos, simplemente acceda al menú lateral de Power BI, abra el espacio de trabajo donde se encuentra este conjunto de datos y luego haga clic en el conjunto de datos que desea actualizar:
Cuando abre el conjunto de datos, puede obtener el espacio de trabajo y el ID del conjunto de datos de la URL:
Reemplace el script que puse a disposición con estos 2 ID:
#2. Recupera o ID do Workspace e do Dataset
$Workspace_ID = "ee72886a-26c8-4d59-97f6-e7b811adc507"
$Dataset_ID = "3aaf8f29-f54b-4b9c-a171-d8d0ef2fcea7"
Si desea actualizar más de un conjunto de datos en el script, hágalo así:
#2. Recupera o ID do Workspace e do Dataset
$Workspace_ID = "8fda9bda-13c5-45ec-9a4f-3bcfe51ed57f"
#3. Monta a URL de atualização do DS
$Url_Atualizacao1 = 'groups/' + $Workspace_ID + '/datasets/fd3df53a-9a3a-40ee-91f0-585c9fb52c67/refreshes'
$Url_Atualizacao2 = 'groups/' + $Workspace_ID + '/datasets/fd3df53a-9a3a-40ee-91f0-449e4c453c13/refreshes'
$Url_Atualizacao3 = 'groups/' + $Workspace_ID + '/datasets/fd3df53a-9a3a-40ee-91f0-fef43a0bc123/refreshes'
#5. Executa a atualização e notifica por e-mail em caso de falha
$NotificacaoFalhaPorEmail = @{"notifyOption"="MailOnFailure"}
Invoke-PowerBIRestMethod -Url $Url_Atualizacao1 -Method Post -Body $NotificacaoFalhaPorEmail
Invoke-PowerBIRestMethod -Url $Url_Atualizacao2 -Method Post -Body $NotificacaoFalhaPorEmail
Invoke-PowerBIRestMethod -Url $Url_Atualizacao3 -Method Post -Body $NotificacaoFalhaPorEmail
Después de realizar este cambio, guarde el script con el nombre que desee, pero la extensión del archivo debe ser .ps1.
Cómo ejecutar el script Powershell desde el Agente SQL Server
Haga clic aquí para ver el contenido
Después de crear el script de actualización, ejecútelo desde una herramienta para automatizar esta ejecución. Esta herramienta puede ser el Agente SQL Server, el Programador de tareas de Windows, SQL Server Integration Services (SSIS), Pentaho o cualquier otra herramienta que pueda ejecutar comandos a nivel del sistema operativo. En este artículo demostraré cómo hacer esto directamente a través de un trabajo del Agente SQL Server y dentro de un paquete SSIS.
Idealmente, este proceso de actualización de Power BI debería realizarse en el mismo trabajo que actualiza y procesa los datos de la base de datos:
Y en este nuevo paso, que será del tipo “Sistema operativo (CmdExec)”, colocarás el siguiente comando a ejecutar: powershell.exe -ExecutionPolicy Unrestricted -File "C:\Scripts\Atualiza Power BI.ps1"
El modificador -ExecutionPolicy se utiliza para que Powershell pueda ejecutar el script en un contexto de ejecución sin restricciones que puedan causar un error durante el procesamiento del script.
Recuerde cambiar la ruta del archivo .ps1 a la ubicación donde guardó su secuencia de comandos. Después de programar el trabajo, su informe de Power BI se actualizará automáticamente al final del procesamiento.
El usuario que ejecuta el servicio del Agente SQL debe tener los permisos necesarios para ejecutar este script de Powershell. Si es una cuenta de servicio estándar, puede cambiar la cuenta del Agente SQL a un usuario donde pueda iniciar sesión e instalar los cmdlets o también puede usar el comando Módulo de instalación MicrosoftPowerBIMgmt -Force -Scope AllUsers (ejecutar como administrador) para que todos los usuarios, incluidas las cuentas locales, puedan usar cmdlets de Power BI
Cómo ejecutar el script de Powershell a través de Integration Services (SSIS)
Haga clic aquí para ver el contenido
Además del Agente SQL Server, también puede ejecutar el script de PowerShell directamente a través de SSIS para actualizar los datos de su informe.
Para hacer esto, agregue una tarea "Ejecutar proceso", que se utiliza para ejecutar comandos a nivel del sistema operativo:
En la pantalla de configuración para esta tarea, escriba powershell.exe en el parámetro “Ejecutable” y -ExecutionPolicy sin restricciones -Archivo “C:\Scripts\Atualiza Power BI.ps1” en el parámetro “Argumentos”. Opcionalmente, cambie la configuración de "Estilo de ventana" a "Oculto", para que la ventana no aparezca en la pantalla durante la actualización:
Ejemplo:
Si el Agente SQL Server ya está ejecutando automáticamente su paquete SSIS, no necesita hacer nada más. De lo contrario, agregue otro paso al trabajo del Agente SQL Server para ejecutar el paquete que actualizará Power BI:
Cuando se ejecuta el trabajo, los datos de Power BI se actualizarán al final de la ejecución.
El usuario que ejecuta el servicio del Agente SQL debe tener los permisos necesarios para ejecutar este script de Powershell
Conclusión
Con este script de Powershell que compartí en el artículo, ahora podrá actualizar automáticamente los datos de Power BI inmediatamente después del procesamiento de datos en la base de datos, sin la necesidad de intentar sincronizar la hora en que finaliza el procesamiento de datos con la hora en que comienza la programación de actualización de Power BI allí en el servicio.
Ejemplo de actualización automática usando Powershell:
Vale la pena recordar nuevamente que las actualizaciones que utilizan la API se mantienen dentro del límite de 8 actualizaciones diarias para la cuenta Pro (y 48 para la cuenta Premium). En otras palabras, úsalo sabiamente... jajaja.
Espero que te haya gustado este consejo y ¡hasta la próxima!
Dirceu Resende
Arquitecto de Bases de Datos y BI · Microsoft MVP · MCSE, MCSA, MCT, MTA, MCP.
Comentários (0)
Carregando comentários…