WooCommerce reports sit under Analytics, and they answer questions the WordPress dashboard cannot. They are also easy to misread, because two of the numbers people quote most are measuring something narrower than they think.
Analytics is not the old Reports
Older WooCommerce had a Reports screen that queried orders directly. Analytics replaced it with dedicated tables built for reporting, which is why it is fast on a shop with tens of thousands of orders.
Those tables are populated by a background process. On a shop with a lot of history, the first import takes time and the numbers are incomplete until it finishes, which looks like data loss and is not.
If figures look wrong after a migration or an update, check whether that import has completed before investigating anything else.
Which order statuses count
The setting that changes every number on the screen, and the one people never look at.
Under Analytics settings you choose which statuses count as revenue. By default that is usually processing and completed, so an order sitting at on hold, awaiting a bank transfer, is not in your revenue.
That is correct: it is not revenue until it is paid. It also means a shop taking many bank transfers sees a figure lower than its order list suggests, and the explanation is here rather than in a bug.
Decide deliberately and write down what you chose, because comparing this year to last year only works if the setting did not change in between. Understanding order statuses walks through what each one means.
Net or gross
Reports distinguish gross sales from net. Net excludes refunds, and depending on your settings it may exclude tax and shipping too.
A gross figure and a net figure for the same period will differ, and quoting one while thinking of the other is the most common reporting mistake in a shop.
Pick which one you report on, use it consistently, and make sure anyone else reading the numbers knows which it is.
The reports worth using
Orders for volume and average order value. Average order value moving is usually more interesting than revenue moving, because it tells you whether you sold more or sold bigger.
Products for what actually sells. Sort by revenue rather than by quantity. The product with the most units is often not the one paying the bills.
Coupons for what your discounts cost. This is the report most likely to change a decision, because a coupon's cost is visible and its incremental sales are not.
Stock for what is running out, which is a working list instead of an analysis.
Customers for repeat purchase behaviour, which is where most shops have more room than they think.
Comparing periods properly
Every report offers a comparison, and the choice of comparison decides what you conclude.
Compare like with like: this month against the same month last year, not against last month. Retail is seasonal, and December against November tells you about the calendar rather than about your shop.
Watch the day count too. A 31-day month against a 28-day month is an 11% difference before anything else happens.
What Analytics cannot tell you
Worth being clear about, because people look here for answers that are not in the data.
It knows about orders. It does not know about visitors, so it cannot tell you a conversion rate, where customers came from, or which page they abandoned.
For that you need analytics on the site itself, and the two answer different questions: WooCommerce tells you what was bought, web analytics tells you what happened before that. There is more on finding where customers actually leave in checkout optimization.
Exporting
Every report exports to CSV, which is the route to anything the interface will not show. A specific date range, a custom grouping, or reconciliation against your accounts.
The export honours your current filters and the status setting above, so an export that does not match a figure elsewhere is usually a different filter instead of a different truth.
When the numbers look wrong
Four causes cover nearly all of it.
The import has not finished after a migration or a large change.
The status setting excludes orders you were counting.
The timezone is not what you assumed, so orders near midnight land on the neighbouring day. Check the site's timezone rather than your own.
Test orders from your own checkout testing, still in the data. Delete them instead of leaving them to distort a small shop's figures permanently.
If figures are still inconsistent, WooCommerce has a tool to regenerate the analytics tables from the orders. That is the repair for tables that fell out of step, and it is not something to run routinely. For the wider set of faults, see the troubleshooting guide.
The habit that makes them useful
Look at the same three numbers on the same day each week: orders, average order value, and revenue against the same week last year.
A report read occasionally is a curiosity. The same three numbers read weekly is how you notice a change while it is still small enough to act on, which is the only reason to have the reports at all.
If these reports have become slow to load, the cause is usually the shape of the data instead of the server. See WooCommerce Database Growth: What Fills It.
If these figures disagree with your accounting system, the integration between them is the usual reason. For checking it, see WooCommerce Webhooks and Third-Party Integrations.