TodoBI - Business Intelligence, Big Data, ML y AI TodoBI - Business Intelligence, Big Data, ML y AI

Cómo actualizar tablas en PowerBI

Cuando trabajamos con fuentes de datos y tablas de gran volumen, entre las operaciones que nos resulta ya común trabajar está la de actualizar, pero sucede que en ocasiones solo nos interesa hacerlo para un numero determinado de tablas del conjunto de datos.

Una de las principales ventajas de esto es que reducimos la latencia y el tráfico de datos, además de que solo actualizaremos lo que necesitemos y eso nos ahorrara mucho tiempo. Los compañeros de Stratebi, especialistas y partners de Microsoft, nos cuentan como hacerlo:

Desde el servicio en línea de PowerBI para lograr este objetivo se puede realizar de varias formas, pero en todas el principal inconveniente es que necesitaremos PowerBI premium o premium por usuario.

Aunque se muestren algunas soluciones en el que el usuario puede actualizarlas manualmente la idea es que se automatice este proceso liberando de cargas de trabajo y perdidas en coste por tiempo.

Para las soluciones previstas será necesario conocer previamente varias aplicaciones dentro de Azure, así como algunos conceptos que nos ayudaran a entender un poco mejor en que consiste. A continuación, están los enlaces a toda la documentación y se comentaran brevemente previo a pasar a la solución paso a paso.

Referencias

