Reading a report
Every report opens the same way: a strip of totals across the top, one row per item, material, work order or period below it, and one toolbar that drives both. Twelve of the fourteen reports work exactly like this; the two summaries are a different shape and are described in Overview.
On this page
Section titled “On this page”- The toolbar
- Filters, search and columns
- The totals strip
- Row breakdowns
- The Estimate badge
- Charts
- Saved views
- Export
The toolbar
Section titled “The toolbar”The toolbar carries, from left to right:
- The view switcher. One tab per view of this report, starting with its built-in view, which every report calls Standard. See Saved views below.
- Search, which matches the names the report carries: an item, a material, a work order, an order. A report with nothing searchable in it draws no search box at all, because a term there would narrow nothing.
- Add filter, which narrows by any field the report carries.
- Display options, which holds the column picker: which columns are shown, in what order, and which stay pinned.
- Table / Chart, a switch beside Display options. Pressing Chart draws the report instead of listing it.
- Reset and Save, once you have changed anything.
Under it sits a row of scope pills, then the filter chips you have added.
The period
Section titled “The period”The period control sets the window every number is calculated over. It offers the last 7, 30, 90 or 365 days, or any custom range you pick on the calendar. Every report opens on the last 30 days.
A period may span at most 366 days. That is a hard limit: reports are aggregated live rather than pre-computed, and a multi-year window would be slow enough to feel broken. To compare years, export two periods and compare the files.
Days are counted in your shop’s time zone, not in your browser’s, and the dates in the table are read the same way.
Under the table, History from names the earliest day this report has any record for. A report cannot show what was never recorded: if you started using work orders three months ago, that is where the data begins, and an empty stretch before it is missing history rather than a quiet month.
Location scope
Section titled “Location scope”The location control limits a report to one or more of your locations.
Five reports are grained by location and show a Location column, so you can compare two sites without switching the scope back and forth: Build output, Manufacturing consumption, Finished goods demand, Sub-assembly demand and Raw material demand.
Reports that are not grained by location still respect the scope. Cost per build and Throughput are filtered by the work order’s production location; Pre-assembled usage counts only the executions the scope allows.
Four reports have no location control at all, because none of their numbers has a location in it:
- Execution health — one execution can touch several locations at once.
- Unmodelled sales — a variant with no bill consumes nothing anywhere.
- Orders without execution — an order spans whatever locations its shipments touched.
- Sales summary — it counts the whole shop.
Three reports can be read on two bases, and only those three draw a Basis pill: Finished goods demand, Sub-assembly demand and Raw material demand.
- Executed demand is the default: what an execution actually asked for, at the moment it ran.
- Sold, current recipe is what your orders sold in the period, run through your recipes as they are today.
The two answer different questions. Executed demand exists only for orders the app executed, from the day it started recording them. The sold basis covers everything the shop sold in the window, including orders placed before you installed the app and orders no bill ever matched. Read Sold to answer “what did we sell”, and Executed to answer “what did we consume”.
Four things change when you switch to Sold:
- A Revenue column appears on Finished goods demand, taken from the order line’s discounted total. It exists only on this basis, because an execution record stores quantities and never a price. Revenue is net of refunds and order edits: a line whose units were partly refunded reports the share of its discounted total that the surviving units represent, so the money follows the units beside it. Where a discount applied to some units and not others, that share is an average and the figure is close rather than exact.
- Units are split by the location that shipped them. Whatever has been sold but not shipped yet is gathered into its own row, labelled Not yet fulfilled. It is not an unknown location: it is the part of the order still waiting to go out. Refunded units are already deducted, and a cancelled order counts as nothing at all rather than as a positive and a negative that happen to cancel.
- Every figure is an estimate, and a caption under the controls says so. The sold basis works out what an order must have demanded by applying your recipes as they are today. If a bill has changed since the order was placed, the figure is close rather than exact. The same caption warns that the order counts on this basis are summed per row, so one order that bought several items is counted several times.
- Row breakdowns are not offered, because the sold basis is replayed for the question you asked rather than read from a record of what happened. There is no arrow to open.
Switching basis takes your filters, sort and search with it, minus anything that belonged only to the basis you left. Whatever was dropped is named in a note above the table rather than disappearing silently.
Group by
Section titled “Group by”By default a report gives you one row per item (or material, or work order) for the whole period. Group by splits those rows by day, week or month instead, which is what you want when the question is “is this getting better or worse” rather than “what is the total”.
Execution health is the one report whose rows are periods to begin with: it is grouped by week by default.
Filters, search and columns
Section titled “Filters, search and columns”- Search matches the names in the report.
- Add filter narrows by any field the report carries — an item type, a minimum quantity, a date, a status. The operators are the same everywhere in the app: is, is not, contains, is at least, is between, is one of, is empty, and so on.
- Display options → Columns chooses which columns are shown, in which order, and which stay pinned as you scroll. Only the columns a report displays are offered; the identifiers behind a link are not.
- Sort by any column, including by selecting a figure in the totals strip.
- Pages hold 25, 50 or 100 rows, 25 by default.
The totals strip
Section titled “The totals strip”The strip above the table holds up to five figures for the whole filtered set, not the page on screen. Selecting one sorts the table by it.
A figure that cannot be computed reads n/a rather than zero. That distinction matters: an on-time rate over a period in which nothing was due is not “0 % on time”, it is a question the data cannot answer. A count or a sum stays 0, because there zero is the measurement.
Which figures a report totals is listed per report in The reports.
Row breakdowns
Section titled “Row breakdowns”Selecting the arrow next to a name opens the breakdown for that row: the build runs behind a quantity, the failure categories behind a scrap figure, the work orders behind a material’s consumption, the parent bills behind a sub-assembly’s demand.
A breakdown answers for the row you opened it on — the period, and where the row is split by day, week, month or location, that bucket and that location alone. A long one is cut at 50 lines and says so, rather than quietly showing part of the list.
Two reports have no breakdown, because their rows have no named parts to open: Execution health (a row is a stretch of time) and Orders without execution (a row is an order).
The Estimate badge
Section titled “The Estimate badge”Some figures are marked Estimate. There are three reasons, and each is worth understanding before you quote a number:
- Rebuilt history badges a row. Order executions have been recorded in this detail only since the reports were added. To give you history before that day, the app walks your older execution logs again and works out what they must have demanded, using your recipes as they are today. If a bill has changed since, the rebuilt figure is close rather than exact. Rows recorded live carry no badge and are exact.
- Value at today’s cost badges a column. In Raw material demand, Demand value is the demanded quantity priced at each material’s current unit cost — the same quantity the Demanded column shows, so the two agree on every row — because the demand record stores quantities and not the price of the day. If you need what a consumption actually cost when it happened, read Manufacturing consumption instead, which stores the cost frozen at the moment of the movement.
- A period-boundary figure badges a column too. On Throughput, In progress at period end counts what was still open when each bucket closed, so exactly where you put the boundary changes the number.
The whole Sold basis is an estimate for the reason given above, and says so in its own caption.
Charts
Section titled “Charts”Any report that is grouped by day, week or month can be drawn as a chart instead of a table. Set Group by, then press Chart in the toolbar. The chart replaces the table inside the same card; the totals strip above it does not change, because it summarises the query and not the shape it is drawn in.
A chart needs a Group by. Without one, a report is one row per item for the whole period and has no time axis to draw on, so the app keeps the table and says “Choose a group-by to chart this report” under the controls. Days and weeks are drawn as lines; months are drawn as bars, because a month is a whole period rather than a point in time.
Three rules govern what a chart draws:
- Which numbers are drawn. The chips above the plot are the columns that can be charted. The chart opens on the two figures the totals strip leads with, and you can show up to four at once. Four is the limit: past it, a legend and its colours stop being readable, so the remaining chips are disabled until you unpick one. Which series you picked is not part of a saved view; whether the report opens as a table or as a chart is.
- Averages are not offered. A column that is itself an average, such as Average per run or Actual cost per unit, is not chartable. Charting it would add up one average per bucket, and a sum of averages is not the average of the period, so the figure is left to the totals strip, which computes it properly over the whole window.
- A long day view is drawn by week. Grouping by day over more than 120 days would put hundreds of points on one card. Past that the chart draws weeks instead and says so beneath it. The table underneath keeps its days.
The chart reads the whole filtered period, not just the page of rows on screen. A very long one is capped, and a caption tells you when that happened so you can narrow the period.
Charts are readable without a mouse. Every point can be reached with the Tab key and announces the same values a hover shows; the last point of each series is labelled directly on the plot, so the headline figures are readable without hovering at all; a legend appears as soon as there are two or more series; and the whole chart is repeated as a table for screen readers, so no value exists only inside the picture.
Saved views
Section titled “Saved views”A view is a report plus everything you set on it: the period, the location scope, the basis, the grouping, the filters, the search, the sort, the columns and whether it opens as a table or a chart. Save one and it appears in this report’s view switcher and in the Reporting catalogue under the Saved category, so a monthly review is one selection rather than six.
Save updates the view you are on; the menu beside it also offers Save as a new view. Reset throws your unsaved changes away. The ⋯ menu on the active tab offers Rename, Set as default (or Remove as default) and Delete view.
Views are per shop, not per user: what you save, your colleagues see. The built-in view of each report cannot be changed, only saved as a new one — so it has no ⋯ menu, and Update this view is unavailable on it.
A saved view stays meaningful over time. “Last 30 days” saved today still means the last 30 days next month, not the days it covered when you saved it.
If a report has changed since you saved a view — a column removed, a filter field gone — the view still loads and a note above the table names what was skipped.
The full model, including how the default view decides what a bare list URL opens on, is in Saved views.
Export
Section titled “Export”Export in the title bar writes the report you are looking at to a file, with the columns you are showing and in the order you sorted them. Two formats are offered:
- CSV for any spreadsheet or import tool.
- Excel (XLSX) for a workbook you can open and format directly.
The export covers every filtered row, not just the page on screen, up to 50,000 rows. A file that was cut short says so in the dialog so you can narrow the period and export again.
The file writes raw numbers so a spreadsheet can pivot them, which drops the on-screen unit. A percentage column is therefore written under a header ending in (%). Money needs no marker — it is in your shop’s one currency — and a duration column names its unit in the header already.
Summaries cannot be exported: they have no rows.
Where to next
Section titled “Where to next”- The reports — every column and every total, report by report.
- Order sync — the copy of your Shopify orders the sales reports read.