Como Acessar Power BI Rest API Parte 2
Publicado em 1 de agosto de 2025
14 min. de Leitura
No post anterior, fizermos a configuração inicial para que nossa aplicação consiga consumir as rotas do power bi rest API para renderizar os dashboards em nossa própria aplicação.
Nesse artigo iremos programar o mínimo necessário para que a aplicação funcione.
IMPORTANTE: Configuração dos Workspace
Uma licença PRO tem 400 requisições de token permitidas que não são renovadas, que deverá ser usadas apenas para teste. Para usar em produção é necessário que os workspace seja incorporado em alguma licença do power bi (A para embedded ou F para Fabric).
Para efetuar a incorporação acesse as configurações do workspace, em seguida acesse informações da licença e altere de Pró para Inserido e escolha no campo Capacidade de licença, a sua licença adquirida.
O passo seguinte é ir em usuários permitidos do workspace e adicionar nossa aplicação criada como administrador do workspace, dando acesso a ele ler as informações no workspace.
Com isso podemos obter o acesso token e começar a programar nosso backend.
Obtendo Access Token e IDs necessário
Em nosso aplicativo (no post parte 1 mostro como criar e acessar o aplicativo) iremos gerar nossa secret que usaremos para acessar programaticamente o power bi. No menu administração (Manage) clique na aba client secrets e depois New client secret, de uma descrição e a validade do token. Lembrando que não é possível gerar um token sem validade, sendo necessário estar renovando periodicamente.
Fonte Imagem: Própria.
Quando salva o token será mostrado apenas uma vez, salve em um lugar seguro, caso esqueça será necessário gerar outro.
Fonte Imagem: Própria.
Na aba Overview obtemos o ID do tenant e o ID do aplicativo que usaremos para programar nossa aplicação.
Fonte Imagem: Própria.
Programando o Backend
Para nosso exemplo irei utilizar Python, mas qualquer outra linguagem de sua preferência pode ser usada para criar o backend, a lógica de autenticação e obteção do embedded token é a mesma.
Primeiramente devemos configurar nosso projeto, criamos um ambiente virtual com o comando abaixo e ativamos o ambiente.
# Criar o ambiente virtual python -m venv meu_venv # Ativar no Windows .\meu_venv\Scripts\activate # Ativar no macOS/Linux source meu_venv/bin/activate # Se desejar Desativar o ambiente deactivate
Criamos logo em seguida nosso arquivo .env e main.py.
Em nosso arquivo .env criaremos as seguintes variáveis e vamos atribuir os IDs e o Secret que obtemos do aplicativo nele. No CLIENT_ID informe o ID do aplicativo, CLIENT_SECRET a chave gerada e onde estar seu-tenant-id-aqui em AUTHORITY_URL o valor do tenant id.
CLIENT_ID=seu-client-id-aqui CLIENT_SECRET=seu-client-secret-aqui RESOURCE_URL=https://analysis.windows.net/powerbi/api AUTHORITY_URL=https://login.microsoftonline.com/seu-tenant-id-aqui/oauth2/token GRANT_TYPE="client_credentials"
Fazermos a instalação dos pacotes necessário que iremos utilizar, com o comando abaixo e com ambiente virtual ativo.
pip install requests fastapi[standard] python-dotenv uvicorn
Nosso código no arquivo main.py ficará assim:
# Imports dotenv para carregar as variáveis de ambiente # fastapi para disponibilizar nosso servidor e também configurar o CORS para liberar acesso from dotenv import load_dotenv from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware # Requests para fazer nossa requisição à API do Power BI. import requests # Json para podermos acessar as chaves retornadas na requisição REST. import json # A lib os para acessar variáveis de ambiente e configurações do sistema import os # Instancia o aplicativo FastAPI app = FastAPI() # Middleware para permitir CORS (Cross-Origin Resource Sharing) # Isso libera o acesso da aplicação React (localhost:3000) à API FastAPI app.add_middleware( CORSMiddleware, allow_origins=["http://localhost:3000"], # URL do frontend que pode consumir essa API allow_credentials=True, allow_methods=["*"], # Permite todos os métodos (GET, POST, etc.) allow_headers=["*"], # Permite todos os headers ) # Carrega as variáveis do arquivo .env para o ambiente load_dotenv() # Endpoint para gerar e retornar o token de incorporação do Power BI # Recebemos na URL qual workspace ID e qual o Report ID (relatório) que queremos visualizar @app.get("/api/powerbi/embedded-token/{workspace_id}/{report_id}") def get_embedded(workspace_id: str, report_id: str): # Cabeçalhos da requisição para obter token de acesso da API do Azure headers = { 'Content-Type': 'application/x-www-form-urlencoded' } # Corpo da requisição com dados sensíveis (segredo, client_id, etc.) body = { 'grant_type': os.getenv('GRANT_TYPE'), # Geralmente "client_credentials" 'client_id': os.getenv('CLIENT_ID'), # ID do aplicativo registrado no Azure 'client_secret': os.getenv('CLIENT_SECRET'), # Segredo do aplicativo 'resource': os.getenv('RESOURCE_URL') # Recurso alvo (Power BI) } # Faz a requisição para obter o token de acesso (OAuth2) response = requests.post(os.getenv('AUTHORITY_URL'), headers=headers, data=body) # Monta o token de autenticação com o prefixo "Bearer" token_api = 'Bearer ' + response.json().get('access_token', '') # Cabeçalhos para solicitar o token de incorporação ao Power BI headers = { "Authorization": token_api, "Content-Type": "application/json" } # URL para gerar o token de incorporação para o relatório específico embed_url = f"https://api.powerbi.com/v1.0/myorg/groups/{workspace_id}/reports/{report_id}/GenerateToken" # Corpo da requisição: nível de acesso que será concedido (View) body = { "accessLevel": "View" } # Requisição para gerar o embedded token do relatório token_response = requests.post(embed_url, headers=headers, json=body) # Extrai o token gerado da resposta embed_token = token_response.json().get("token") # Retorna os dados para o frontend React: # - accessToken: token de incorporação # - embedUrl: URL para embutir o relatório # - reportId: ID do relatório return { "accessToken": embed_token, "embedUrl": f"https://app.powerbi.com/reportEmbed?reportId={report_id}&groupId={workspace_id}", "reportId": report_id }
Com isso temos nossa aplicação backend e podemos colocar para rodar através do comando:
uvicorn main:app --reload
Fonte Imagem: Própria.
Com nosso backend rodando podemos criar nosso frontend. Na parte 3 desenvolveremos nosso front end.
Referência:
https://www.sqlshack.com/how-to-access-power-bi-rest-apis-programmatically/