Retention matrix drops cohorts where nobody did the return event

Abierto
#656 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@officialasishkumar ya está trabajando en esto.

Desde el 7/11/2026.

  • #659 de @officialasishkumar — abierto

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Estancado
Stack tecnológico
sql, typescript

Línea de trabajo

Start by reading packages/core/src/modules/chart/src/retention.sql.ts, especially retentionCohortQuery, and trace how cohorts and return events feed the matrix and Weighted Average. Check the tests for the retention query and its MCP and API consumers. Done means cohorts with no return events still appear with zero values and their users are included in the Weighted Average; an open linked pull request indicates work is already underway.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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.

Lenguaje dominante
TypeScript
Estrellas
7.3k
Forks
539
Merge medio
1 d 20 h
PR fusionados (30 d)
80

Preparar el entorno

  • Incluye un Dockerfile o un archivo de Docker Compose
  • Sin plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de Openpanel-dev/openpanel

Todos los issues de Openpanel-dev/openpanel

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.