Views SQL e Materialized Views no Odoo: Potencie o Seu BI com Desempenho e Eficiência
No universo dos sistemas de gestão, a velocidade e a fiabilidade dos relatórios são cruciais para tomar decisões informadas. O Odoo, apesar de ser uma plataforma robusta, pode enfrentar desafios de performance quando lidamos com grandes volumes de dados ou consultas analíticas complexas. Uma solução elegante e poderosa passa pela criação de Views SQL e Materialized Views em Postgres, integradas ao seu módulo Odoo.
Visite www.opencloud.pro para soluções de infraestrutura cloud escalável e descubra como a OpenCloud – Parceiro Certificado Odoo pode optimizar o seu ambiente.
1. Porquê usar Views SQL no Odoo?
- Performance: Pré-compilam consultas complexas, acelerando a geração de relatórios.
- Manutenção: Separação clara entre lógica de negócio (Python) e lógica de apresentação/análise (SQL).
- Flexibilidade: Permite agregar dados de várias tabelas sem sobrecarregar o ORM em tempo real.
2. Entendendo Materialized Views
Enquanto as Views SQL normais executam a consulta sempre que são invocadas, as Materialized Views armazenam o resultado num ficheiro físico:
- Reduzem o tempo de resposta em relatórios analíticos pesados.
- Podem ser atualizadas de forma programada ou manual.
- Ideal para dashboards com indicadores-chave (KPI) que não requerem dados em tempo real.
3. Criando uma View SQL Personalizada no Odoo
3.1. Definição do Modelo
```python
caminho: addons/my_bi_module/models/sale_report_view.py
from odoo import models, tools, fields
class SaleOrderReport(models.Model): _name = 'sale.order.report' _auto = False _description = 'Relatório de Vendas (SQL View)'
date = fields.Datetime(string='Data')
partner_id = fields.Many2one('res.partner', string='Cliente')
total_amount = fields.Float(string='Valor Total')
def init(self):
tools.drop_view_if_exists(self.env.cr, 'sale_order_report')
self.env.cr.execute("""
CREATE VIEW sale_order_report AS (
SELECT
so.id AS id,
so.date_order AS date,
so.partner_id AS partner_id,
SUM(sol.price_total) AS total_amount
FROM sale_order so
JOIN sale_order_line sol ON sol.order_id = so.id
WHERE so.state IN ('sale', 'done')
GROUP BY so.id, so.date_order, so.partner_id
)
""")
```
3.2. Carregar e Atualizar
Após instalar o módulo, a view vai existir no Postgres. Para materialized view, substitua CREATE VIEW
por CREATE MATERIALIZED VIEW
e acrescente um índice:
```sql CREATE MATERIALIZED VIEW sale_order_report_mat AS ...;
CREATE INDEX idx_sale_order_report_date ON sale_order_report_mat(date); ```
4. Automatizando a Atualização de Materialized Views
Para garantir dados frescos, crie um cron job no Odoo:
```xml
5. Boas Práticas para Maximizar a Performance
- Índices: Crie índices nas colunas mais filtradas ou agrupadas.
- Vacuum e Analyze: Agende manutenção no Postgres para manter estatísticas atualizadas.
- Monitorização: Utilize ferramentas como
pg_stat_statements
para identificarQueries lentas. - Cache de Aplicação: Combine com Redis para resultados frequentes de APIs internas.
6. Conclusão e Próximos Passos
Ao incorporar Views SQL e Materialized Views no seu projecto Odoo, obtém relatórios mais rápidos, reduz carga no ORM e oferece experiência de utilizador superior. Se procura uma solução de BI ainda mais poderosa, considere integrar o Odoo com ferramentas dedicadas de visualização (Power BI, Tableau) através destas views como fonte de dados.
Precisamos de discutir a arquitetura ideal para o seu negócio? A equipa da OpenCloud está pronta para ajudar.
👉 Contacte-nos em www.opencloud.pro ou descubra os nossos serviços de parceiro certificado Odoo em https://www.odoo.com/partners/opencloud-unipessoal-lda-12774.