Period filter — definition of per what period to build report: per day, week, month, year. Required.

Date Range filter (date) — date limitations of report. Required. Entered and stored as date in the timezone of admin. If admin changes timezone, the lifetime report should be re-aggregated.

Order Status filter — order status limitations of report. Optional. By default report is not filtered by status.

Sales reports should not match orders that have no items processed or all items canceled, unless there is different logic defined.

Empty rows for selected date period may be omitted (by default). If not omitted, each period of the specified date range should appear in the report grid.

Sales reports may have “projected” and “actual” values. Projected is the value of the estimated amounts to be paid. If the report supports it, it should show filter option Show Actual Values: yes, no (no)

Totals row — row of sums per each aggregated column of current displayed report

Subtotal rows — rows of sums per each aggregated column, when there are 2 or more grouping columns

All monetary amounts in the sales report are displayed in the base currency specified in the global configuration scope. The reason for it is that the amounts are aggregated, and they can be aggregated from different websites, while a website may have its own base currency. In order to make the aggregated values comparable, they are casted to the “global base currency” by the “base to global rate”, defined in the each order separately.

In example, the global base currency is USD and the website base currency is EUR:

The “Lifetime Sales” should utilize the same collection that “Sales/Orders” (order creation date) report and render the following lifetime aggregated information (numbers and currency are provided as examples):

Sales

Actual

Total

$1000

$500

Tax

$10

$5

Shipping

$50

$25

Items

$150

$75

Orders

10

Where values are sales (projected) and actual values — same as the columns in sales order report, but without grouping by period (where “Actual Total” is the Revenue from the sales order report).

“Average Orders” — same as “Lifetime Sales”, but instead of SUM() the AVG() aggregation function should be used

Sales graph — graphical representation of the “Sales/Orders” report. Total number should be displayed as X (Y) where X — projected and Y — actual values respectively. The following totals should be displayed (currency is in USD for example):