Cost reporting and forecasting

Actual versus amortized, trends and movers, drilldowns, forecasting with bounds, and why totals exclude the last two days.

The cost report answers where the money went, what changed, and what the month is likely to end at.

Actual versus amortized #

Both are collected and reported side by side, because they answer different questions:

  • Actual cost is what was billed in the period, including the full upfront charge for a commitment purchased that month.
  • Amortized cost spreads commitment purchases across the term they cover.

Use amortized for trend analysis and unit economics, where a one-off purchase would otherwise create a spike that means nothing. Use actual when reconciling against an invoice.

Which one is the report using? Every cost surface states the cost type it is showing. If a number looks unfamiliar, check that first — it is the most common explanation.

Breakdowns and drilldowns #

Filter by subscription, service, resource, and date range, then break down by any of them. Top movers ranks what changed most against the prior period at subscription, service, and resource level — usually the fastest route from “we spent more” to “here is the thing that did it.”

Resource drilldown goes to individual resources with their full cost history.

Forecasting #

Flux forecasts daily spend and the calendar month using matching-weekday history, with robust confidence bounds rather than a single optimistic line.

The forecast publishes:

  • A projected total with upper and lower bounds
  • MAPE — mean absolute percentage error, so you can judge how much to trust the projection
  • An explicit warming-up state while history is too thin to forecast honestly

[!NOTE] Budget variance needs targets Forecast-versus-budget requires budget targets to exist. Set them under Budgets; until then Flux reports the forecast without pretending to know what it should be.

The two-day latency #

Billing data is not final immediately. Flux excludes unfinalized days — typically the most recent two — from totals, forecasts, and anomaly baselines.

This is why:

  • Month-to-date totals end a couple of days ago rather than today
  • A comparison against last month uses the same span, not a full month against a partial one
  • Anomaly detection does not fire on a day whose data is still arriving
Comparing periods fairly Comparing a partial month against a complete one is the most common way to produce an alarming and meaningless percentage. Flux compares equal spans by default for exactly that reason.

Exports #

Every cost view exports to CSV or Excel with the filters applied. Excel exports carry a metadata sheet recording generation time, the snapshot version, and which filters produced the file — so a spreadsheet forwarded to finance still carries its provenance.

CSV exports are protected against spreadsheet formula injection.