Skip to content
Report · Sales

Sales by customer by month

Net sales per top-level customer per month for two years, with each figure linked to the lines behind it.

  • monthly
  • customers
  • drill-through
Sample preview, fictional dataYour own figures appear after import.

01

About this report

Net sales by month and top-level customer for the last 24 months. Net sales are invoices and cash sales less credit memos, before tax, in base currency. Start here when a month looks unusual.

Click a Net sales figure to open Sales transaction lines filtered to that customer and month, where the lines add up to the number clicked. Group by Quarter or Year to compare longer periods, or filter on Customer or Month.

02

Sample preview

Fictional figures in the shape you will see. Yours come from your account.

MonthCustomerTransactionsNet sales
2026-09Harbor & Pine Co.648,200
2026-09Summit Analytics LLC427,150.50
2026-09Brightline Dental Group321,400
2026-08Harbor & Pine Co.755,310
2026-08Maple Ridge Clinics319,875.25
2026-08Northgate Supply214,020

03

The SuiteQL

This is the query each report runs. Read it, copy it, or change it after import.

Sales by customer by month
SELECT TO_CHAR(t.trandate, 'YYYY-MM') AS period,
       e.toplevelparent AS customer__id,
       NVL(c.altname, c.entityid) AS customer,
       COUNT(DISTINCT t.id) AS transactions,
       SUM(-tl.foreignamount * t.exchangerate) AS sales
  FROM transaction t
  JOIN transactionline tl ON tl.transaction = t.id
  JOIN entity e ON e.id = t.entity
  JOIN entity c ON c.id = e.toplevelparent
 WHERE t.type IN ('CustInvc', 'CashSale', 'CustCred')
   AND t.posting = 'T'
   AND tl.mainline = 'F'
   AND tl.taxline = 'F'
   AND NVL(tl.iscogs, 'F') = 'F'
   AND tl.itemtype NOT IN ('TaxGroup', 'TaxItem', 'Subtotal', 'Description', 'EndGroup')
   AND t.trandate >= ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -23)
 GROUP BY TO_CHAR(t.trandate, 'YYYY-MM'), e.toplevelparent, NVL(c.altname, c.entityid)
 ORDER BY period DESC, sales DESC
Sales transaction lines
SELECT TO_CHAR(t.trandate, 'YYYY-MM') AS period,
       TO_CHAR(t.trandate, 'YYYY-MM-DD') AS tran_date,
       BUILTIN.DF(t.type) AS type,
       t.tranid AS document,
       NVL(c.altname, c.entityid) AS customer,
       NVL(e.altname, e.entityid) AS billed_to,
       BUILTIN.DF(tl.item) AS item,
       tl.memo AS memo,
       -tl.quantity AS quantity,
       -tl.foreignamount * t.exchangerate AS sales,
       BUILTIN.DF(t.employee) AS sales_rep
  FROM transaction t
  JOIN transactionline tl ON tl.transaction = t.id
  JOIN entity e ON e.id = t.entity
  JOIN entity c ON c.id = e.toplevelparent
 WHERE t.type IN ('CustInvc', 'CashSale', 'CustCred')
   AND t.posting = 'T'
   AND tl.mainline = 'F'
   AND tl.taxline = 'F'
   AND NVL(tl.iscogs, 'F') = 'F'
   AND tl.itemtype NOT IN ('TaxGroup', 'TaxItem', 'Subtotal', 'Description', 'EndGroup')
   AND t.trandate >= ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -23)
 ORDER BY t.trandate DESC, t.tranid

04

Appears in

ReportSales

Sales by customer by month

Screenshot of the Sales by customer by month report in HiScale Advanced Reports, filled with fictional sample data
Sample preview, fictional dataOpen image full size (opens in a new tab)