The same retail business can have either useful reports that get read every Monday or sophisticated dashboards that no one opens. The difference is rarely the tool — Odoo's built-in reporting is comparable to most BI products for operational analytics — but the design of the reports and the discipline of using them.
This guide covers how to build effective reporting in Odoo: dashboards, pivot tables, custom reports, and KPI tracking. It's written for the operations lead, store manager, or business owner who needs to know what the business is doing without becoming a full-time analyst.
What Odoo gives you out of the box
Every Odoo app includes reports relevant to its data:
- Sales: Sales analysis, salesperson performance, customer revenue, product performance.
- Inventory: Stock valuation, stock by location, ABC analysis, transfer report.
- Accounting: P&L, balance sheet, cash flow, aged receivables/payables, tax reports.
- Purchase: Purchase analysis, supplier performance, lead time analysis.
- Manufacturing: Production efficiency, work order analysis, BoM cost reporting.
- POS: Sales by session, by cashier, by hour, by category.
Each report opens in one of three views: List (tabular), Pivot (multi-dimensional), or Graph (chart). The same data, three perspectives.
Pivot views: the most underused feature
The pivot view turns any record list into a multi-dimensional analysis. From the sales analysis report, in pivot mode:
- Drag Salesperson to columns and Product Category to rows.
- The grid shows total revenue per salesperson per category.
- Add a filter for date range, customer segment, or warehouse.
- Switch the metric from Untaxed Total to Margin, Quantity, or any numeric field.
The same pivot view can answer questions like:
- Which categories are growing fastest? (Pivot by month, look at growth.)
- Which salespeople are over-indexing on low-margin products? (Pivot by salesperson, secondary by margin.)
- Which customers have stopped buying? (Pivot by customer, filter recent quarters.)
Saving and sharing pivot configurations
Once you have a useful pivot, save it as a Favorite. Favorites can be shared with the team or set as the default view for the report. This is how good views become organizational knowledge instead of one-off explorations.
Dashboards: the morning view
An Odoo dashboard combines multiple visualizations on one page — graphs, KPIs, recent records — for an at-a-glance operational view. Dashboards live at Reporting ‣ Dashboards (in apps that support them) or in custom dashboards via Odoo Studio.
What a useful operations dashboard contains
For a retail operations lead, the morning dashboard typically has:
- KPI tiles: today's revenue, today's transactions, vs same day last year.
- Inventory status: number of SKUs below reorder threshold, number of pending receipts, current open orders.
- Operations health: open POS sessions (should be zero overnight), pending shipments, late suppliers.
- Trend chart: revenue by week for the last 12 weeks, with same period last year overlay.
What a useful executive dashboard contains
For an executive, less detail, more direction:
- Top-level metrics: monthly revenue, gross margin, AR aging, cash position.
- Variance from plan: actuals vs budget for the current period.
- Alerts: anything outside expected range — sudden revenue drop, AR aging spike, inventory turn slowdown.
KPI tracking: from definition to discipline
A KPI is only useful when:
- The definition is fixed — everyone agrees what it means.
- The data source is consistent — the calculation runs the same way each time.
- The threshold is meaningful — there's a number above or below which action is taken.
- The action is clear — when the KPI moves outside threshold, someone does something.
Skipping any of these turns the KPI into a number people look at, talk about, and don't act on.
Common retail KPIs and how to compute them in Odoo
| KPI | Definition | Where in Odoo |
|---|---|---|
| Revenue per visit | Total POS revenue ÷ count of POS transactions | POS reports, with custom calculation |
| Inventory turnover | COGS ÷ average inventory value (annualized) | Accounting + inventory valuation reports |
| Stockout rate | SKU-days out of stock ÷ total SKU-days | Inventory report with custom calculation |
| Gross margin | (Revenue − COGS) ÷ Revenue | Sales analysis with margin column enabled |
| Conversion rate (e-commerce) | Orders ÷ unique sessions | External analytics + Odoo orders |
| Customer LTV | Average customer revenue × average tenure | Custom calculation from res.partner + sales |
Custom reports with the report builder
When the built-in reports don't quite fit, Odoo's Report Builder (in Studio) lets you create new reports — typically PDF documents like custom invoices, packing slips, or operational summaries.
Setup
- Navigate to Settings ‣ Studio (Odoo Studio is part of Enterprise).
- Open the report builder. Choose a base report or start blank.
- Drag fields from the model into the report layout.
- Configure styling: company logo, colors, fonts.
- Add the report to the relevant action menu.
For dashboards combining data from multiple models, custom dashboards in Studio support drag-and-drop placement of metrics and charts.
When to use external BI tools
Odoo's built-in reporting handles 80% of needs. Three reasons to add an external BI tool:
Choosing a BI tool — quick comparison
| Tool | Cost | Best for | Trade-offs |
|---|---|---|---|
| Native Odoo (pivot, dashboards, Studio) | Included | Operational reporting on Odoo data; teams that live inside Odoo daily | Limited cross-system analytics; no scheduled email reports for non-Odoo users |
| Metabase | Free (self-host) or paid cloud | Mid-size teams wanting easy dashboards on a Postgres replica; some NL queries via Metabot | Setup requires a read replica; visuals less rich than enterprise BI |
| Looker Studio (Google) | Free | Cross-system reporting (Odoo + GA4 + Sheets) for small teams | Performance scales with the data; Postgres connector requires setup |
| Power BI | Per-user license | Microsoft-centric organizations; existing Power BI infrastructure | Steeper learning curve; better for analyst workflows than ad-hoc |
| Looker / Tableau / Sigma | Enterprise pricing | Large organizations needing semantic-layer governance | Cost and implementation overhead; usually justified above ~50 BI users |
1. Cross-system data
If you need to combine Odoo data with web analytics (Google Analytics, Plausible), advertising spend (Google Ads, Meta), or external CRM (Salesforce), an external BI tool that connects to multiple sources is the right place. Common picks: Metabase (open source, easy), Looker Studio (free, Google integration), Power BI (Microsoft stack), Looker / Tableau / Sigma (enterprise).
2. Sophisticated visualizations
Odoo's graph view supports bar, line, pie, and stacked variants. For Sankey diagrams, geographic maps, statistical visualizations, or animated transitions, BI tools have richer libraries.
3. Scheduled email reports to non-Odoo users
Stakeholders who don't log into Odoo (board members, suppliers, partners) need reports delivered to their inbox. BI tools handle scheduled email distribution; Odoo can send email reports via automation rules but the formatting options are limited.
The setup pattern
For external BI:
- Create a read-only PostgreSQL replica of your Odoo database. Production load is unaffected.
- Connect the BI tool to the replica.
- Build a semantic layer in the BI tool — define metrics, dimensions, and joins centrally.
- Build dashboards on top of the semantic layer. Re-use definitions across reports.
The reporting cadence that works
Reports without rhythm don't get read. The cadence that works in retail operations:
Daily (5 minutes)
- Yesterday's revenue, transactions, AOV.
- Inventory alerts: out of stock, low stock, expiring.
- Operations alerts: open POS sessions, late shipments, missed picks.
Weekly (15 minutes, Monday morning)
- Last week vs same week last year: revenue, transactions, margin.
- Top 10 selling products, top 10 customers.
- Inventory turnover trend.
- AR aging — invoices over 30 days.
Monthly (1 hour, first business day)
- P&L by category and channel.
- Inventory valuation by category.
- Customer cohort analysis.
- Variance from forecast.
Quarterly (half day, mid-quarter)
- Comprehensive review: full P&L, balance sheet, key KPIs.
- Trend analysis: YoY, QoQ.
- Strategic review: are the metrics moving in the right direction?
Common reporting pitfalls
1. Building reports no one asked for
The team builds an elaborate dashboard that demos beautifully and never gets opened after week 2. Always start with "who needs this report and what action will they take?" If the answer is fuzzy, don't build it.
2. Using sums where averages are needed (and vice versa)
Sum of days_until_payment across invoices makes no sense; average does. Sum of order_amount across orders is correct; average obscures volume. Match aggregation to the question.
3. Ignoring data quality in the source
Reports look authoritative even when the underlying data has problems. Customers without country code, products without category, sales without salesperson — all show as gaps in reports. Reports surface data quality issues; act on them at the source, not in the report.
4. Slow reports that don't get used
A report that takes 30 seconds to load is a report no one runs. Optimize: pre-aggregate, add indexes, move heavy reports to a read replica or BI tool.
5. KPIs without thresholds
"Revenue last month was €234,567." Compared to what? Without a target or last month or last year, the number is meaningless. Every KPI on a dashboard should have a comparison: target, prior period, or both.
Reference notes
Sources verified against Odoo 19.0 documentation and standards bodies. Use these to confirm anything before applying it to your environment.
- Odoo reporting — Odoo 19.0 documentation — pivot, graph, and list views; favorites
- Odoo Studio reports — Odoo 19.0 documentation — custom PDF report design
- Metabase — open-source BI — BI tool well-suited for Odoo PostgreSQL replicas
- Looker Studio (Google) — free BI, integrates Odoo via PostgreSQL connector
- Power BI — enterprise BI for Microsoft stack
Frequently Asked Questions
Can Odoo replace a dedicated BI tool like Tableau or Power BI?
For operational reporting on Odoo data — sales, inventory, accounting, manufacturing — yes. Odoo's pivot views, dashboards, and Studio reports cover most retail needs. For cross-system analytics, sophisticated visualizations, or executive dashboards integrating data from many sources, dedicated BI tools have advantages. The right answer is often "both": Odoo for operational reporting, an external BI tool for executive and cross-system analytics.
How do I build a custom KPI in Odoo?
Three options. Option A: use a pivot view with a custom domain filter and a calculated measure. Sufficient for most KPIs. Option B: create a custom field on the relevant model, computed from existing data, and reference it in dashboards. Option C: for KPIs that aggregate across many records or require historical snapshots, build a dedicated model that stores the KPI value at each measurement interval and report on that model. Option C scales best but requires development work.
Can I export Odoo reports to Excel?
Yes. Every list view has an export option that produces XLSX or CSV. Pivot views export the current pivot configuration. For scheduled exports (e.g., weekly Excel reports emailed to a stakeholder), use automation rules with a Python action that generates the file and attaches to an email.
How do I track KPIs over time, not just current values?
Odoo's standard reports show current state. For historical KPI tracking, three approaches. (1) Time-series in pivot: group by month/week to see KPIs over time. Works for transactional KPIs. (2) Snapshot model: a custom model that captures KPI values at intervals (daily, weekly) and reports trend over time. Best for state-based KPIs (inventory turnover, AR aging). (3) External BI: a BI tool with a read replica preserves history naturally and can compute time-series KPIs without custom Odoo development.
How do I share a report with someone who doesn't have Odoo access?
Three options. (1) Export to PDF/Excel and email manually — fine for one-off shares. (2) Automation rule that generates and emails on a schedule — for regular reports. (3) Public dashboard with token-based access — Odoo Studio can configure public-share dashboards. For board-level reporting, BI tools (Metabase, Looker) often handle external sharing more cleanly.
Can I build a dashboard that mixes data from Odoo and Google Analytics?
Not directly inside Odoo. The cleanest path is an external BI tool that connects to both: PostgreSQL replica of Odoo + GA4 connector. Alternatively, use Odoo's automation rules to pull GA4 data via the API, store in custom Odoo fields, and build the dashboard in Odoo. The external BI route is faster to set up and easier to maintain.