Lens

Retention Tile

A cohort matrix of how many members are still active in each period after they started, from subscription start and end dates or from repeat activity. Use it to track churn and repeat behavior.

Retention grid of monthly cohorts from January to March 2026, showing the percent still active each month.
Illustration with the numbers from the Example below

What it shows

The Retention tile is a cohort matrix. Each row is a group of members who started in the same month, week or day (or, if you choose, one value of a dimension). Each column is a period since they started. A cell shows the share of that row still retained at that period, or, if you choose, the share churned, the share cancelled, a count, or value earned per member. You can draw it as a shaded grid or as one line per row.

Use it forNot for
Subscription, contract or membership retention from start and end datesA single retention number for a KPI tile
Repeat purchase or return-visit rates from event rowsStep-by-step conversion (use Funnel)
Lifetime value per member over time, from an orders tableRevenue totals by date (use a Line or Table tile)

Example

A subscriptions table has one row per subscription:

ColumnExample values
subscription_id (member ID)S-1001
started_at2026-01-12
cancelled_at2026-03-03, or empty while active
planmonthly, annual
SettingValue
ModeLifecycle
Member IDsubscription_id
Start datestarted_at
End datecancelled_at
Cohort byMonth
Periods inMonths
ColumnsEvery period
Number of periods3
Show% retained
Size column labelSubscriptions
ViewGrid

With the board set to January 1 to March 31, 2026, and today being April 15, 2026, the tile shows:

CohortSubscriptionsMonth 0Month 1Month 2Month 3
Jan 2026200100.0%82.0%74.5%71.0% *
Feb 2026150100.0%84.7%76.0% *
Mar 2026180100.0%80.0% *

Month 1 for January is 164 of 200 still active one calendar month after their own start. Cells marked * have a dashed outline: only part of the cohort has reached that month so far (for Jan 2026, Month 3 counts only the members who started January 1 to 15), so the number can still move. Blank cells mean no one in the cohort has reached that month yet.

Data it needs

The tile reads an ordinary table. You map its fields in the editor. There are two modes:

ModeThe table hasA member is retained in a period when
LifecycleOne row per member, with a start date and an end date (empty while active)Their end date is empty, or not before the start of that period
ActivityMany rows per member, such as orders or visitsThey have at least one qualifying row inside that period

Dates can be text values in the table, such as 2026-03-01 or 2026-03-01 06:09:05. A date without a time zone is read in your property's time zone. A date with an offset, such as Z or +02:00, is read as the exact moment it names. Rows whose member ID is empty are ignored.

Settings

SettingWhat it doesDefault
Title, Description, SizeAs on other tilesMedium
Data TableThe table to readNone
ModeLifecycle (one row per member, start and end date) or Activity (many rows per member)Lifecycle
Member IDThe field that identifies one member. Each member is counted once. RequiredNone
Start dateWhen the member started; picks their cohort. Required in Lifecycle. Optional in Activity, where empty means the member's first rowNone
End dateLifecycle only. When the member ended; empty means still active. RequiredNone
Activity dateActivity only. The date that places a row in a periodRow date (event time)
Counts as active when ... equalsActivity only. A dimension and value a row must have to count, such as event_name equals purchaseAny row
Cohort byMonth, Week or Day: how members are grouped into rows by start dateMonth
Periods inMonths, Weeks or Days: the unit of each columnMonths
ColumnsLifecycle only. Every period (Month 1, 2, 3...) or Custom windows (0-3, 3-6, 6-12, 12+)Every period
Number of periodsColumns after period 0. 1 to 60 months, 104 weeks or 90 days12
Window breakpointsWith custom windows. Up to 10 increasing whole numbers in the period unit, such as 3, 6, 12Empty
Show% retained, % churned, Members retained, % cancelled during (Lifecycle only), Value per member and Cumulative value (need a value table)% retained
Value table (optional)A second table of the same property, such as orders, whose value is added up per memberNone
Member ID on the value tableThe value table field holding the member ID. Required with a value tableNone
ValueThe value table metric to add up. Only stored, summable metrics are listed. Required with a value tableNone
Value dateThe value table date that places value in a columnRow date
Divide byMembers, or the distinct values of a field on the retention table (such as a customer ID)Members
Size column label (optional)The header of the size column, up to 60 charactersSize
RowsStart cohort (one row per start period), a dimension of the table, or a custom grouping of itStart cohort
Rows shownWith rows by a dimension. The largest rows are shown; the rest are pooled into "Other". 1 to 5010
Minimum members per cellWith rows by a dimension. Cells resting on fewer members are greyed out and show their count30
ViewGrid (shaded table) or Curve (one line per row)Grid
Cohort (optional)Limits the tile to members in one cohort built on the same tableAll users (no cohort)
FiltersTile filters on the table's rows, with + Add Filter. Several filters must all matchNone
Date rangeShown in the editor, but this tile always follows the board's date rangeInherit from board

Switching to Activity mode resets Columns to Every period and a % cancelled during display to % retained, because both need an end date.

How it calculates

Members and cohorts. Lens collapses the table to one entry per member ID. In Lifecycle mode the start is the member's earliest start date and the end is their latest non-empty end date. The member's cohort is the month, week or day of their start, in your property's time zone. Week cohorts begin on your property's first day of the week. The Size column is the number of distinct members in the row.

Which rows appear. The board's date range selects members by start date. Only members who started inside the range appear. It never cuts off their later periods: a January cohort keeps showing Month 6 even when the range ends in March. Rows are read from the whole table, not just the range.

Periods. Period N is a calendar period counted from each member's own start: Month 1 for a January 31 start is February 28 (or 29). Periods are not blocks of 30 days.

Who counts in a cell. A cell counts only members whose period N has already been reached today. If no member of the row has reached it, the cell is blank, never 0%. If only some have, the cell is in progress, marked * with a dashed outline, and computed over those members only.

ShowCell value
% retainedRetained members divided by members who have reached the period, to one decimal
% churned100 minus % retained
Members retainedThe count of retained members
% cancelled duringMembers whose end date falls inside that period (for period 1, any time before its end), divided by members who have reached it
Value per memberValue earned in that column, divided by the members (or the Divide by values) who have completed it
Cumulative valueValue from the start through the end of that column, per member

Retained, by mode:

ModeRetained at period N
Lifecycle, every periodEnd date empty, or on or after start plus N periods. Period 0 is always 100%
Lifecycle, custom windowsEnd date empty, or on or after the end of the window. The last window ("12+ to date") counts members still active today
ActivityAt least one qualifying row on or after start plus N periods and before start plus N+1 periods

Custom windows. Breakpoints 3, 6, 12 give the columns 0-3, 3-6, 6-12 and "12+ to date". The last window runs to today, so it grows as a row ages. A window is reached once its end has passed; the last window is reached as soon as a member enters it.

Rows by a dimension. Each member takes the value from their earliest row, so a member who changed plan is counted once, where they started. Rows sort numerically when every value is a number (30, 60, 90), otherwise by size, largest first. "(not set)" and "Other" come last. Each cell pools every member in the row who has reached that period, so the counts are added up before any percentage is taken.

Value. Value rows are matched to members on Member ID on the value table, and placed in a column by their value date, counted from the member's start date. A value dated exactly on a column boundary belongs to the later column. A member counts in a value column only after they have completed it, and only if the value table has data from the column's start. On start-cohort rows, a column that starts before the value table's first date shows - rather than an undercount.

If no member started in the range, the tile shows "No cohorts started in this date range" on both the board and the public report.

What viewers can do

ActionBoardPublic report
Read the gridShaded cells with a legend that explains the display, the * cells and grey cellsSame
Read the curveOne line per row, ending at the last period reached. In-progress points are hollowSame
Info iconShows the tile descriptionSame
"How to read this" iconOpens a short guide to the matrixNot shown
AI buttonSummarizes the matrix, when AI features are on for the propertyNot shown
Board filter chipsApplied, for chips whose dimension the table hasSame
Change the date rangePicks which cohorts appearSame

Grid or curve is set in the editor; viewers cannot switch it. A % cancelled during tile always draws the grid. The curve plots % retained (or % churned), so a Members retained tile plots % retained on the curve. The value displays plot cumulative value.

Limits and gotchas

  • The date range picks cohorts, not activity. A one-month range shows one monthly cohort, with all of its later months. To see more cohorts, widen the range.
  • The tile's own Date range setting is ignored. The tile always uses the board's range, on the board and in the public report.
  • Blank is not zero. A blank cell means nobody has reached that period yet. Read across older rows for complete numbers, and treat * cells as provisional.
  • Lifecycle reads one membership per member ID. If an ID has several rows, the earliest start and the latest end date on any row are used, even when a later row has no end date. A member who cancelled and rejoined under the same ID therefore counts as ended at that end date. Give each membership its own ID if you need them counted separately.
  • Activity period 0 is not forced to 100%. With a Counts as active when condition, a member whose first row did not qualify can show as not retained in period 0.
  • Limits: up to 60 monthly, 104 weekly or 90 daily periods, 10 window breakpoints, and 50 rows shown. See Limits.
  • Grey cells appear only when Rows is set to a dimension or grouping. Lower Minimum members per cell to 0 to turn them off.
  • Dates without a time zone are read in your property's time zone. A start written as 2026-03-01 is March, even when the table is stored in UTC.