User guide
How to use Advanced Report Builder, screen by screen.
Running a report
Reports > Reports, then Run on any row.
The result opens with the row count, whose rights it was read with, and the table. Two buttons download it as a spreadsheet or a CSV; Refresh runs it again against current data.
Two people, two answers
A saved report is a saved question, not a saved answer. Running one reads through your own access rights, so you and a colleague can legitimately get different numbers of rows from the same definition. That is correct, and it is why a shared report is never a way round an access rule.
Truncation
If the row limit was reached, the result says so. A reader shown twelve rows will otherwise state twelve as a fact.
Spreadsheets
- Numbers are written as numbers, so you can add them up.
- The header row is frozen and columns are sized.
- Totals appear under the columns that asked for one.
- Text cells beginning =, +, - or @ are prefixed with an apostrophe. Excel executes those, and a customer named =cmd|... is a real attack.
The on-screen and emailed table formats numbers for reading - 41,750.00 - while the file gets the raw number. A spreadsheet handed formatted text cannot add it up.
Scheduled reports
If a report is scheduled, it arrives by email at the chosen time as a spreadsheet, a CSV, or an inline table. The email body always names the person whose rights it was read with.
Long reports show the first 25 rows inline and say so; the attachment has all of them.
Writing a good report
- Name it for the question, not the model. "Overdue invoices by customer" beats "account.move report".
- Use labels. Amount due reads better than amount_residual, and it is what appears in the spreadsheet and in Power BI if you publish it.
- One hop for names. partner_id.country_id gives "France" instead of an id.
- Set the row limit to what a person will read. It is a cost control as much as a safety one.
What it cannot do
- No charts. Odoo's graph and pivot views already do that well; this is for the tabular report you need to send somebody.
- No expressions or computed columns. A column names a field.
- No writing. It reads.