Product figures
Product figures show saved quantities of products in active subscriptions. Several products or units can belong to one subscription.
Data and price basis#
processAndSaveProductSummary joins MemberPackageProduct to its subscription, product, plan and package. It sums MemberPackageProduct.quantity, grouped by product, recurring price, plan and package.
The query requires an Active subscription and the product’s tenant ID. It includes optional products and has no Published-product predicate.
Paid means the subscription-product’s recurring price is positive; Free means zero. All removes the price condition. Payment success and the product’s catalog price do not determine these groups.
For example, one Active subscription contains one digital product and three print units. The product report counts one digital unit and three print units; the subscription report counts one subscription.
The same product can contribute to both Paid and Free through subscriptions with different recurring prices.
Sources: snapshot writer and price predicates.
Snapshot and period selection#
getHistoricalProductData reads ProductSummary rows for the tenant, excluding deleted summaries. For each product and period, it finds the maximum createdAt within the requested range.
The outer query sums quantities at that exact timestamp and applies the price filter. Monthly bars use a saved quantity; they do not sum daily quantities.
Weeks start Monday. Daily windows end yesterday; longer periods can include the unfinished current period. All time starts at available history and is capped at 550 periods.
The page defaults to All, five displayed series, Weekly and the last 12 weeks. Changing period resets the range; other filters retain it.
Sources: historical query and timeline ranges.
Displayed products and totals#
The shared formatter ranks products by quantity in the latest nonempty period. A view of five selects four named products; All selects up to 99.
Others appears only when the latest period has more products than the named-product limit. Older-only products outside the selected IDs are omitted if Others is absent. Total sums returned products, so it inherits that omission.
Details uses stacked product quantities. Total includes returned groups hidden in Details, but hover totals and percentages use only visible groups.
Hidden-series state uses positional IDs. Hiding the first Details product can hide Total after switching views; restore all groups first.
Source: formatter and Others condition, chart totals.
Diagnose product-count differences#
| Symptom | Check and interpretation |
|---|---|
| Product total exceeds subscription count | Sum subscribed quantities, including optional products. Several units per subscription are valid. |
| Paid differs from receipts | Inspect stored recurring prices. The report does not query successful payments. |
| Earlier product is missing | Compare latest-period selected IDs and the condition adding Others. |
| Snapshot total differs from expected rows | Check exact createdAt values within the saved batch and the selected type. |
| Chart is empty | Inspect the response. Missing values, zero values and request failures can all render empty. |
For access failures, check analytics/insights sidebar access and Dashboard READ on the historical-products endpoint. These are separate gates.
Verification limits#
Source checked on 28 September 2026 at 6cd1850569be3b1702ca736a19320c7626efb7bc. Prior owner-session checks covered report labels and switching to Monthly.
No production totals or snapshot timestamp mismatch were tested. Ordinary-role access, legend behavior and refresh timing remain unverified. The historical omission follows source conditions, not a reproduced customer case.
Use Product figures in Administrators for graph interpretation and controls.