Solución principal (Automate Power BI single table refresh using Azure Data Factory and Azure Automation (co authored by Paulien van Eijk, Dave Ruijter):

https://data-marc.com/2021/10/28/automate-power-bi-single-table-refresh-using-azure-data-factory-and-azure-automation/

Actualizar todas las tablas con PowerBI (Antecedentes):

https://microsoft-bitools.blogspot.com/2022/03/refresh-power-bi-datasets-with-adf-or.html

Setup Azure Data Factory and using Key Vault to store authentication elements(by Dave Ruijter):

https://www.moderndata.ai/2019/05/powerbi-dataset-refresh-using-adf/

Blog de Jorg Klein (Process Azure Analysis Services databases from Azure Automation):

https://jorgklein.com/2017/02/02/process-azure-analysis-services-databases-from-azure-automation/

Video resumen con otras soluciones posibles:

https://www.youtube.com/watch?v=OYYnoMa-93g

Otra solución usando XMLA y ADF: https://microsoft-bitools.blogspot.com/2022/05/refresh-1-table-in-power-bi-dataset.html

Antecedentes

Actualizar el set de datos y sus tablas ya se podía hacer y automatizar, pero el inconveniente que tenia es que no permitía elegir que se quería actualizar y lo hacia sobre todas las tablas. Esta opción venia incluida con la API REST de PowerBI premium siempre y cuando se tengan los permisos necesarios (rol de administrador u otro rol asignado con permisos).

El administrador deberá otorgar los permisos para que el Service Principal (SP) pueda usar la API de PowerBI y además otorgarle permisos para acceder al workspace donde esta el modelo y el dataset.

Para un mayor control y certeza de que las credenciales se almacenan de forma segura es conveniente usar Azure Key Vault (AKV). En AKV se va a guardar el token de AAD pero para generarlo antes necesitamos el id del SP, su clave y el id de AAD del tenant.

En Azure Data Factory (ADF) con una actividad tipo “Web Activity” vamos a recuperar las tres credenciales de antes que se guardaban en AKV.

Las tres credenciales formaban parte del token de AAD que ahora vamos a recuperar también y los haremos con el mismo tipo de actividad.

A continuación, vamos a actualizar las tablas y para el siguiente paso necesitamos el ID obtenido previamente y además los ID del workspace y del dataset. Estos últimos los guardamos como parámetros en caso de que cambiemos de dataset o workspace a futuro. Para actualizar usamos el mismo tipo de actividad que hará uso de la API.

Hasta aquí ha sido un breve resumen y en el enlace de la sección anterior está el enlace con documentación más en detalle. Se incluyen además otros enlaces relacionados con métodos similares a este sin necesidad de usar el SP.

1. Conceptos Principales

A continuación, se explicara brevemente los conceptos más relevantes.

WebHooks:

Son eventos que desencadenan acciones y se usan para la comunicación entre aplicaciones web. Dicho de otro modo, son puntos de retro llamada HTTP que almacenan datos de un evento en formato JSON o XML. El webhook envía una solicitud POST a la URL indicada cuando ocurre el evento.

Azure Automation (AA) y RunBooks

Es una herramienta de Azure en la nube encargada de la automatización, actualización y configuración de sistemas operativos, entornos externos de Azure y tareas de negocio mediante la ejecución de runbooks gráficos de PowerShell o Python.

Uno de los elementos importante de Automation es el recurso compartido de las credenciales, es decir se pueden usar para almacenar de forma segura la información confidencial y la configuración de los runbooks.

Automation Runbook (AAR) es una herramienta Azure dentro de Automation que sirve para automatizar eventos y procedimientos mediante los runbooks. Para importar o crear runbooks hay que usar Service Manager y Orchestrator. Si además queremos visualizar o editarlos Service Manager se ocupa de los runbooks.

Los tipos de runbooks:

Azure Key Vault (AKV):

Se utiliza para almacenar de forma segura las claves, secretos, tokens, certificados y además permite administrar el control de acceso a los mismos y el cifrado de los datos. En el caso que estamos tratando aquí se usara para almacenar el clientID y la clave por ejemplo.

2. Solucion Principal

Requisitos previos:

Para la solución final será necesario usar diferentes servicios de Azure, como ADF, AKV, AAD y AA, así como los runbooks y webhook.

A modo de ilustrar la idea de la solución se tiene el siguiente esquema simplificado con la conexión entre los servicios que se usará.

Paso 1 Configurar ADF y AKV:

El primer paso será configurar Azure Data Factory y AKV tal y como se describe en el enlace de Dave Ruijter.

Paso 2 Configurar AA:

El segundo paso será configurar Azure Automation. Para ello podemos hacerlo mediante el uso conjunto con Azure Analysis Service (AAS) como se describe en el blog de Jorg Klein.

Para este ejemplo en su lugar usaremos AKV para almacenar las credenciales y recuperarlas con ADF posteriormente.

Para comenzar con AA primero creamos una cuenta y al instante tendremos también nuestro runbook (seleccionar el tipo PowerShell) con la plantilla de configuración que mas adelante editaremos. El código del script de PowerShell es el siguiente donde el “credentialName” habrá que editarlo acorde a nuestros datos.

Param ( # To retrieve dynamic values in a webhook request, only this WebhookDate object parameter is supported, we need to pass it in the body of the webhook request. [Parameter(Mandatory=$False,Position=1)] [object] $WebhookData ) Write-Output "Runbook kicking off.." $errorActionPreference = "Stop" Write-Output "Get all parameters from the WebhookData parameter.." $Parameters = (ConvertFrom-Json -InputObject $WebhookData.RequestBody) Write-Output $Parameters Write-Output "Get the parameter values.." $WorkspaceName = $Parameters.WorkspaceName $Server = "powerbi://api.powerbi.com/v1.0/myorg/$WorkspaceName" $Database = $Parameters.Database $TableName = $Parameters.TableName $RefreshType = $Parameters.RefreshType $CallBackUri = $Parameters.callBackUri Try { Write-Output "Retrieve the Service Account credentials from the Automation Account credential.." $Credential = Get-AutomationPSCredential -Name '{YourCredentialName}' Write-Output "Invoke the table process.." $result = Invoke-ProcessTable -Server $Server -Database "$Database" -TableName "$TableName" -RefreshType $RefreshType -Credential $Credential Write-Output "Results:" $result Write-Output "Result.XmlaResults:" $result.XmlaResults $Body = @{ StatusCode = "200" } Write-Output "Invoke call back to ADF with status 200.." Invoke-RestMethod -Method Post -Uri $CallBackUri -Body $Body } Catch{ Write-Output "An error occurred:" Write-Output $_ # Return error in case of failure $Body = @{ StatusCode = "400" } Write-Output "Invoke call back to ADF with status 400.." Invoke-RestMethod -Method Post -Uri $CallBackUri -Body $Body } Write-Output "Runbook finished."

Además de referenciar las credenciales para enviar información desde ADF a AA vamos a usar los webhooks que agregaremos en Azure Runbook. Mientras creamos nuestro webhook es importante guardar URL que se genera pues nos permitirá ejecutar el runbook mas adelante. Para su almacenado seguro usaremos AKV.

En Azure Automation, la solución tendrá tres elementos necesarios para conectarla a Azure Data Factory.

Webhook: la configuración del webhook es la URL de activación que guardaremos en Azure Key Vault. Este webhook se usa para enviar un disparador al Runbook para que comience a ejecutarse.

Credenciales: las credenciales se guardan (encriptan) en la cuenta de Azure Automation y manejan la autenticación entre el runbook y PowerBI. Puede ser una cuenta de servicio o una entidad de servicio. En Azure Data Factory, leemos las credenciales de Key Vault, donde tenemos que reconfigurarlas para el runbook.

Script: el script es el script de PowerShell que se activa a través del webhook para ejecutarse y usa las credenciales guardadas en la cuenta de automatización. En el cuerpo de la llamada a la API, el script recibe varios parámetros enviados por Data Factory en el cuerpo de la solicitud. Estos parámetros son:

Workspace de PowerBI: se usará para concatenar en el script con la cadena predeterminada para obtener el XMLA.

Nombre del dataset: el nombre del conjunto de datos se usa en el script TMSL para especificar el conjunto de datos para activar la actualización de la tabla especificada.

Nombre de la tabla: la tabla que debe actualizarse en el conjunto de datos especificado.

Política de actualización: define el tipo de actualización que debe ejecutarse para la tabla especificada en el conjunto de datos especificado.

Paso 3 Desarrollar el pipeline en ADF:

A continuación, vamos a construir el pipeline en ADF y la primera actividad a usar es “Web Activity”. Con ella crearemos uno por cada una de las credenciales que queremos recuperar, es decir las credenciales(TenantID, ClientID, Secret, URL del webhook) guardadas en AKF. En la siguiente foto se pueden ver cada una de ellas.

En la configuración de cada una de estas actividades hay que usar en URL las credenciales de AKV

@activity('Get webhookurl from AKV').output.value

Además, en el Body incluimos los parámetros para actualizar las tablas, como el workspace, el nombre de la base datos y el tipo de actualización. Con estos parámetros podremos crear el XMLA que nos permitirá comunicarnos con nuestro dataset de PowerBI. Estos parámetros también están en el script de PowerShell mencionado anteriormente.

powerbi://api.powerbi.com/v1.0/myorg/{WorkspaceName}

@json( concat(' {"WorkspaceName": "',pipeline().parameters.workspacename,'", "Database": "',pipeline().parameters.database,'", "TableName": "',pipeline().parameters.table2,'", "RefreshType":"Full"}' ) )

El paso siguiente es recuperar el Token de Active Directory (AAD) pues las credenciales de antes nos sirven para autenticarnos en PowerBI y al autenticarnos obtenemos el token de AAD. Este paso es necesario para llamar a la API de cara a actualizar la tabla.

El tercer paso es crear un dataflow por cada actualización que vayamos a realizar y configuraremos las actualizaciones según nuestras necesidades.

El ultimo paso es ejecutar los runbooks por cada tabla que se quiera actualizar y para eso hemos usado la actividad “WebHook” pues esta recibe las URL de los pasos previos que necesita para lanzar la ejecución de los runbooks.

El resultado final del pipeline debería quedar así:

3. Comparativa con otras alternativas

Puntos fuertes

Usar una solución basada en scripts de PowerShell nos permite la integración con ADF y con ello automatizar la solución, además de que podemos conectar con AKV y guardar nuestras credenciales.

Puntos débiles

Requiere del conocimiento para crear el script y construir el pipeline, así como hacer uso de varios servicios de Azure.

Alternativas

La solución presentada relata de octubre de 2021 y ya hay otras soluciones mas recientes del año 2022 como las presentadas en el video que se enlaza u otras como las de este enlace. Son muy similares a la solución propuesta en este documento pues usan también ADF aunque según pase el tiempo será preferible optar por las soluciones mas recientes ya que en los últimos dos años Microsoft ha hecho muchos cambios en sus servicios y no hay garantía de que la solución aquí presentada sea del todo factible.

4. Conclusiones

Como hemos visto ya la necesidad de actualizar tablas concretas es una operación necesaria y que tenemos distintas opciones para resolverlo y que en algunos casos requiere el uso de ADF para su automatizado o con XMLA si se quiere una opción mas simple pero en cualquiera de los casos que se elija la limitación que aun esta por resolver y no depende de nosotros es tener la opción premium.

Una operación como esta que podría ser tan necesaria y común estaría bien que fuera mas accesible al usuario sin necesidad de tener premium pues muchos usuarios usan el pro.

Más info sobre PowerBI:

  1. Integracion SAP - PowerBI
  2. PowerBI Trucos (Vol I)
  3. PowerBI Trucos (Vol II)
  4. PowerBI + Synapse Analytics (paso a paso)
  5. 30 Consejos y Buenas Prácticas para hacer un proyecto de Power BI con éxito
  6. Cómo crear diseños de Dashboards espectaculares con PowerBI
  7. Videotutorial: Trabajando con Python en Power BI
  8. Aplicación PowerBi Turismo
  9. Aplicación PowerBI Financiera I
  10. Aplicación PowerBI Financiera II
  11. Aplicación PowerBI eCommerce
  12. Aplicación PowerBI Salud
  13. Aplicación PowerBi Smart City
  14. Aplicación PowerBI Energía
  15. Aplicación PowerBI Sports Analytcis
  16. Power BI Premium Utilization and Metrics
  17. PowerBI Embedded: Funcionamiento y costes
  18. Bravo para PowerBI
  19. Como integrar Power BI con Microsoft Dynamicssalesfo
  20. SQL Server Profiler para Power BI
  21. Como usar Report Analyzer en PowerBI, para mejorar el rendimiento
  22. Power BI embebido en Jupyter Notebook
  23. Tabular Editor para Power BI: Videotutorial y manual en español
  24. Personaliza tus gráficas en Power BI con Charticulator y Deneb
  25. Comparativa PowerBI vs Amazon QuickSight
  26. Como usar emoticonos en PowerBI
  27. Buenas prácticas con Dataflows en Power BI
  28. Power Automate para Power BI: Cómo funciona
  29. ALM Toolkit para Power BI
  30. Os presentamos Goals in Power BI para hacer Scorecards
  31. Tutorial gratuito en español sobre Power BI Report Builder
  32. Conoce PowerBI Diagram View (Visual Data Prep). Paso a paso
  33. Futbol Analytics, lo que hay que saber
  34. Dashboard de medicion de la calidad del aire en Madrid
  35. Como funciona Microsoft Power BI? Videoturial de Introducción
  36. Big Data para PowerBI
  37. Quieres crear aplicaciones empresariales usando PowerBI, PowerApps y Power Automate de forma conjunta?
  38. Power BI tip: Uso de parámetros what-if
  39. Como integrar Salesforce y PowerBI
  40. Videotutorial: Usando R para Machine Learning con PowerBI
  41. Las 50 claves para aprender y conocer PowerBI
  42. PowerBI: Arquitectura End to End
  43. Usando Python con PowerBI
  44. PowerBI + Open Source = Sports Analytics
  45. Comparativa de herramientas Business Intelligence
  46. Use Case Big Data “Dashboards with Hadoop and Power BI”
  47. Todas las presentaciones del Workshop ‘El Business Intelligence del Futuro’
  48. Descarga Paper gratuito: Zero to beautiful (Data visualization)
  49. SAP connection tools for process automation: Microsoft, Pentaho, Talend (User Guide)
  50. PowerBI Trucos (Vol. III)