Report Types in Odoo
| Type | Output | Best For | Edition |
|---|
| QWeb PDF | PDF document | Invoices, delivery slips, labels | CE + EE |
| Pivot Table | Interactive grid | Multi-dimensional analysis | CE + EE |
| Graph View | Charts | Visual trends | CE + EE |
| Dashboard | KPI overview | Executive summary | EE |
| Spreadsheet | Spreadsheet | Custom analysis, formulas | EE |
| List Export | Excel/CSV | Raw data export | CE + EE |
| Custom SQL | Custom | Complex aggregation | Custom dev |
QWeb PDF Reports
# Standard printed documents:
# - Invoices, Credit Notes
# - Quotations, Sale Orders
# - Delivery Slips, Packing Lists
# - Purchase Orders
# - Manufacturing Orders
# - Barcodes, Labels
# - Custom reports
# Generated by: QWeb template → HTML → wkhtmltopdf → PDF
# Customize: inherit report template via XPath
# Create new: ir.actions.report + QWeb template
Pivot Tables
# Interactive multi-dimensional analysis:
# Rows: Product Category
# Columns: Month
# Values: Revenue (sum), Quantity (sum), Margin (%)
# How to use:
# Any list view → switch to Pivot view
# Drag fields to rows/columns
# Click cells to drill down
# Export to Excel for further analysis
# Example: Sales by region by quarter
# Rows: Country → State
# Columns: Quarter
# Measure: Total Amount
Graph Views
# Chart types:
# - Bar chart (comparison)
# - Line chart (trends over time)
# - Pie chart (proportions)
# Any list view → switch to Graph view
# Configure: measure, group by, chart type
# Stacked or grouped bars
# Multiple measures on same chart
# Example: Revenue trend by month
# Type: Line
# Measure: Amount Total
# Group By: Order Date (Month)
Spreadsheet (Enterprise)
# Odoo Spreadsheet = Google Sheets inside Odoo:
# - Pull live data from Odoo with formulas
# - ODOO.PIVOT() — insert pivot table data
# - ODOO.LIST() — insert list view data
# - Regular formulas: SUM, VLOOKUP, IF
# - Charts from Odoo data
# - Share with team members
# - Auto-refresh with live data
# Example formula:
# =ODOO.PIVOT(1, "amount_total", "product_id", 42)
# Returns: total amount for product ID 42 from pivot #1
Dashboard (Enterprise)
# Executive KPI overview:
# - Revenue this month vs target
# - Orders today
# - Open support tickets
# - Inventory value
# - Cash position
# Create: Dashboards → Add Block
# Block types: graph, pivot, KPI, cohort
# Real-time data from Odoo
# Role-based: different dashboards per user/team
Custom SQL Reports
# For complex aggregation beyond standard views:
# Method 1: Database view (read-only model)
class SaleReport(models.Model):
_name = 'sale.report'
_auto = False # No table created
def init(self):
self.env.cr.execute("""
CREATE OR REPLACE VIEW sale_report AS (
SELECT
so.id,
so.date_order,
so.partner_id,
SUM(sol.price_subtotal) as total,
COUNT(sol.id) as line_count
FROM sale_order so
JOIN sale_order_line sol ON sol.order_id = so.id
GROUP BY so.id, so.date_order, so.partner_id
)
""")
# Then create standard views (list, pivot, graph) on this model
# Users interact normally — it's just a SQL view underneath
Which Report to Use
| Need | Use |
|---|
| Print document for customer | QWeb PDF Report |
| Analyze data by multiple dimensions | Pivot Table |
| Visualize trends | Graph View |
| Executive overview | Dashboard |
| Custom analysis with formulas | Spreadsheet |
| Export raw data | List → Export |
| Complex aggregation | Custom SQL view |
| External BI tool | Connect Power BI / Grafana |
DeployMonkey
DeployMonkey's AI agent helps create reports: QWeb templates for documents, pivot configurations for analysis, and SQL views for complex metrics. Or just ask the AI — it queries your data and returns answers in plain language.