Main Dashboard
Revenue Burn-Up Chart (Current Year)
Revenue Burn-Up Chart — Explanation
What is this chart?
It answers one question: are we on track to hit our annual revenue target? Each coloured area is a different bucket of money for the year. They stack on top of each other and grow month by month. The dashed red line is where we should be. If the stack reaches the red line by December, we hit the target.
What each colour means
Actualized (blue) — revenue we’ve already invoiced.
- What it is: money tied to invoices we’ve actually issued (shipped & billed).
- Where it comes from: NetSuite invoices (transaction type
CustInvc) for the current year, grouped by ship-date month, onlyInvoice : OpenorInvoice : Paid In Fullstatuses (cancelled/voided invoices are excluded).
Booked (orange) — sales orders we’ve already won, scheduled to ship this year.
- What it is: money tied to sales orders we’ve booked — the product is still in production or waiting in the shipping queue.
- Where it comes from: a live SuiteQL query against the NetSuite
transactiontable. - Field-level criteria the query uses:
type = 'SalesOrd'— only sales-order transactions are counted. Quotes, invoices, returns, transfer orders etc. are ignored.BUILTIN.DF(status) NOT LIKE '%Cancelled%'— any SO whose status display name contains the word “Cancelled” is excluded (catches all cancellation variants).- Month bucket uses
EXTRACT(MONTH FROM COALESCE(shipdate, custbody10))— the standard NetSuiteshipdatefield is used first; if that’s blank, the internal ship-date custom fieldcustbody10is used as a fallback. The SO is placed in the calendar month of whichever date applies. - Year filter uses the same
COALESCE(shipdate, custbody10)logic — only SOs whose effective ship-date year matches the chart year are included. SOs scheduled for next year (or with no ship-date at all) are not in this stack. - Amount:
SUM(transaction.total) / 1,000,000— orders are summed at their nativetotal(gross order value including tax/shipping where applicable) and converted to millions of dollars for display.
- Heads-up: the query currently does not exclude SOs that have already been (partially or fully) invoiced. That means some revenue can appear in both the Booked stack and the Actualized stack for SOs that have shipped & been invoiced this year — the stacked total can slightly over-state combined revenue in those overlap cases.
Forecast (purple) — money we expect from open quotes we haven’t yet won.
- What it is: a best-guess of how much of our open quote pipeline will close this year.
- How it’s computed:
- Take every open quote and multiply it by its predicted win rate (from our win/loss model). Add them up → that’s the “expected pipeline value”.
- Spread that total across the months based on how quickly quotes historically turn into orders:
- ~51% closes within 30 days
- ~16% closes in days 31–60
- ~9% closes in days 61–90
- ~9% closes in days 91–120
- The remainder is too far out to land on this year’s chart.
- Where the percentages come from:
quote_to_order_lead_times.json, computed from real historical quote-to-order conversion times.
Target (red dashed line) — where revenue should be each month.
- What it is: the cumulative monthly target from the approved annual budget.
- Where it comes from:
config.cfg [REVENUE_BURNUP] monthly_targets— 12 monthly numbers, accumulated month-by-month.
Reading the chart
- Hover over any month to see the exact amounts in each bucket.
- The tooltip’s “Stacked total” sums the three coloured stacks (it ignores the target line).
- Actualized stops growing after the current month — we hold it flat so you can compare future projection vs. past reality.
How fresh is the data?
- The numbers come from a JSON cache (
cache/revenue_burnup.json) that refreshes every few hours via a background scheduler. - The “Last updated” label at the top of the chart shows the cache age.
- Click Refresh Data for a fresh pull. The button only appears when the cache is older than an hour (to avoid hammering NetSuite).