You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Retention matrix drops cohorts where nobody did the return event #656
In a retention report, a cohort none of whose users ever did the return event has no row in the matrix. With different start and return events (for example app_open, then purchase), those periods are missing from the table. Their users are also left out of the Weighted Average, which pools only cohorts with at least one return, so retention is overstated. When nobody has done the return event yet, the whole report looks like it has no data.
The MCP and API retention endpoints read the same query, so they have the same gap.
Steps to reproduce
Create a retention report with start event app_open and return event purchase, interval Day.
Pick a range where users who opened the app on one day never purchased.
That day is missing from the matrix, and the Weighted Average divides only by the other cohorts.
Root cause
retentionCohortQuery (packages/core/src/modules/chart/src/retention.sql.ts) selects FROM interval_users LEFT JOIN cohort_sizes. interval_users is built from the inner join of cohort members with their return events, so a cohort with no returning user has no row there and drops out of the result.
Expected behavior
Every cohort appears with its size and zeros for the periods where nobody returned, and the Weighted Average includes those users.
Activity