ntegrar o Sankhya ao Power BI vai muito além de consumir dados diretamente do ERP.
Em ambientes corporativos, a arquitetura correta precisa considerar:
performance
estabilidade
paginação
autenticação
escalabilidade
atualização automática
proteção do ERP
O erro mais comum é:
❌ conectar o Power BI diretamente na API do Sankhya.
Embora funcione inicialmente, isso rapidamente gera:
lentidão
timeouts
excesso de chamadas
sobrecarga no ERP
falhas de autenticação
problemas com paginação
A arquitetura moderna separa:
👉 camada operacional (ERP/API)
👉 camada analítica (Power BI)
Arquitetura recomendada
Sankhya API
↓
Serviço de sincronização
↓
Banco MySQL intermediário
↓
Power BI + Gateway
↓
Atualização automáticaNesse modelo:
o Sankhya fornece os dados
o backend sincroniza
o MySQL armazena
o Power BI consome localmente
Resultado:
✅ dashboards rápidos
✅ ERP protegido
✅ integração escalável
Consumindo a API do Sankhya
O sincronizador pode trabalhar tanto com:
APIs legadas (
service.sbr)API V1 REST paginada
O importante é:
👉 controlar paginação e sincronização no backend.
Exemplo de autenticação OAuth 2.0
const response = await fetch(
"https://empresa.sankhya.com.br/gateway/v1/oauth/token",
{
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
grant_type: "password",
client_id: "client_id",
client_secret: "client_secret",
username: "usuario",
password: "senha"
})
}
);
const data = await response.json();
const token = data.access_token;Exemplo de consulta paginada na API V1
Exemplo consumindo produtos:
async function buscarProdutos(page = 0) {
const response = await fetch(
`https://empresa.sankhya.com.br/gateway/v1/mge/produto?page=${page}&size=500`,
{
headers: {
Authorization: `Bearer ${token}`
}
}
);
return await response.json();
}Percorrendo todas as páginas
Aqui está o ponto mais importante.
A sincronização precisa percorrer todas as páginas automaticamente.
async function sincronizarProdutos() {
let page = 0;
let possuiDados = true;
while (possuiDados) {
const result = await buscarProdutos(page);
const registros = result.data;
if (!registros || registros.length === 0) {
possuiDados = false;
break;
}
console.log(`Página ${page} carregada`);
await salvarNoBanco(registros);
page++;
}
}Criando o banco MySQL
O ideal é utilizar um banco intermediário analítico.
Exemplo:
CREATE DATABASE sankhya_bi;Tabela de produtos:
CREATE TABLE produtos (
id BIGINT PRIMARY KEY,
codigo VARCHAR(50),
descricao VARCHAR(255),
marca VARCHAR(100),
ativo CHAR(1),
data_atualizacao DATETIME
);Alimentando o banco
Agora o sincronizador grava os dados recebidos.
Exemplo usando Node.js + MySQL:
const mysql = require("mysql2/promise");
const connection = await mysql.createConnection({
host: "localhost",
user: "root",
password: "senha",
database: "sankhya_bi"
});Inserindo registros:
async function salvarNoBanco(registros) {
for (const item of registros) {
await connection.execute(`
INSERT INTO produtos
(id, codigo, descricao, marca, ativo, data_atualizacao)
VALUES (?, ?, ?, ?, ?, NOW())
ON DUPLICATE KEY UPDATE
descricao = VALUES(descricao),
marca = VALUES(marca),
ativo = VALUES(ativo),
data_atualizacao = NOW()
`,
[
item.id,
item.codigo,
item.descricao,
item.marca,
item.ativo
]);
}
}Sincronização por reconciliação
Aqui está a diferença entre um projeto simples e um projeto corporativo.
O sincronizador não deve:
DELETE + INSERT completoO correto é:
sincronização por reconciliação de estado
Ou seja:
✅ cria novos registros
✅ atualiza alterados
✅ evita duplicidade
✅ mantém histórico
✅ reduz processamento
Estratégia incremental
O ideal é sincronizar apenas alterações recentes.
Exemplo:
?modifiedSince=2026-05-01T00:00:00Isso reduz drasticamente:
payload
consumo da API
tempo de sincronização
Conectando o Power BI no MySQL
Depois do banco pronto:
o Power BI passa a consumir apenas o MySQL.
Instalar conector MySQL
No Power BI Desktop:
Obter Dados
→ MySQL DatabaseInforme:
host
banco
usuário
senha
Configurando o Gateway
Em ambiente corporativo normalmente o MySQL fica:
localmente
em VPN
em cloud privada
Por isso é necessário instalar:
On-Premises Data Gateway
Download:
https://powerbi.microsoft.com/gateway/Configuração do Gateway
Após instalar:
Power BI Service
→ Configurações
→ Gateway
→ Adicionar Fonte de DadosConfigure:
servidor MySQL
usuário
senha
Atualização automática
Depois de publicar o relatório:
Dataset
→ Agendamento de AtualizaçãoConfigure:
Atualizar a cada 30 minutosFluxo completo:
Sankhya API
↓
Sincronizador Node.js
↓
MySQL
↓
Gateway
↓
Power BIFrequência recomendada
Estoque
5 minutosPedidos
10 minutosProdutos e clientes
30 minutosHistórico financeiro
Carga noturnaBenefícios da arquitetura
Performance
O Power BI consulta localmente.
Sem depender do ERP.
Segurança
O Power BI não acessa:
token
OAuth
credenciais Sankhya
Escalabilidade
O ERP deixa de receber consultas analíticas massivas.
Estabilidade
A sincronização fica controlada pelo backend.
Conclusão
Integrar Sankhya ao Power BI da forma correta não significa apenas consumir APIs.
A arquitetura moderna exige:
sincronização controlada
paginação
backend intermediário
reconciliação de estado
banco analítico
gateway corporativo
atualização automática
A API do Sankhya deve funcionar como camada operacional de extração.
Já o Power BI deve trabalhar sobre um banco preparado para leitura analítica massiva.
Essa separação é o que transforma uma integração simples em uma solução realmente escalável e pronta para produção.