Abordagem de conexão com o Power BI (com exemplos de código)
Explore métodos eficazes de conexão com o Power BI com exemplos de código práticos para aprimorar suas habilidades de visualização de dados.
Table of Contents
Conector web
A maneira mais rápida de integrar o Power BI com a API Fastmarkets é usando o conector Web . Ele oferece suporte a APIs REST, permite cabeçalhos personalizados e funciona com o Power Query (linguagem M).
Padrão típico:

Restrições de execução do Power Query
Ao projetar a autenticação no Power BI, é importante entender como o Power Query é executado.
Principais restrições
- O Power Query pode reavaliar as consultas várias vezes.
- Cada tabela, função ou etapa de atualização pode desencadear a execução.
- A atualização em segundo plano e a atualização da pré-visualização comportam-se de forma diferente.
- As consultas não podem compartilhar estado de forma confiável, a menos que sejam explicitamente estruturadas.
Essas restrições podem afetar a abordagem de autenticação. Se a geração de tokens estiver incorporada diretamente em várias consultas, o Power BI poderá solicitar vários tokens involuntariamente e exceder os limites de autenticação do Fastmarkets . Isso pode causar falhas nas atualizações agendadas.
Melhores práticas para autenticação no Power BI
-
Centralizar a geração de tokens
Crie uma única consulta responsável pela autenticação. Reutilize o token em todas as requisições da API.
Isso garante a reutilização do token e um comportamento de atualização estável. -
Use os parâmetros do Power BI para credenciais.
Armazene serviceName e serviceKey como parâmetros do Power BI. Evite inserir credenciais diretamente no código em vários locais. -
Design para expiração de tokens
Espere falhas na atualização se o token se tornar inválido. Garanta que a lógica de autenticação seja executada pelo menos uma vez por ciclo de atualização.
Considerações de segurança: usando parâmetros do Power Query
Armazenar credenciais de acesso em parâmetros do Power Query não é a abordagem mais segura. Embora funcione, as credenciais ainda ficam armazenadas dentro do modelo do Power BI, o que pode causar problemas de segurança e acesso após a publicação do conjunto de dados no serviço do Power BI.
Para os casos de uso em que o Power BI é utilizado por pequenas equipes de analistas individuais, a abordagem baseada em parâmetros descrita neste artigo geralmente é aceitável, desde que o acesso ao conjunto de dados seja rigorosamente controlado. Certifique-se de que o acesso ao conjunto de dados seja restrito e que as credenciais sejam gerenciadas com cuidado.
Como conectar o Power BI às APIs Fastmarkets
Etapa 0: Abra o Editor do Power Query
Use o Power BI Desktop. Abra Obter Dados → Consulta em Branco.
Etapa 1: Criar parâmetros do Power BI
Crie os seguintes parâmetros do Power BI (Gerenciar Parâmetros → Novo):
| Nome do parâmetro | Tipo | Exemplo |
|---|---|---|
| Nome_do_serviço_FM (FM_ServiceName) | Texto | metais de teste (test-metals) |
| FM_ServiceKey | Texto | K14yr7806AS/uEKO+9XzdsdLxX/5BlbI+aKg== |
| FM_Scope | Texto | fastmarkets.physicalprices.api |
Etapa 2: Criar uma consulta de autenticação
Crie uma nova consulta em branco chamada
Fastmarkets _Authenticate
Power Query (M): Autenticação
let
AuthUrl = "https://auth.fastmarkets.com/connect/token",
Body =
[
grant_type = "servicekey",
client_id = "service_client",
serviceName = FM_ServiceName,
serviceKey = FM_ServiceKey,
scope = FM_Scope
],
Response =
Json.Document(
Web.Contents(
AuthUrl,
[
Content = Text.ToBinary(Uri.BuildQueryString(Body)),
Headers = [#"Content-Type" = "application/x-www-form-urlencoded"]
]
)
),
AccessToken = Response[access_token]
in
AccessTokenEtapa 3: Criar uma função de solicitação de API reutilizável
Crie uma consulta de função chamada:
Fastmarkets _ApiRequest
Power Query (M): função de solicitação de dados
(ApiUrl as text, Token as text, optional QueryParams as nullable record) as any =>
let
Options =
[
Headers =
[
Authorization = "Bearer " & Token,
Accept = "application/json"
],
Query = if QueryParams = null then [] else QueryParams
],
Response =
Json.Document(
Web.Contents(ApiUrl, Options)
)
in
ResponseEtapa 3: Chame a função a partir de uma consulta normal.
Crie uma consulta de função chamada:
Fastmarkets _GetLatestPrice
Note que "None" indica o preço real avaliado, em oposição às médias calculadas. Para mais informações, consulte a documentação da API Physical Prices .
let
Token = Fastmarkets_Authenticate,
ApiUrl =
"https://api.fastmarkets.com/physical/v2/Prices/None",
Response =
Fastmarkets_ApiRequest(
ApiUrl,
Token,
[
symbols = "MB-STE-0009,MB-STE-0014"
]
),
Data = Response[instruments],
Table = Table.FromRecords(Data),
pricesTable = Table.ExpandRecordColumn(
Table.ExpandListColumn(Table, "prices"),
"prices",
{"assessmentDate", "low", "high", "revision"},
{"assessmentDate", "low", "high", "revision"}
)
in
pricesTableImportante
Devido ao Firewall de Fórmulas do Power BI, os tokens de acesso não podem ser compartilhados com segurança entre consultas, mesmo como valores de texto simples. Para evitar erros de firewall, a autenticação e as solicitações de API devem ser executadas na mesma consulta. Essa é uma limitação da plataforma Power BI.
Para corrigir o erro Formula.Firewall , você precisa desativar os Níveis de Privacidade no nível do arquivo, seguindo estes passos: Arquivo → Opções → Privacidade → Ignorar Níveis de Privacidade
Isso NÃO é recomendado para conjuntos de dados publicados.
Se manter a privacidade dos níveis de acesso for crucial para você, chame todas as etapas em uma única solicitação. Tenha cuidado, pois isso duplicará a lógica de autenticação.
Se você precisa de autenticação centralizada e deseja manter as configurações do firewall, considere criar um conector personalizado do Power BI ou um proxy/serviço do lado do servidor que gerencie a autenticação.
Autenticação + Consulta de Dados
let
//authentication
AuthUrl = "https://auth.fastmarkets.com/connect/token",
Body =
[
grant_type = "servicekey",
client_id = "service_client",
serviceName = FM_ServiceName,
serviceKey = FM_ServiceKey,
scope = FM_Scope
],
Response =
Json.Document(
Web.Contents(
AuthUrl,
[
Content = Text.ToBinary(Uri.BuildQueryString(Body)),
Headers = [#"Content-Type" = "application/x-www-form-urlencoded"]
]
)
),
AccessToken = Response[access_token],
//data request
ApiUrl =
"https://api.fastmarkets.com/physical/v2/Prices/None",
Response =
Fastmarkets_ApiRequest(
ApiUrl,
AccessToken,
[
symbols = "MB-STE-0009,MB-STE-0014"
]
),
Data = Response[instruments],
Table = Table.FromRecords(Data),
pricesTable = Table.ExpandRecordColumn(
Table.ExpandListColumn(Table, "prices"),
"prices",
{"assessmentDate", "low", "high", "revision"},
{"assessmentDate", "low", "high", "revision"}
)
in
pricesTable