01
About this report
Two rows per month for the last 24 months, in base currency before tax. Ordered is the value of purchase order lines by order date, leaving out rejected orders. Billed is the value of vendor bill lines created from a purchase order, by bill date. Bills entered without a link to their purchase order do not count as Billed.
If Ordered stays ahead of Billed for several months, orders are waiting for invoices or bills are being entered without the purchase order link. On a dashboard, a line chart grouped by Month with Kind as the series shows the two side by side.
02
Sample preview
Fictional figures in the shape you will see. Yours come from your account.
| Month | Kind | Documents | Amount |
|---|---|---|---|
| 2026-07 | Ordered | 38 | 212,400 |
| 2026-07 | Billed | 41 | 198,750.50 |
| 2026-08 | Ordered | 44 | 256,100 |
| 2026-08 | Billed | 39 | 221,320 |
| 2026-09 | Ordered | 29 | 174,980 |
| 2026-09 | Billed | 27 | 139,115.25 |
03
The SuiteQL
This is the query each report runs. Read it, copy it, or change it after import.
SELECT period, kind, documents, amount
FROM (SELECT TO_CHAR(t.trandate, 'YYYY-MM') AS period,
'Ordered' AS kind,
COUNT(DISTINCT t.id) AS documents,
SUM(tl.foreignamount * t.exchangerate) AS amount
FROM transaction t
JOIN transactionline tl ON tl.transaction = t.id
WHERE t.type = 'PurchOrd'
AND t.status NOT IN ('PurchOrd:C', 'C')
AND tl.mainline = 'F'
AND tl.taxline = 'F'
AND t.trandate >= ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -23)
GROUP BY TO_CHAR(t.trandate, 'YYYY-MM')
UNION ALL
SELECT TO_CHAR(t.trandate, 'YYYY-MM'),
'Billed',
COUNT(DISTINCT t.id),
SUM(tl.foreignamount * t.exchangerate)
FROM transaction t
JOIN transactionline tl ON tl.transaction = t.id
JOIN transaction po ON po.id = tl.createdfrom
WHERE t.type = 'VendBill'
AND t.posting = 'T'
AND po.type = 'PurchOrd'
AND tl.mainline = 'F'
AND tl.taxline = 'F'
AND t.trandate >= ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -23)
GROUP BY TO_CHAR(t.trandate, 'YYYY-MM'))
ORDER BY period, kind DESC