Schema Theory

← Back to KPIs & Dashboards

Activation Rate

Description

Activation Rate measures the percentage of newly registered users who complete a defined "activation" action within a chosen time window (e.g., 7 days). This action should represent a user reaching first value - such as first login, app install and login, email verification, or the first time they perform your core value action.

Recommended category: Customer (Acquisition & Onboarding).

Visual Example

Activation Rate Visual

DAX Formula

The measures below define an ActivationDate as the earliest of several milestone dates, then compute the portion of signups in a period that activated within Activation Window (Days) (default 7).

-- Parameter (can be a disconnected table or a simple constant)
Activation Window (Days) = 7

-- Derived column: activation date (earliest milestone)
ActivationDate =
VAR DatesToConsider = {
    'onboarding-funnel-data'[FirstLoginDate],
    'onboarding-funnel-data'[EmailVerifiedDate],
    'onboarding-funnel-data'[AppInstalledDate],
    'onboarding-funnel-data'[FirstValueDate]
}
RETURN
MINX(
    FILTER(
        {
            ( 'onboarding-funnel-data'[FirstLoginDate] ),
            ( 'onboarding-funnel-data'[EmailVerifiedDate] ),
            ( 'onboarding-funnel-data'[AppInstalledDate] ),
            ( 'onboarding-funnel-data'[FirstValueDate] )
        },
        NOT ( ISBLANK ( [Value] ) )
    ),
    [Value]
)

-- Signups in the selected period (by Date table)
Signups =
CALCULATE (
    COUNTROWS ( 'onboarding-funnel-data' ),
    FILTER (
        'onboarding-funnel-data',
        NOT ( ISBLANK ( 'onboarding-funnel-data'[SignupDate] ) )
    ),
    KEEPFILTERS ( VALUES ( 'Date'[Date] ) )
)

-- Activated signups (activated within N days of signup)
Activated Signups =
VAR WindowDays = [Activation Window (Days)]
RETURN
CALCULATE (
    COUNTROWS ( 'onboarding-funnel-data' ),
    FILTER (
        'onboarding-funnel-data',
        NOT ( ISBLANK ( 'onboarding-funnel-data'[SignupDate] ) ) &&
        NOT ( ISBLANK ( [ActivationDate] ) ) &&
        [ActivationDate] >= 'onboarding-funnel-data'[SignupDate] &&
        [ActivationDate] <= 'onboarding-funnel-data'[SignupDate] + WindowDays
    ),
    KEEPFILTERS ( VALUES ( 'Date'[Date] ) )
)

-- Activation Rate
Activation Rate =
DIVIDE ( [Activated Signups], [Signups] )

Notes: If you prefer a single canonical activation event (e.g., first login), replace the ActivationDate logic with that event's date only. You can also make the window a slicer parameter (7/14/28 days) via a disconnected table.

SQL Example

This SQL computes the earliest milestone per user, then calculates the activation status for signups in each month using a 7-day window.

WITH base AS (
  SELECT
    user_id,
    SignupDate,
    LEAST(
      NULLIF(FirstLoginDate,    DATE '0001-01-01'),
      NULLIF(EmailVerifiedDate, DATE '0001-01-01'),
      NULLIF(AppInstalledDate,  DATE '0001-01-01'),
      NULLIF(FirstValueDate,    DATE '0001-01-01')
    ) AS ActivationDate
  FROM onboarding_funnel_data
),
labeled AS (
  SELECT
    user_id,
    DATE_TRUNC('month', SignupDate)::date AS signup_month,
    SignupDate,
    ActivationDate,
    CASE
      WHEN ActivationDate IS NOT NULL
           AND ActivationDate >= SignupDate
           AND ActivationDate <= SignupDate + INTERVAL '7 day'
      THEN 1 ELSE 0
    END AS activated_within_7d
  FROM base
  WHERE SignupDate IS NOT NULL
)
SELECT
  signup_month,
  COUNT(*) AS signups,
  SUM(activated_within_7d) AS activated_signups,
  CASE WHEN COUNT(*) = 0 THEN NULL
       ELSE SUM(activated_within_7d)::decimal / COUNT(*)
  END AS activation_rate
FROM labeled
GROUP BY 1
ORDER BY 1;

Usage Notes

Downloads