Reporting For Business Operations 8 min read Updated May 6, 2026

Odoo Reporting and Analytics: Pivots, Dashboards, KPIs, and BI Tools

Build dashboards, pivot tables, and KPI tracking that actually get used — not just configured.

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.

Tip. Spend 30 minutes building three or four well-tuned pivot views per business unit. Make them defaults. The team will use them as a starting point for any analysis question.

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.
Note. The most common dashboard mistake: too many tiles. A dashboard with 20 KPIs is no better than a dashboard with 5 — if everything is important, nothing is. Limit to the metrics that drive Monday morning decisions.

KPI tracking: from definition to discipline

A KPI is only useful when:

  1. The definition is fixed — everyone agrees what it means.
  2. The data source is consistent — the calculation runs the same way each time.
  3. The threshold is meaningful — there's a number above or below which action is taken.
  4. 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

KPIDefinitionWhere in Odoo
Revenue per visitTotal POS revenue ÷ count of POS transactionsPOS reports, with custom calculation
Inventory turnoverCOGS ÷ average inventory value (annualized)Accounting + inventory valuation reports
Stockout rateSKU-days out of stock ÷ total SKU-daysInventory report with custom calculation
Gross margin(Revenue − COGS) ÷ RevenueSales analysis with margin column enabled
Conversion rate (e-commerce)Orders ÷ unique sessionsExternal analytics + Odoo orders
Customer LTVAverage customer revenue × average tenureCustom 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

  1. Navigate to Settings ‣ Studio (Odoo Studio is part of Enterprise).
  2. Open the report builder. Choose a base report or start blank.
  3. Drag fields from the model into the report layout.
  4. Configure styling: company logo, colors, fonts.
  5. 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.

Important. Studio reports run live every time they're rendered. For reports that aggregate large data sets (e.g., "all sales for the year"), this can be slow. Either pre-compute the aggregates via scheduled actions and store them, or offload heavy reporting to an external BI tool with a read replica.

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

ToolCostBest forTrade-offs
Native Odoo (pivot, dashboards, Studio)IncludedOperational reporting on Odoo data; teams that live inside Odoo dailyLimited cross-system analytics; no scheduled email reports for non-Odoo users
MetabaseFree (self-host) or paid cloudMid-size teams wanting easy dashboards on a Postgres replica; some NL queries via MetabotSetup requires a read replica; visuals less rich than enterprise BI
Looker Studio (Google)FreeCross-system reporting (Odoo + GA4 + Sheets) for small teamsPerformance scales with the data; Postgres connector requires setup
Power BIPer-user licenseMicrosoft-centric organizations; existing Power BI infrastructureSteeper learning curve; better for analyst workflows than ad-hoc
Looker / Tableau / SigmaEnterprise pricingLarge organizations needing semantic-layer governanceCost 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:

  1. Create a read-only PostgreSQL replica of your Odoo database. Production load is unaffected.
  2. Connect the BI tool to the replica.
  3. Build a semantic layer in the BI tool — define metrics, dimensions, and joins centrally.
  4. 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.

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.

Florinel Chis — commerce engineer leading Odoo and Magento implementations for retail and e-commerce. About Magendoo. Verified against Odoo 19.0
22+ Years in Commerce Engineering
50+ Enterprise Magento Projects
EU Based in Europe, Serving Europe
OSS Open Source Contributor
Get a Proposal • 24h response Call