Skip to content

Retention matrix drops cohorts where nobody did the return event #656

Open

Description

@officialasishkumar

Description

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

  1. Create a retention report with start event app_open and return event purchase, interval Day.
  2. Pick a range where users who opened the app on one day never purchased.
  3. 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions