Parte da nossa série Data Analytics & BI
Leia o guia completoOdoo + Power BI: Guia completo de integração analítica
O Odoo 19 Enterprise inclui relatórios integrados sólidos, mas para organizações que precisam de análise de autoatendimento, modelagem de dados entre sistemas e visualização de nível empresarial, o Power BI é o complemento natural. Conectar os dados operacionais do Odoo ao mecanismo analítico do Power BI desbloqueia insights que os relatórios nativos do Odoo não podem fornecer.
Este guia cobre todos os aspectos da integração Odoo-Power BI: arquitetura de conexão, práticas recomendadas de modelagem de dados, construção de painéis de negócios importantes, criação de medidas DAX, configuração de atualização incremental e implantação no Microsoft Fabric para escala empresarial.
Principais conclusões
- Três métodos de conexão: PostgreSQL direto, API REST Odoo e ODBC via exportação do Odoo
- O modo DirectQuery fornece dados em tempo real; O modo de importação oferece melhor desempenho para grandes conjuntos de dados
- O esquema PostgreSQL do Odoo requer desnormalização para modelos de dados eficientes do Power BI
- A atualização incremental reduz o tempo de carregamento para tabelas grandes (account.move, stock.move)
- A segurança em nível de linha no Power BI reflete o controle de acesso em nível de empresa do Odoo
- Implantação de gateway necessária para Odoo local; nuvem Odoo se conecta diretamente
- Microsoft Fabric (Power BI Premium) permite dados Odoo em empresas lakehouse
- Principais medidas: receita, margem bruta, giro de estoque, vencimento de contas a receber, OEE
Opções de arquitetura de integração
Escolha a arquitetura de conexão correta com base nas necessidades de implantação e geração de relatórios do Odoo.
Opção 1: conexão direta com PostgreSQL (recomendado)
Conecte o Power BI diretamente ao banco de dados PostgreSQL do Odoo usando o conector PostgreSQL:
Prós:
- Acesso total a todas as tabelas Odoo e dados brutos
- Melhor desempenho para junções complexas
- Suporta os modos Importação e DirectQuery
Contras:
- Requer acesso de rede do Power BI Gateway ao PostgreSQL
- Mudanças no modelo de dados do Odoo exigem atualização de consultas do Power BI
- O acesso direto ao banco de dados ignora o controle de acesso do Odoo
Opção 2: API REST Odoo
Conecte-se por meio do conector Web do Power BI usando a API REST do Odoo:
Prós:
- Funciona sem acesso de rede ao PostgreSQL
- Respeita os direitos de acesso do Odoo por usuário
- Não são necessárias credenciais de banco de dados
Contras:
- Mais lento que o PostgreSQL direto (uma chamada de API por tabela)
- A limitação de taxa afeta grandes extrações de dados
- Difícil paginar com eficiência para grandes conjuntos de dados
Opção 3: Exportar para Data Warehouse
Dados ETL Odoo em um data warehouse dedicado (Azure Synapse, Snowflake, BigQuery):
Prós:
- Desempenho máximo em escala
- Desacopla BI do ERP
- Pode integrar vários sistemas de origem
Contras:
- Maior custo e complexidade de infraestrutura
- A latência dos dados depende da programação ETL (normalmente de 1 hora a 24 horas)
- Requer manutenção de pipeline ETL
Arquitetura recomendada para a maioria das organizações: PostgreSQL direto com Power BI Gateway (local) ou conexão direta (nuvem Odoo), modo de importação com atualização incremental, atualização agendada a cada 1-4 horas.
Configurando a conexão PostgreSQL
Etapa 1: acesso à rede
Para Odoo local:
- Instale o On-Premises Data Gateway em um servidor com acesso de rede ao PostgreSQL
- Configure o gateway com suas credenciais do Microsoft 365
- Abra a porta PostgreSQL (5432 ou 5433) do servidor gateway para o servidor Odoo DB
Para nuvem Odoo (AWS, Azure, GCP):
- Configurar grupo de segurança/firewall para permitir entrada de intervalos de IP do Power BI
- Ou: use o gateway local em uma VM na nuvem na mesma VPC
Etapa 2: Crie um usuário de banco de dados somente leitura
Nunca conecte o Power BI ao seu usuário principal do banco de dados Odoo. Crie um usuário somente leitura dedicado:
-- Create read-only user for Power BI
CREATE USER powerbi_reader WITH PASSWORD 'strong_password_here';
-- Grant connection to database
GRANT CONNECT ON DATABASE your_odoo_db TO powerbi_reader;
-- Grant schema usage
GRANT USAGE ON SCHEMA public TO powerbi_reader;
-- Grant SELECT on all current and future tables
GRANT SELECT ON ALL TABLES IN SCHEMA public TO powerbi_reader;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO powerbi_reader;
Etapa 3: Configurar no Power BI Desktop
- Abra Power BI Desktop → Obter dados → Banco de dados PostgreSQL
- Digite:
- Servidor: seu host PostgreSQL (e porta, se não for 5432)
- Banco de dados: o nome do seu banco de dados Odoo
- Nome de usuário: powerbi_reader
- Senha: a senha do usuário somente leitura
- Selecione o modo de conexão: Importar (recomendado) ou DirectQuery
Principais tabelas Odoo para Power BI
Compreender o esquema PostgreSQL do Odoo é essencial para construir modelos de dados precisos.
Tabelas financeiras:
| Tabela | Descrição | Campos-chave |
|---|---|---|
| CÓDIGO0 | Faturas, contas, lançamentos contábeis manuais | tipo_movimento, estado, data_da fatura, valor_total, id_moeda |
| CÓDIGO0 | Itens de linha em lançamentos contábeis manuais | move_id, account_id, débito, crédito, quantidade, price_subtotal |
| CÓDIGO0 | Plano de contas | código, nome, tipo_de_conta |
| CÓDIGO0 | Pagamentos de clientes/fornecedores | valor, data_de_pagamento, estado, id_do_parceiro |
Tabelas de vendas:
| Tabela | Descrição | Campos-chave |
|---|---|---|
| CÓDIGO0 | Pedidos de vendas | nome, estado, pedido_data, valor_total, id_parceiro, id_usuário |
| CÓDIGO0 | Linhas de ordem de venda | id_pedido, id_produto, quantidade_uom_produto, preço_subtotal |
| CÓDIGO0 | Oportunidades de CRM | nome, stage_id, receita_esperada, probabilidade, user_id |
Tabelas de inventário:
| Tabela | Descrição | Campos-chave |
|---|---|---|
| CÓDIGO0 | Níveis atuais de estoque | id_do_produto, id_do_local, quantidade |
| CÓDIGO0 | Todos os movimentos de inventário | product_id, estado, data, quantidade_concluído |
| CÓDIGO0 | Documentos de entrega/recebimento | picking_type_id, estado, data_programada |
| CÓDIGO0 | Dados mestre do produto | nome, preço_lista, id_categ, tipo |
RH e folha de pagamento:
| Tabela | Descrição | Campos-chave |
|---|---|---|
| CÓDIGO0 | Funcionários | nome, ID_do_departamento, ID_do_trabalho, ID_da_empresa |
| CÓDIGO0 | Horário e presença | ID_do_funcionário, check_in, check_out |
| CÓDIGO0 | Recibos de vencimento | ID_do_funcionário, data_de, data_até, estado |
Design do modelo de dados do Power BI
Design de esquema em estrela para dados Odoo:
Converta o esquema normalizado do Odoo em um esquema em estrela para obter desempenho ideal do Power BI:
[Date Table] (dimension)
↓
[Sales Fact Table]
↓
[Product Dimension] ← [Product Category Dimension]
↓
[Customer Dimension] ← [Country Dimension]
↓
[Salesperson Dimension]
↓
[Company Dimension]
Código M do Power Query – Tabela de fatos de vendas:
let
Source = PostgreSQL.Database("your-odoo-server:5433", "your_db"),
SaleOrderLine = Source{[Schema="public", Item="sale_order_line"]}[Data],
SaleOrder = Source{[Schema="public", Item="sale_order"]}[Data],
ProductTemplate = Source{[Schema="public", Item="product_template"]}[Data],
ProductProduct = Source{[Schema="public", Item="product_product"]}[Data],
// Join order lines with orders
JoinWithOrder = Table.NestedJoin(
SaleOrderLine, {"order_id"},
SaleOrder, {"id"},
"Order", JoinKind.Inner
),
// Expand order columns needed
ExpandOrder = Table.ExpandTableColumn(
JoinWithOrder, "Order",
{"name", "state", "date_order", "partner_id", "user_id", "company_id"},
{"order_name", "order_state", "date_order", "partner_id", "user_id", "company_id"}
),
// Filter: confirmed and done orders only
FilterState = Table.SelectRows(
ExpandOrder,
each [order_state] = "sale" or [order_state] = "done"
),
// Select and rename final columns
SelectColumns = Table.SelectColumns(FilterState, {
"id", "order_id", "product_id", "date_order", "partner_id",
"user_id", "company_id", "product_uom_qty", "price_unit",
"price_subtotal", "price_tax", "price_total"
}),
// Change types
ChangedTypes = Table.TransformColumnTypes(SelectColumns, {
{"date_order", type datetime},
{"price_subtotal", type number},
{"product_uom_qty", type number}
})
in
ChangedTypes
Medidas essenciais do DAX
Receita e margem:
// Total Revenue (Net)
Revenue = SUMX(SalesFact, SalesFact[price_subtotal])
// Revenue MTD
Revenue MTD =
CALCULATE([Revenue], DATESMTD(DateTable[Date]))
// Revenue YTD
Revenue YTD =
CALCULATE([Revenue], DATESYTD(DateTable[Date]))
// Revenue vs Prior Period
Revenue vs PY =
VAR CurrentRevenue = [Revenue]
VAR PriorYearRevenue =
CALCULATE([Revenue], SAMEPERIODLASTYEAR(DateTable[Date]))
RETURN
DIVIDE(CurrentRevenue - PriorYearRevenue, PriorYearRevenue, 0)
// Gross Margin
Gross Margin =
SUMX(SalesFact,
SalesFact[price_subtotal] -
(RELATED(ProductDim[standard_price]) * SalesFact[product_uom_qty])
)
// Gross Margin %
Gross Margin % =
DIVIDE([Gross Margin], [Revenue], 0)
Medidas de estoque:
// Current Stock Value
Stock Value =
SUMX(
StockQuant,
StockQuant[quantity] * RELATED(ProductDim[standard_price])
)
// Inventory Turnover (annualized)
Inventory Turnover =
DIVIDE(
[COGS Annualized],
[Average Inventory Value],
0
)
// Days of Inventory Outstanding
DIO =
DIVIDE(365, [Inventory Turnover], 0)
// Stockout % (products with zero stock)
Stockout Rate =
DIVIDE(
COUNTROWS(FILTER(StockQuant, StockQuant[quantity] <= 0)),
COUNTROWS(StockQuant),
0
)
Vencimento de contas a receber:
// Current (0-30 days)
AR Current =
CALCULATE(
SUM(ARFact[amount_residual]),
ARFact[days_overdue] <= 0
)
// 1-30 days overdue
AR 1-30 Days =
CALCULATE(
SUM(ARFact[amount_residual]),
ARFact[days_overdue] >= 1 && ARFact[days_overdue] <= 30
)
// Days Sales Outstanding
DSO =
DIVIDE(
SUM(ARFact[amount_residual]),
[Revenue] / 365,
0
)
Principais páginas do painel
1. Painel Executivo
- Receita vs orçamento (gráfico de medidor)
- Tendência da receita (gráfico de linhas, 13 meses consecutivos)
- % de margem bruta (cartão KPI com tendência)
- 10 principais clientes por receita (gráfico de barras)
- Os 10 principais produtos por receita (barra horizontal)
- Receita por região (mapa preenchido)
2. Pipeline de vendas (CRM)
- Pipeline por estágio (gráfico de funil)
- Valor ponderado do pipeline (KPI)
- Taxa de vitórias/perdas (gráfico de rosca)
- Tendência do tamanho médio do negócio
- Desempenho do representante de vendas (tabela matriz)
- Previsão vs real (combinação linha + barra)
3. Visão Geral Financeira
- Resumo de P&L (tabela com YTD, YoY)
- Posição de caixa (KPI)
- Vencimento de recebíveis (barra empilhada)
- Vencimento de contas a pagar (barra empilhada)
- Tendência DSO (gráfico de linhas)
4. Painel de inventário
- Valor do estoque por categoria (treemap)
- Giro de estoque por armazém (bar)
- Estoque lento (tabela: estoque > 90 dias)
- Itens de risco de ruptura de estoque (tabela: dias de cobertura < 7)
- Alertas de ponto de reordenamento (cartões)
**5. Painel de RH **
- Headcount por departamento (bar)
- Presença vs. horas agendadas (medidor)
- Deixar utilização do saldo (matriz)
- Tendência da taxa de rotatividade (linha)
Atualização incremental para tabelas grandes
As tabelas account_move_line, stock_move e mail_message do Odoo crescem para milhões de linhas. A atualização incremental evita recarregamentos de tabela completa em cada atualização.
Configurar atualização incremental:
- No Power Query, adicione os parâmetros
RangeStarteRangeEnd(tipo DateTime) - Filtre sua coluna de data:
Table.SelectRows(Source, each [write_date] >= RangeStart and [write_date] < RangeEnd) - Clique com o botão direito na tabela no painel Campos → Atualização Incremental
- Definir: armazenar nos últimos 12 meses, atualizar nos últimos 3 dias
Tabelas Odoo que mais se beneficiam da atualização incremental:
account_move_line: filtrar pordatestock_move: filtrar pordatesale_order: filtrar pordate_ordermail_message: filtrar pordate
Segurança em nível de linha
Implemente a segurança em nível de linha (RLS) no Power BI para espelhar o controle de acesso em nível de empresa do Odoo.
// RLS filter: user sees only their assigned companies
[company_id] IN
CALCULATETABLE(
VALUES(UserCompanyMapping[company_id]),
UserCompanyMapping[user_email] = USERPRINCIPALNAME()
)
Crie uma tabela UserCompanyMapping (mantida no Power BI ou sincronizada no Odoo) mapeando endereços de e-mail para IDs de empresas autorizadas.
Perguntas frequentes
Posso usar o DirectQuery com o banco de dados PostgreSQL do Odoo para dados em tempo real?
Sim, mas com ressalvas. DirectQuery no PostgreSQL do Odoo é viável para painéis com consultas simples. Painéis complexos com muitas medidas serão lentos porque cada visual aciona novas consultas SQL no seu banco de dados de produção. Para a maioria dos casos de uso, o modo Importação com atualização de 1 hora é a melhor relação entre atualização e desempenho.
Como posso lidar com dados multimoedas do Odoo no Power BI?
Odoo armazena valores na moeda da transação e na moeda da empresa. Use o campo amount_currency para a moeda original e debit/credit (ou price_subtotal) para o equivalente na moeda da empresa. Para consolidação em nível de grupo no Power BI, use os valores monetários da empresa Odoo e aplique uma tabela de dimensão de conversão de moeda separada para relatórios consistentes.
Qual é o impacto no desempenho do banco de dados PostgreSQL do Odoo quando o Power BI é atualizado?
Uma atualização completa do conjunto de dados do Power BI executa várias consultas analíticas simultaneamente no PostgreSQL. Para bancos de dados Odoo grandes (>50 GB), isso pode consumir E/S e CPU significativos durante a janela de atualização. Práticas recomendadas: agende atualizações fora dos horários de pico (por exemplo, das 2h às 4h), use uma réplica de leitura do PostgreSQL para consultas do Power BI e implemente a atualização incremental para minimizar o escopo da consulta.
Posso conectar o Power BI à comunidade Odoo (versão gratuita) via PostgreSQL?
Sim. O Power BI se conecta a qualquer banco de dados PostgreSQL, independentemente de qual aplicativo o gerencia. O esquema PostgreSQL da Comunidade Odoo é quase idêntico ao Enterprise (menos algumas tabelas somente Enterprise). O método de conexão é o mesmo; apenas garanta que o usuário do banco de dados somente leitura tenha acesso ao banco de dados comunitário.
Como mantenho meu modelo de dados do Power BI sincronizado quando o Odoo é atualizado para uma nova versão?
As atualizações de versão do Odoo podem renomear ou reestruturar tabelas de banco de dados, especialmente para módulos que passaram por refatoração significativa. Após qualquer atualização do Odoo: execute uma comparação de esquemas de tabela entre versões antigas e novas, atualize as consultas do Power Query para fazer referência a colunas renomeadas e valide todas as medidas DAX em relação ao novo esquema. Crie uma verificação de alteração de esquema no seu runbook de migração.
Próximas etapas
Construir uma integração Odoo + Power BI de nível de produção requer experiência em modelagem de dados, conhecimento de PostgreSQL e compreensão profunda do esquema do Odoo. Feito corretamente, ele oferece uma plataforma analítica unificada que transforma a forma como sua equipe de liderança toma decisões.
ECOSIRE oferece soluções analíticas Odoo + Power BI de ponta a ponta - desde arquitetura de banco de dados e modelagem de dados até design de painel, desenvolvimento e implantação de DAX. Nossa equipe une a experiência em Odoo e a especialização em Power BI.
Fale com ECOSIRE sobre sua integração Odoo Analytics →
Explore os serviços Power BI da ECOSIRE →
Compartilhe seus requisitos de relatórios e projetaremos uma arquitetura do Power BI que dê à sua equipe de liderança visibilidade em tempo real de todas as dimensões de suas operações Odoo.
Escrito por
ECOSIRE TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
ECOSIRE
Transforme seu negócio com o Odoo ERP
Implementação, personalização e suporte especializado do Odoo para agilizar suas operações.
Artigos Relacionados
KPIs contábeis: 30 métricas financeiras que toda empresa deve monitorar
Acompanhe 30 KPIs contábeis essenciais, incluindo lucratividade, liquidez, eficiência e métricas de crescimento, como margem bruta, EBITDA, DSO, DPO e giro de estoque.
Segmentação de clientes baseada em IA: do RFM ao clustering preditivo
Saiba como a IA transforma a segmentação de clientes, desde a análise estática de RFM até o clustering preditivo dinâmico. Guia de implementação com dados Python, Odoo e ROI real.
IA para otimização da cadeia de suprimentos: visibilidade, previsão e automação
Transforme as operações da cadeia de suprimentos com IA: detecção de demanda, pontuação de risco de fornecedores, otimização de rotas, automação de armazéns e previsão de interrupções. Guia 2026.
Mais de Data Analytics & BI
KPIs contábeis: 30 métricas financeiras que toda empresa deve monitorar
Acompanhe 30 KPIs contábeis essenciais, incluindo lucratividade, liquidez, eficiência e métricas de crescimento, como margem bruta, EBITDA, DSO, DPO e giro de estoque.
Data Warehouse para Business Intelligence: Arquitetura e Implementação
Crie um data warehouse moderno para business intelligence. Compare Snowflake, BigQuery, Redshift, aprenda ETL/ELT, modelagem dimensional e integração com Power BI.
Análise de clientes do Power BI: segmentação RFM e valor vitalício
Implemente segmentação RFM, análise de coorte, visualização de previsão de rotatividade, cálculo de CLV e mapeamento da jornada do cliente no Power BI com fórmulas DAX.
Power BI vs Excel: quando atualizar sua análise de negócios
Comparação entre Power BI e Excel para análise de negócios, abrangendo limites de dados, visualização, atualização em tempo real, colaboração, governança, custo e migração.
Análise Preditiva para Negócios: Um Guia Prático de Implementação
Implemente análises preditivas em vendas, marketing, operações e finanças. Seleção de modelo, requisitos de dados, integração do Power BI e guia de cultura de dados.
Construindo Painéis Financeiros com Power BI
Guia passo a passo para criar painéis financeiros no Power BI, abrangendo conexões de dados com sistemas contábeis, medidas DAX para KPIs, visualizações de lucros e perdas e práticas recomendadas.