48 lines
1.5 KiB
YAML
48 lines
1.5 KiB
YAML
name: feature_adoption
|
|
display_name: Feature Adoption Rate
|
|
category: product_usage
|
|
type: ratio
|
|
unit: percentage
|
|
grain: monthly
|
|
table: user_events
|
|
expression: "COUNT(DISTINCT feature_users) / COUNT(DISTINCT total_users) * 100"
|
|
time_column: event_date
|
|
description: "Feature Adoption Rate — the percentage of active users who used a specific feature in a given month."
|
|
dimensions:
|
|
- feature
|
|
- plan_type
|
|
synonyms:
|
|
- feature_usage_rate
|
|
- adoption_rate
|
|
notes:
|
|
- "Denominator is all MAU for the period, numerator is MAU who triggered the feature event"
|
|
- "Track each feature separately by filtering on feature_name or event_type"
|
|
- "Adoption >20% within 90 days of launch is a common success threshold"
|
|
sql: |
|
|
WITH monthly_active AS (
|
|
SELECT
|
|
DATE_TRUNC('month', event_date) AS month,
|
|
COUNT(DISTINCT user_id) AS total_users
|
|
FROM user_events
|
|
WHERE event_type != 'internal'
|
|
GROUP BY 1
|
|
),
|
|
feature_users AS (
|
|
SELECT
|
|
DATE_TRUNC('month', event_date) AS month,
|
|
feature_name,
|
|
COUNT(DISTINCT user_id) AS users_adopted
|
|
FROM user_events
|
|
WHERE event_type = 'feature_used'
|
|
AND event_type != 'internal'
|
|
GROUP BY 1, 2
|
|
)
|
|
SELECT
|
|
f.month,
|
|
f.feature_name,
|
|
f.users_adopted,
|
|
m.total_users,
|
|
ROUND(f.users_adopted * 100.0 / NULLIF(m.total_users, 0), 2) AS adoption_rate_pct
|
|
FROM feature_users f
|
|
JOIN monthly_active m ON f.month = m.month
|
|
ORDER BY f.month, adoption_rate_pct DESC
|