Librería de Python para Power Bi Rest API

Hace unos días me embarque en un proyecto que vi que muchos en distintas comunidades dejaron a la mitad. Se trata de construir una librería en lenguaje Python para usar comodamente la Power Bi Rest API.

Dicha librería sería de suma utilidad para administradores de Power Bi como así tambien para Data Engineers, desarrolladores e incluso para cuestiones de gobernanza o automatización.

Si queres conocer más de la librería, seguí leyendo.

En este artículo vamos a ver el simple uso de la librería para poder nutrirnos de ella. Para aquellos que ya estén familiarizados con Python podría resultar más sencillo.

Primero que nada necesitamos instalar el paquete. El mismo está publicado en pypi para su sencilla instalación: https://pypi.org/project/SimplePBI/ 
Recordemos que las librerías en este sitio pueden ser instaladas con el comando:

> pip install simplepbi 

La librería esta compuesta en varias clases. La idea es que cada clase corresponda a una categoría de API de Power Bi. 

image

Poco a poco el desarrollo irá incluyendo más y más hasta incluir a todas. Podremos ver en el sitio que pase antes, o en el source dentro de ese sitio, aquellas categorías que ya fueron desarrolladas para estar al tanto de lo que la librería puede hacer estos días.

Junto con ellas existen una clase más llamada Token que nos ayudará con la autenticación de la API. También hay un set de métodos bajo Utils para transformaciones comunes para moldear respuestas de la API, como llevar el dict a otro formato.

A pesar de estar utilizando una librería, esto no nos quita ciertas configuraciones y toma de datos para poder utilizarla. Con esto me refiero a que para usar la API de Power Bi necesitamos registrar una app en el portal de azure con los permisos deseados. Dependerá de los permisos asignados el funcionamiento de los métodos en la librería.

El artículo no esta enfocado en mostrar la configuración del registro de la app, lo podemos encontrar en google, pero si dejaremos este enlace a la documentación y comunidad:

Ya teniendo todo creado podremos usar la API. Veamos que valores necesitamos para conectarnos y pedir un token. Lo primero importar la clase de la librería para crear un objeto token.

from simplepbi import token

Para construirlo necesitamos los clásicos valores de la autenticación de Azure

  • tenant_id (lo puede pedir al administrador de IT o tomarlo del recurso Subscripción en el portal de azure)
  • app_client_id (app_id o client_id se obtiene de la aplicación registrada. Si vamos a utilizar Service Principal sería buena idea agregarla a las areas de trabajo en las cuales queremos interactuar)
  • username (cuenta de correo profesional de Azure AD)
  • password (password)
  • app_secret_key (secret key generado para el client id)
  • use_service_principal (True para utilizar la autentiación de Service Principal permitiendo no completar usuario y contraseña. False para seguir con la credenciales)

tok = token.Token(tenant_id, app_client_id, username, password, None, use_service_principal=False)

La clase token cuenta con un atributo Token que nos ayudará a obtener una gigantezca cadena de texto que sería quien ayude a crear los objetos de categoría de API para colocarlo al crearlos y luego solamente usarlos.

from simplepbi import admin
ad = admin.Admin(tok.token)

De este modo creamos un objeto de una categoría, en este caso admin, para poder utilizar todos los requests de admin con el objeto "ad" sin necesidad de ninguna otra configuración posterior.

Cabe destacar que para utilizar la categoría admin necesitamos usar una cuenta administradora de Power Bi o nuestro tenant en Service debe tener permitido el uso de Service Principal para API en la configuración de inquilinos del portal de administración. Más información: https://docs.microsoft.com/en-us/power-bi/admin/read-only-apis-service-principal-authentication

El resto es muy sencillo simplemente usar el objeto y llamar los requests como:

All_Datasets = ad.get_datasets()

Así creariamos una variable con un diccionario de python que contiene todos los datasets.

La librería cuenta con una sección de documentación en github que nos ayudaría a realizar requests complejos como la toma de actividades o la scanner api. Además de las pequeñas incorporaciones de Utils como el caso de to_pandas() que nos ayudaría a transformar ese resultado de datasets en un DataFrame de la siguiente manera:

from simplepbi import utils
utils.to_pandas(All_Datasets, "value")

Así llegamos a presentar este pequeño proyecto sin fines de lucro de parte de unos pocos con ganas de contribuir a la comunidad. Seguramente irá mejorando en el tiempo los errores a medida que sean informados o encontrados. Recuerden chequear el github para conocer que categorías fueron agregadas a la librería para su posterior uso. 

Ojalé que les sea útil para lo que necesiten.