KPI cards
The Analytics page shows four key performance indicators for the selected date range and filters:MRR and LTV are currency-aware. If your dataset spans multiple currencies without normalization, both values will be shown as unavailable rather than producing a misleading total. Churn Rate and Active Subscriptions are currency-independent.
Filters
All KPI cards, most trend series, and exports respond to the same set of filters:- Date range —
date_fromanddate_to, both inclusive - Status — filter by subscription lifecycle status
- Product — filter by product ID
- Frequency — filter by billing cadence (e.g. weekly, monthly, yearly)
- Group by — bucket trend data by
day,week, ormonth
Trend chart
The trend chart visualizes one metric over the selected date range.MRR,Churn, andLTVare grouped by the selectedgroup_byvalue.created_subscriptions_countis a special-case trend sourced directly fromsubscription.created_at.- The created-subscriptions trend always renders daily UTC buckets and zero-fills missing days inside the range.
Export
The Analytics page supports on-demand export of the currently visible reporting slice:
Export is synchronous — it runs on demand and always reflects the currently active filters.
How snapshots work
Analytics precomputes one snapshot row per subscription per day. These daily snapshots power KPI queries, the snapshot-backed trend series, and exports — the dashboard does not recompute everything live from operational data on each request.Implemented exception
The created-subscriptions trend does not come fromsubscription_metrics_daily.
It is read directly from subscription.created_at because the required business question is simpler: how many subscriptions were created on each day in the selected range.
Snapshots are rebuilt automatically by a daily scheduled job, with a short lookback window to self-heal recent changes. They can also be triggered incrementally after significant domain events such as subscription resumes, cancellation finalizations, or renewal executions that affect revenue data.
If the analytics dashboard shows stale data after a significant operational change, a manual rebuild can be triggered from the Admin. The rebuild covers any date range and produces the same output as the scheduled job.