What you’ll build
A one-page report with a summary block (revenue, orders and average order value against last month), a breakdown by region and product, a trend chart, and a short commentary. Once it’s set up, next month’s report is a paste, a refresh and a few sentences.
Step 1: Start with clean, flat data
You need one row per order (or order line) with at least a date, an amount and the categories you want to break down by, such as product, region or channel.
| Row | A | B | C | D | E |
|---|---|---|---|---|---|
| 1 | Order ID | Order Date | Region | Product | Revenue |
| 2 | SO-10001 | 2026-09-01 | West | Ergo Office Chair | 698.00 |
| 3 | SO-10002 | 2026-09-01 | South | Headset | 119.00 |
| 4 | SO-10003 | 2026-09-02 | East | Label Printer | 636.00 |
Before reporting, fix the things that silently distort totals: duplicate orders, amounts stored as text, dates in mixed formats and region names spelled several ways. The data cleaning checklist covers each one. Then click inside the data, press Ctrl+T and name the table Sales (Table Design → Table Name).
Step 2: Add a month column
Grouping by month is easiest with a column that holds the first day of each order’s month. Add a column called Month to the table:
=EOMONTH([@[Order Date]], -1) + 1EOMONTH returns the last day of the previous month; adding 1 gives the first day of the order’s month. Format the column as mmm yyyy. Because it’s a real date, it sorts correctly, unlike text such as “September”.
Step 3: Build the summary block
On a new sheet called Report, type the first day of the reporting month in B1, for example 2026-09-01. Then build the headline numbers with SUMIFS and COUNTIFS:
| Cell | Measure | Formula |
|---|---|---|
| B3 | Revenue this month | =SUMIFS(Sales[Revenue], Sales[Order Date], ">="&B1, Sales[Order Date], "<"&EDATE(B1, 1)) |
| C3 | Revenue last month | =SUMIFS(Sales[Revenue], Sales[Order Date], ">="&EDATE(B1, -1), Sales[Order Date], "<"&B1) |
| D3 | Change | =IF(C3=0, "", B3/C3 - 1) |
| B4 | Orders this month | =COUNTIFS(Sales[Order Date], ">="&B1, Sales[Order Date], "<"&EDATE(B1, 1)) |
| B5 | Average order value | =IF(B4=0, "", B3/B4) |
Format D3 as a percentage. Change B1 next month and the whole block updates. For a year-on-year comparison, use EDATE(B1, -12) and EDATE(B1, -11) as the date bounds.
Step 4: Break it down with a PivotTable
- Click inside the
Salestable and choose Insert → PivotTable → New Worksheet. - Drag Region to Rows, Month to Columns and Revenue to Values.
- Right-click a revenue value and choose Show Values As → % of Row Total if you want each region’s mix, or keep the sums.
- Add a Slicer for Product or Channel (PivotTable Analyze → Insert Slicer) so readers can filter.
For a fixed “top five products this month” list in Excel 365, a single formula does it:
=TAKE(SORTBY(UNIQUE(Sales[Product]), SUMIFS(Sales[Revenue], Sales[Product], UNIQUE(Sales[Product]), Sales[Month], B1), -1), 5)Step 5: Chart the trend
Select the PivotTable with months as columns, or a small table of month and revenue, and choose Insert → Line Chart (or a column chart for fewer than 12 months). Keep it readable:
- One measure per chart. Don’t put revenue and order count on two axes.
- Label the latest value and remove the legend if there’s only one series.
- Use a bar chart for comparing regions or products, sorted largest first.
Step 6: Write the commentary
Numbers without explanation leave readers guessing. Two or three sentences is enough:
- What happened: “Revenue was $107,848 in September, up 2% on August, from 234 orders.”
- Why: “Growth came from the East (up 33%) and South (up 18%), which more than offset a 23% drop in the West.”
- What next: “Find out what changed in the West and contact customers there who haven’t reordered.”
Check every figure you quote against the summary block. If something looks odd — a huge jump, a month with no orders — look at the underlying rows before publishing; it’s often a duplicate or a typo.
Step 7: Make next month a five-minute job
- Paste next month’s rows at the bottom of the
Salestable; it expands automatically. - Change the month in B1.
- Choose Data → Refresh All to update the PivotTables.
- If the data arrives as a file, import it with Power Query (Data → Get Data → From File) so the refresh brings it in too.
The fast way
In MindySheets, open the export and choose Report → Monthly trends or Executive summary. Mindy runs the same calculations — totals, month-on-month change, breakdowns, top products — over every row, adds charts, writes the commentary and lets you save it as PDF or Word. Every number links back to the calculation that produced it, so you can check it before it goes to your manager.
Frequently asked questions
What should a monthly sales report include?
Total revenue, number of orders and average order value; a comparison with last month and the same month last year; a breakdown by product, region or channel; the top customers or products; a trend chart; and two or three sentences explaining what changed and what to do next.
Should I use formulas or a PivotTable?
Both. A PivotTable is fastest for exploring breakdowns. SUMIFS formulas are better for a fixed summary block that always shows this month against last month, because the layout doesn't change when the data does.
How do I compare this month with last month in Excel?
Put the first day of the month in a cell, total it with SUMIFS between that date and EDATE(date, 1), do the same for EDATE(date, -1), and divide the difference by last month's total.
How do I make the report update automatically next month?
Keep the data in an Excel table so it expands when you paste new rows, drive the summary from a single month cell, and refresh PivotTables with Data → Refresh All. Power Query can import the new export for you.