01
About this report
Time entries grouped by employee and month for the last 24 months. Each row gives total hours, billable hours, non-billable hours, the billable share, and the number of customers or projects the time was logged against.
Click Hours to open Time entries filtered to that employee and month. Group by Quarter for utilization reviews. The billable share is recalculated from the hours, not averaged. The report needs time tracking.
02
Sample preview
Fictional figures in the shape you will see. Yours come from your account.
| Month | Employee | Hours | Billable hours | Non-billable hours | Billable share | Customers and projects |
|---|---|---|---|---|---|---|
| 2026-09 | Dana Whitfield | 118.50 | 102 | 16.50 | 0.86 | 5 |
| 2026-09 | Marco Ruiz | 96 | 71.25 | 24.75 | 0.74 | 4 |
| 2026-09 | Priya Natarajan | 88.75 | 40 | 48.75 | 0.45 | 3 |
| 2026-08 | Dana Whitfield | 151 | 139.50 | 11.50 | 0.92 | 6 |
03
The SuiteQL
This is the query each report runs. Read it, copy it, or change it after import.
SELECT TO_CHAR(tb.trandate, 'YYYY-MM') AS period,
BUILTIN.DF(tb.employee) AS employee,
SUM(tb.hours) AS hours,
SUM(CASE WHEN tb.isbillable = 'T' THEN tb.hours ELSE 0 END) AS billable_hours,
SUM(CASE WHEN tb.isbillable = 'T' THEN 0 ELSE tb.hours END) AS non_billable_hours,
SUM(CASE WHEN tb.isbillable = 'T' THEN tb.hours ELSE 0 END) / NULLIF(SUM(tb.hours), 0) AS billable_share,
COUNT(DISTINCT tb.customer) AS projects
FROM timebill tb
WHERE tb.trandate >= ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -23)
AND tb.trandate <= SYSDATE
GROUP BY TO_CHAR(tb.trandate, 'YYYY-MM'), BUILTIN.DF(tb.employee)
ORDER BY period DESC, hours DESCSELECT TO_CHAR(tb.trandate, 'YYYY-MM') AS period,
TO_CHAR(tb.trandate, 'YYYY-MM-DD') AS tran_date,
BUILTIN.DF(tb.employee) AS employee,
NVL(e.altname, e.entityid) AS customer_or_project,
BUILTIN.DF(tb.item) AS service_item,
tb.isbillable AS billable,
BUILTIN.DF(tb.approvalstatus) AS approval_status,
tb.hours AS hours,
tb.memo AS memo
FROM timebill tb
LEFT JOIN entity e ON e.id = tb.customer
WHERE tb.trandate >= ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -23)
AND tb.trandate <= SYSDATE
ORDER BY tb.trandate DESC, employee04