Problems / Feature Adoption Rate / Editorial
feature_usage
active_users
user_id
COUNT(DISTINCT user_id)
COUNT(*)
features
COALESCE(..., 0)
0
0.00
(SELECT COUNT(*) FROM active_users)
crossJoin
feature
Adoption rate questions are really population questions: the denominator comes from a table that is *not* the event log. Deriving the denominator from feature_usage (e.g. distinct users seen in the log) silently shrinks the population to people who used *something*, inflating every rate — and it can never produce the 0.00% row, because a feature with no usage has no rows to group. The features-spine LEFT JOIN plus an independent denominator table is the pattern that gets both right.
Solve Feature Adoption Rate yourself →