01
About this report
Net sales over the last 365 days, rolled up to the top-level customer so sub-customers and projects count toward their parent. Net sales are invoices and cash sales less credit memos, before tax, in base currency.
Share of sales is each customer's part of the total. Last sale shows who has stopped buying. The customer name opens the customer record.
02
Sample preview
Fictional figures in the shape you will see. Yours come from your account.
| Customer | Transactions | Net sales | Share of sales | Last sale |
|---|---|---|---|---|
| Harbor & Pine Co. | 64 | 612,400 | 0.18 | 2026-09-19 |
| Brightline Dental Group | 41 | 398,250.50 | 0.12 | 2026-09-12 |
| Summit Analytics LLC | 37 | 301,980 | 0.09 | 2026-09-22 |
| Maple Ridge Clinics | 29 | 244,100.75 | 0.07 | 2026-08-30 |
| Northgate Supply | 22 | 188,720 | 0.06 | 2026-09-03 |
| Coastal Freightways | 9 | 97,310 | 0.03 | 2026-06-14 |
03
The SuiteQL
This is the query each report runs. Read it, copy it, or change it after import.
SELECT x.customer__id,
NVL(c.altname, c.entityid) AS customer,
x.transactions,
x.sales,
x.sales / NULLIF(SUM(x.sales) OVER (), 0) AS share,
TO_CHAR(x.last_sale, 'YYYY-MM-DD') AS last_sale
FROM (SELECT e.toplevelparent AS customer__id,
COUNT(DISTINCT t.id) AS transactions,
SUM(-tl.foreignamount * t.exchangerate) AS sales,
MAX(t.trandate) AS last_sale
FROM transaction t
JOIN transactionline tl ON tl.transaction = t.id
JOIN entity e ON e.id = t.entity
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 > TRUNC(SYSDATE) - 365
GROUP BY e.toplevelparent) x
JOIN entity c ON c.id = x.customer__id
ORDER BY x.sales DESC04