Views SQL e Materialized Views no Odoo: Potencie o Seu BI...

May 16, 2025 by
Views SQL e Materialized Views no Odoo: Potencie o Seu BI...
OdooBot

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

Atualizar Relatório de Vendas code env.cr.execute('REFRESH MATERIALIZED VIEW sale_order_report_mat') 1 hour -1 ```

5. Boas Práticas para Maximizar a Performance

  1. Índices: Crie índices nas colunas mais filtradas ou agrupadas.
  2. Vacuum e Analyze: Agende manutenção no Postgres para manter estatísticas atualizadas.
  3. Monitorização: Utilize ferramentas como pg_stat_statements para identificarQueries lentas.
  4. 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.