Como Integrar o ERP SAP Business One com Power BI usando AWS Aurora
Introdução
O SAP Business One (S1B) é um ERP extremamente popular para PMEs de crescimento acelerado. Contudo, gerar relatórios de Business Intelligence diretamente em sua base de produção (seja ela SQL Server ou SAP HANA) pode degradar a performance e travar o faturamento.
Neste artigo, veremos como arquitetar uma solução moderna e segura que sincroniza dados do SAP B1 local para uma réplica de leitura no AWS Aurora (PostgreSQL), servindo de fonte otimizada para dashboards dinâmicos no Power BI.
O Desafio Tecnológico
Normalmente, o Power BI faz consultas complexas e pesadas. Se o banco de dados principal do ERP for acessado diretamente para cada refresh de dashboard, a performance de transações diárias (emissão de notas, baixas de estoque) cai drasticamente.
A solução arquitetural proposta baseia-se em:
1. Origem (Local/On-Premise): Servidor SAP Business One.
2. Camada de Sincronização (CDC/Processo Batch): Script de integração que extrai apenas tabelas financeiras e de faturamento chaves (OINV, INV1, OOCR, OCR1).
3. Destino (AWS Cloud): Banco de dados relacional Aurora Serverless.
4. Visualização: Gateway do Power BI conectando na AWS para relatórios agregados sem sobrecarga no ERP.
+------------+ +---------------+ +---------------+ +------------+
| SAP B1 | ---> | Integration | ---> | AWS Aurora | ---> | Power BI |
| (On-Prem) | | Script (TS) | | (PostgreSQL) | | Dashboard |
+------------+ +---------------+ +---------------+ +------------+
Passos para Implementação
1. Modelagem das Tabelas Chave do SAP B1
Para dashboards financeiros, focamos nas tabelas de notas fiscais de saída:OINV: Cabeçalho dos Documentos de Saída (Contém Data de Lançamento, Total da Nota, Código do Cliente).
INV1: Linhas dos Documentos de Saída (Contém Código do Item, Quantidade, Preço Unitário, CFOP).
2. O Script de Sincronização (Node.js & TypeScript)
Abaixo, um exemplo de rotina em Node.js rodando em uma tarefa agendada (Cron ou AWS ECS Task) que consulta os dados alterados no último dia e insere no PostgreSQL na AWS.import { Client } from 'pg';
import sql from 'mssql';
// Configurações de Conexão
const sqlConfig = {
user: process.env.SAP_DB_USER,
password: process.env.SAP_DB_PASSWORD,
server: process.env.SAP_DB_SERVER,
database: 'SBO_PROD',
options: { encrypt: true, trustServerCertificate: true }
};
const pgConfig = {
connectionString: process.env.AWS_AURORA_URL,
};
async function syncSAPToAWS() {
const mssqlPool = await sql.connect(sqlConfig);
const pgClient = new Client(pgConfig);
await pgClient.connect();
console.log("Iniciando sincronização SAP -> AWS Aurora...");
// 1. Extração incremental (últimas 24 horas)
const query =
SELECT DocEntry, DocNum, DocDate, DocTotal, CardCode
FROM OINV
WHERE UpdateDate >= DATEADD(day, -1, GETDATE())
;
const result = await mssqlPool.request().query(query);
// 2. Carga (Upsert) no Postgres AWS Aurora
for (const row of result.recordset) {
const upsertQuery =
INSERT INTO aws_sales_stage (doc_entry, doc_num, doc_date, doc_total, card_code)
VALUES ($1, $2, $3, $4, $5)
ON CONFLICT (doc_entry) DO UPDATE
SET doc_total = EXCLUDED.doc_total, doc_date = EXCLUDED.doc_date;
;
await pgClient.query(upsertQuery, [
row.DocEntry,
row.DocNum,
row.DocDate,
row.DocTotal,
row.CardCode
]);
}
console.log(Sucesso: ${result.recordset.length} registros sincronizados.);
await mssqlPool.close();
await pgClient.end();
}
syncSAPToAWS().catch(console.error);
Otimizações de FinOps e Performance
Particionamento de Tabelas: Na AWS, particione a tabelaaws_sales_stage por ano ou mês para acelerar filtros de data no Power BI.
Tamanhos e Custos: Use o Aurora Serverless v2 para dimensionar a capacidade sob demanda, reduzindo a zero nos fins de semana e madrugadas quando ninguém lê os relatórios.
Conclusão
Ao desacoplar a base de relatórios da base transacional utilizando a AWS, garantimos segurança, escalabilidade para o Power BI e alta disponibilidade para o faturamento físico da empresa. Essa arquitetura robusta resolve o gargalo de performance de forma limpa.Quer saber mais sobre integração de ERPs e Cloud Architecture? Deixe seu comentário no meu LinkedIn!