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.
| Month | Customer | Transactions | Net sales |
|---|---|---|---|
| 2026-09 | Harbor & Pine Co. | 6 | 48,200 |
| 2026-09 | Summit Analytics LLC | 4 | 27,150.50 |
| 2026-09 | Brightline Dental Group | 3 | 21,400 |
| 2026-08 | Harbor & Pine Co. | 7 | 55,310 |
| 2026-08 | Maple Ridge Clinics | 3 | 19,875.25 |
| 2026-08 | Northgate Supply | 2 | 14,020 |
03
The SuiteQL
This is the query each report runs. Read it, copy it, or change it after import.
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 DESCSELECT 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.tranid04