Hay ciertos procesos que son necesarios de acuerdo con circunstancias varias. Entre ellas suele aparecer una clásica situación en que un informe fue publicado por mucho tiempo en un área de trabajo que nunca debió estar ahí o simplemente cambio la estructura de la organización y ahora no debería estar ahí.
Por estas y muchas razones más, este artículo nos va a mostrar un método interesante de la librería de python para usar la Power Bi Rest API que nos ayudará a mover un .pbix de un área de trabajo a otra.
Para poder realizar esta acción con código nos vamos a nutrir de la Librería SimplePBI que construyó LaDataWeb, pero antes de salir y ver el código vamos a explicar como funciona.
Hoy por hoy el catálogo de consultas de la API no provee un método que nos permita copiar pbix pero si tenemos otros métodos que nos van a ayudar a llegar a este resultado. Para realizarlo serán necesarios los siguientes permisos:
Report.ReadWrite.All and Dataset.ReadWrite.All
Lo primero será determinar el ambiente en el cual escribir nuestro código para copiar los informes. Recomiendo usar un entorno cloud como una AzureVM, Azure Function, Automation Runbook, etc. Veamos porque es necesario y recomendado que sea cloud.

Como podemos apreciar, al no existir un request nativo para esto, la forma de realizarlo será exportando y volviendo a importar el archivo pbix. Si nuestro entorno es local tendremos que descargarlo y subirlo, lo cual puede demorar bastante dependiendo del tamaño del archivo. Si utilizamos un entorno cloud podremos reducir bastante el tiempo que esta ajustado al ancho de banda local.
Nuestra librería contendrá el método que necesitamos bajo la categoría de "Reports". La ejecución es bastante sencilla. Primero importamos los paquetes necesarios.
from simplepbi import token
from simplepbi import reports
Inicializamos objetos por categorías para realizar acciones de forma más cómoda:
t = token.Token(tenant_id, power_bi_client_id, power_bi_username, power_bi_password, None, use_service_principal=False )
r = reports.Reports(t.token)
NOTA: Recordemos que podemos crear nuestro token autenticando con service principal si ubicamos el con secret en donde vemos el None y cambiamos el último argumento use_service_principal=True
Una vez creado todo eso simplemente basta llamar el método con nuestros valores deseados.
r.simple_copy_reports_between_groups(workspace_id_origin, report_id, workspace_id_destination, displayName=None, nameConflict="CreateOrOverwrite")
Los argumentos son:
- workspace_id_origin: área de trabajo de origen
- report_id: id del informe de origen para exportar e importar
- workspace _id_destination: área de trabajo de destino
- displayName: nombre deseado para el destino caso que querramos cambiar el nombre. Por defecto None le colocará el mismo que tenía en el origen.
- nameConflict: acción en caso de encontrar el mismo nombre, por defecto creara o reemplazará
Restricciones: este método solo permite copiado de informes que contengan el conjunto de datos. No funciona con Live Connection.
Con esa sencilla línea habremos conseguido hacer la copia del informe. Esto podría ayudarnos a generar nuestro propio deploy entre distintos entornos de desarrollo de áreas de trabajo. Espero que les sea útil y lo disfruten. Sigan a SimplePBI por más métodos útiles armados con requests de la API. Quien sabe, tal vez un día tengamos uno para copiar entre distintos tenants.