backfill/2024-04-26-active_users_aggregates/fenix_query.sql (122 lines of code) (raw):

WITH distribution_id AS ( SELECT client_info.client_id, ARRAY_AGG( metrics.string.metrics_distribution_id IGNORE NULLS ORDER BY submission_timestamp ASC )[SAFE_OFFSET(0)] AS distribution_id FROM `moz-fx-data-shared-prod.fenix.metrics` -- from 2021 until 2023-12-31 -- `moz-fx-data-shared-prod.fenix.baseline` -- from 2024-01-01 WHERE DATE(submission_timestamp) BETWEEN DATE_SUB(@submission_date, INTERVAL 7 DAY) AND DATE_ADD(@submission_date, INTERVAL 7 DAY) GROUP BY client_id ), baseline AS ( SELECT activity_segment AS segment, attribution_medium, attribution_source, attribution_medium IS NOT NULL OR attribution_source IS NOT NULL AS attributed, city, country, dist.distribution_id AS distribution_id, um.first_seen_date AS first_seen_date, is_default_browser, normalized_channel AS channel, normalized_os AS os, normalized_os_version AS os_version, os_version_major, os_version_minor, um.submission_date, um.locale, att.adjust_network, att.install_source, normalized_app_name as app_name, days_since_seen, ad_click, organic_search_count, search_count, search_with_ads, uri_count, active_hours_sum, um.app_version as app_version, um.client_id, durations FROM `moz-fx-data-shared-prod.telemetry_derived.unified_metrics_v1` AS um LEFT JOIN distribution_id AS dist ON um.client_id = dist.client_id LEFT JOIN fenix.firefox_android_clients AS att ON um.client_id = att.client_id WHERE um.submission_date BETWEEN DATE_SUB(@submission_date, INTERVAL 28 DAY) AND @submission_date AND normalized_app_name IN ('Fenix', 'Fenix BrowserStack') ), um_dau AS ( SELECT submission_date, client_id, ( LOGICAL_AND(days_since_seen = 0) AND LOGICAL_AND(durations > 0) ) AS is_dau FROM baseline GROUP BY ALL ), um_is_active AS ( SELECT submission_date, client_id, is_dau, LOGICAL_OR(is_dau) OVER (PARTITION BY client_id ORDER BY submission_date ASC ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS is_wau, LOGICAL_OR(is_dau) OVER (PARTITION BY client_id ORDER BY submission_date ASC ROWS BETWEEN 27 PRECEDING AND CURRENT ROW) AS is_mau, FROM um_dau ) SELECT segment, app_version, attribution_medium, attribution_source, attributed, city, country, distribution_id, EXTRACT(YEAR FROM first_seen_date) AS first_seen_year, is_default_browser, COALESCE(REGEXP_EXTRACT(locale, r'^(.+?)-'), locale, NULL) AS locale, CASE WHEN app_name = 'Fenix' AND distribution_id = 'MozillaOnline' THEN CONCAT(app_name, ' ', distribution_id) ELSE app_name END AS app_name, channel, os, os_version, os_version_major, os_version_minor, submission_date, adjust_network, install_source, COUNTIF(is_dau) AS dau, COUNTIF(is_wau) AS wau, COUNTIF(is_mau) AS mau, COUNT(DISTINCT IF(days_since_seen = 0, client_id, NULL)) AS daily_users, COUNT(DISTINCT IF(days_since_seen < 7, client_id, NULL)) AS weekly_users, COUNT(DISTINCT IF(days_since_seen < 28, client_id, NULL)) AS monthly_users, SUM(uri_count) AS uri_count, SUM(active_hours_sum) AS active_hours FROM baseline LEFT JOIN um_is_active USING(submission_date, client_id) WHERE submission_date = @submission_date GROUP BY ALL