01
About this report
One row per income, cost of sales, expense, other income and other expense account per posting period, for the last 24 months. Amounts are in base currency from the primary accounting book. Income reads positive and costs negative, so the statement ends on net income.
The columns are set up for the Statement widget. Use Account for rows, Section for sections in Section order, Month for columns and the sum of Amount as the value. That gives sections with subtotals, a Total column and net income as the last line. The Financial overview dashboard in this library has one ready. In the table, click an Amount to open General ledger postings for that account and month. In a OneWorld account, amounts of subsidiaries with different base currencies are added without translation.
02
Sample preview
Fictional figures in the shape you will see. Yours come from your account.
| Month | Section | Account number | Account | Amount |
|---|---|---|---|---|
| 2026-08 | Income | 4000 | 4000 Product sales | 412,300 |
| 2026-08 | Income | 4100 | 4100 Services | 188,450 |
| 2026-08 | Cost of Sales | 5000 | 5000 Cost of goods sold | -201,900 |
| 2026-08 | Expense | 6000 | 6000 Salaries and wages | -142,800 |
| 2026-08 | Expense | 6310 | 6310 Hosting and software | -18,450.40 |
| 2026-08 | Other Expense | 8100 | 8100 Exchange gain or loss | -1,220.80 |
03
The SuiteQL
This is the query each report runs. Read it, copy it, or change it after import.
SELECT TO_CHAR(p.startdate, 'YYYY-MM') AS period,
CASE a.accttype WHEN 'Income' THEN 'Income' WHEN 'COGS' THEN 'Cost of Sales' WHEN 'Expense' THEN 'Expense'
WHEN 'OthIncome' THEN 'Other Income' ELSE 'Other Expense' END AS section,
CASE a.accttype WHEN 'Income' THEN 1 WHEN 'COGS' THEN 2 WHEN 'Expense' THEN 3 WHEN 'OthIncome' THEN 4 ELSE 5 END AS section_order,
a.acctnumber AS account_number,
a.displaynamewithhierarchy AS account,
SUM(-tal.amount) AS amount
FROM transactionaccountingline tal
JOIN accountingbook ab ON ab.id = tal.accountingbook AND ab.isprimary = 'T'
JOIN transaction t ON t.id = tal.transaction
JOIN account a ON a.id = tal.account
JOIN accountingperiod p ON p.id = t.postingperiod
WHERE tal.posting = 'T'
AND a.accttype IN ('Income', 'COGS', 'Expense', 'OthIncome', 'OthExpense')
AND p.startdate >= ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -23)
AND p.startdate <= SYSDATE
GROUP BY TO_CHAR(p.startdate, 'YYYY-MM'), a.accttype, a.acctnumber, a.displaynamewithhierarchy
ORDER BY period, section_order, account_number, accountSELECT TO_CHAR(p.startdate, 'YYYY-MM') AS period,
TO_CHAR(t.trandate, 'YYYY-MM-DD') AS tran_date,
BUILTIN.DF(t.type) AS type,
NVL(t.tranid, t.transactionnumber) AS document,
a.displaynamewithhierarchy AS account,
BUILTIN.DF(a.accttype) AS account_type,
NVL(e.altname, e.entityid) AS name,
tl.memo AS memo,
tal.debit AS debit,
tal.credit AS credit,
-tal.amount AS amount
FROM transactionaccountingline tal
JOIN accountingbook ab ON ab.id = tal.accountingbook AND ab.isprimary = 'T'
JOIN transaction t ON t.id = tal.transaction
JOIN account a ON a.id = tal.account
JOIN accountingperiod p ON p.id = t.postingperiod
JOIN transactionline tl ON tl.transaction = tal.transaction AND tl.id = tal.transactionline
LEFT JOIN entity e ON e.id = t.entity
WHERE tal.posting = 'T'
AND tal.amount <> 0
AND p.startdate >= ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -23)
ORDER BY t.trandate DESC, document04