sql/moz-fx-data-shared-prod/firefox_ios_derived/feature_usage_metrics_v2/query.sql (261 lines of code) (raw):

WITH baseline_clients AS ( SELECT submission_date AS dau_date, client_id, LEAD(submission_date) OVER (PARTITION BY client_id ORDER BY submission_date) AS next_dau FROM `moz-fx-data-shared-prod.firefox_ios.baseline_clients_daily` WHERE submission_date >= DATE_SUB(@submission_date, INTERVAL 4 DAY) AND durations > 0 AND LOWER(COALESCE(isp, "")) <> "browserstack" ), client_attribution AS ( SELECT client_id, adjust_network, FROM `moz-fx-data-shared-prod.firefox_ios.attribution_clients` ), metrics_dau AS ( -- assign a DAU date for each metric ping while keeping it de-duplicated SELECT m.*, MAX(dau_date) OVER (PARTITION BY document_id) AS dau_date FROM `moz-fx-data-shared-prod.firefox_ios.metrics` m JOIN baseline_clients ON client_info.client_id = client_id -- offset by at least one to reflect metrics ping design considerations AND DATE_DIFF(DATE(submission_timestamp), dau_date, DAY) BETWEEN 1 AND 4 -- exclude metrics pings that should be matched to next DAU date AND DATE(submission_timestamp) <= DATE_ADD(next_dau, INTERVAL 1 DAY) WHERE DATE(submission_timestamp) BETWEEN DATE_SUB(@submission_date, INTERVAL 3 DAY) AND @submission_date QUALIFY ROW_NUMBER() OVER (PARTITION BY document_id ORDER BY submission_timestamp) = 1 ), metric_ping_clients_feature_usage AS ( SELECT dau_date, client_info.client_id, ARRAY_AGG(normalized_channel ORDER BY submission_timestamp DESC)[SAFE_OFFSET(0)] AS channel, ARRAY_AGG(normalized_country_code ORDER BY submission_timestamp DESC)[ SAFE_OFFSET(0) ] AS country, IF(SUM(metrics.counter.app_opened_as_default_browser) > 0, TRUE, FALSE) AS is_default_browser, --Credential Management: Logins SUM(COALESCE(metrics.counter.logins_deleted, 0)) AS logins_deleted, SUM(COALESCE(metrics.counter.logins_modified, 0)) AS logins_modified, SUM(COALESCE(metrics.counter.logins_saved, 0)) AS logins_saved, MAX(COALESCE(metrics.quantity.logins_saved_all, 0)) AS logins_saved_all, --Credential Management: Credit Cards CAST( MAX(COALESCE(metrics.boolean.credit_card_autofill_enabled, FALSE)) AS INT64 ) AS credit_card_autofill_enabled, CAST( MAX(COALESCE(metrics.boolean.credit_card_sync_enabled, FALSE)) AS INT64 ) AS credit_card_sync_enabled, SUM(COALESCE(metrics.counter.credit_card_deleted, 0)) AS credit_card_deleted, SUM(COALESCE(metrics.counter.credit_card_modified, 0)) AS credit_card_modified, SUM(COALESCE(metrics.counter.credit_card_saved, 0)) AS credit_card_saved, MAX(COALESCE(metrics.quantity.credit_card_saved_all, 0)) AS credit_card_saved_all, --Bookmark SUM( COALESCE(mozfun.map.extract_keyed_scalar_sum(metrics.labeled_counter.bookmarks_add), 0) ) AS bookmarks_add, SUM( COALESCE(mozfun.map.extract_keyed_scalar_sum(metrics.labeled_counter.bookmarks_delete), 0) ) AS bookmarks_delete, SUM( COALESCE(mozfun.map.extract_keyed_scalar_sum(metrics.labeled_counter.bookmarks_edit), 0) ) AS bookmarks_edit, SUM( COALESCE(mozfun.map.extract_keyed_scalar_sum(metrics.labeled_counter.bookmarks_open), 0) ) AS bookmarks_open, SUM( COALESCE(mozfun.map.extract_keyed_scalar_sum(metrics.labeled_counter.bookmarks_view_list), 0) ) AS bookmarks_view_list, CAST( MAX(COALESCE(metrics.boolean.bookmarks_has_mobile_bookmarks, FALSE)) AS INT64 ) AS has_mobile_bookmarks, MAX(COALESCE(metrics.quantity.bookmarks_mobile_bookmarks_count, 0)) AS mobile_bookmarks_count, --FxA SUM(COALESCE(metrics.counter.sync_create_account_pressed, 0)) AS sync_create_account_pressed, SUM(COALESCE(metrics.counter.sync_open_tab, 0)) AS sync_open_tab, SUM(COALESCE(metrics.counter.sync_sign_in_sync_pressed, 0)) AS sync_sign_in_sync_pressed, --Privacy MAX(COALESCE(metrics.quantity.tabs_private_tabs_quantity, 0)) AS tabs_private_tabs_quantity, CAST( MAX(COALESCE(metrics.boolean.preferences_close_private_tabs, FALSE)) AS INT64 ) AS preferences_close_private_tabs, CAST( MAX(COALESCE(metrics.boolean.tracking_protection_enabled, FALSE)) AS INT64 ) AS tracking_protection_enabled, CAST( MAX(COALESCE(LOWER(metrics.string.tracking_protection_strength) = "strict", FALSE)) AS INT64 ) AS tracking_protection_strict_enabled, --Tab Count MAX(COALESCE(metrics.quantity.tabs_normal_tabs_quantity, 0)) AS tabs_normal_tabs_quantity, MAX(COALESCE(metrics.quantity.tabs_inactive_tabs_count, 0)) AS tabs_inactive_tabs_count, --Default Browser SUM( COALESCE(metrics.counter.app_opened_as_default_browser, 0) ) AS app_opened_as_default_browser, SUM( COALESCE(metrics.counter.settings_menu_set_as_default_browser_pressed, 0) ) AS settings_menu_set_as_default_browser_pressed, --Notification CAST( MAX(COALESCE(metrics.boolean.preferences_sync_notifs, FALSE)) AS INT64 ) AS preferences_sync_notifs, CAST( MAX(COALESCE(metrics.boolean.preferences_tips_and_features_notifs, FALSE)) AS INT64 ) AS preferences_tips_and_features_notifs, --Customize Home CAST( MAX(COALESCE(metrics.boolean.preferences_jump_back_in, FALSE)) AS INT64 ) AS preferences_jump_back_in, CAST( MAX(COALESCE(metrics.boolean.preferences_recently_visited, FALSE)) AS INT64 ) AS preferences_recently_visited, CAST( MAX(COALESCE(metrics.boolean.preferences_recently_saved, FALSE)) AS INT64 ) AS preferences_recently_saved, CAST(MAX(COALESCE(metrics.boolean.preferences_pocket, FALSE)) AS INT64) AS preferences_pocket, SUM(COALESCE(metrics.counter.app_menu_customize_homepage, 0)) AS app_menu_customize_homepage, SUM( COALESCE(metrics.counter.firefox_home_page_customize_homepage_button, 0) ) AS firefox_home_page_customize_homepage_button, --Address MAX(COALESCE(metrics.quantity.addresses_saved_all, 0)) AS addresses_saved_all FROM metrics_dau GROUP BY dau_date, client_id ) -- Aggregated feature usage SELECT @submission_date AS submission_date, dau_date AS metric_date, COUNT(DISTINCT client_id) AS clients, channel, country, adjust_network, is_default_browser, /*Logins*/ -- logins_deleted COUNT(DISTINCT IF(logins_deleted > 0, client_id, NULL)) AS logins_deleted_users, SUM(logins_deleted) AS logins_deleted, -- logins_modified COUNT(DISTINCT IF(logins_modified > 0, client_id, NULL)) AS logins_modified_users, SUM(logins_modified) AS logins_modified, -- logins_saved COUNT(DISTINCT IF(logins_saved > 0, client_id, NULL)) AS logins_saved_users, SUM(logins_saved) AS logins_saved, -- logins_saved_all COUNT(DISTINCT IF(logins_saved_all > 0, client_id, NULL)) AS logins_saved_all_users, SUM(logins_saved_all) AS logins_saved_all, /*Credit Card*/ --credit card autofill enabled COUNT( DISTINCT IF(credit_card_autofill_enabled > 0, client_id, NULL) ) AS credit_card_autofill_enabled_users, SUM(credit_card_autofill_enabled) AS credit_card_autofill_enabled, --credit_card_sync_enabled COUNT( DISTINCT IF(credit_card_sync_enabled > 0, client_id, NULL) ) AS credit_card_sync_enabled_users, SUM(credit_card_sync_enabled) AS credit_card_sync_enabled, --credit_card_deleted COUNT(DISTINCT IF(credit_card_deleted > 0, client_id, NULL)) AS credit_card_deleted_users, SUM(credit_card_deleted) AS credit_card_deleted, --credit_card_modified COUNT(DISTINCT IF(credit_card_modified > 0, client_id, NULL)) AS credit_card_modified_users, SUM(credit_card_modified) AS credit_card_modified, --credit_card_saved COUNT(DISTINCT IF(credit_card_saved > 0, client_id, NULL)) AS credit_card_saved_users, SUM(credit_card_saved) AS credit_card_saved, --credit_card_saved_all COUNT(DISTINCT IF(credit_card_saved_all > 0, client_id, NULL)) AS credit_card_saved_all_users, SUM(credit_card_saved_all) AS credit_card_saved_all, /*Bookmark*/ --bookmarks_add COUNT(DISTINCT IF(bookmarks_add > 0, client_id, NULL)) AS bookmarks_add_users, SUM(bookmarks_add) AS bookmarks_add, -- Bookmarks Delete COUNT(DISTINCT IF(bookmarks_delete > 0, client_id, NULL)) AS bookmarks_delete_users, SUM(bookmarks_delete) AS bookmarks_delete, -- Bookmarks Edit COUNT(DISTINCT IF(bookmarks_edit > 0, client_id, NULL)) AS bookmarks_edit_users, SUM(bookmarks_edit) AS bookmarks_edit, -- Has Mobile Bookmarks COUNT(DISTINCT IF(has_mobile_bookmarks > 0, client_id, NULL)) AS has_mobile_bookmarks_users, SUM(has_mobile_bookmarks) AS has_mobile_bookmarks, -- Mobile Bookmarks Count COUNT(DISTINCT IF(mobile_bookmarks_count > 0, client_id, NULL)) AS mobile_bookmarks_count_users, SUM(mobile_bookmarks_count) AS mobile_bookmarks_count, -- Bookmarks Open COUNT(DISTINCT IF(bookmarks_open > 0, client_id, NULL)) AS bookmarks_open_users, SUM(bookmarks_open) AS bookmarks_open, -- Bookmarks View List COUNT(DISTINCT IF(bookmarks_view_list > 0, client_id, NULL)) AS bookmarks_view_list_users, SUM(bookmarks_view_list) AS bookmarks_view_list, /*FxA*/ --sync_create_account_pressed COUNT( DISTINCT IF(sync_create_account_pressed > 0, client_id, NULL) ) AS sync_create_account_pressed_users, SUM(sync_create_account_pressed) AS sync_create_account_pressed, --sync_open_tab COUNT(DISTINCT IF(sync_open_tab > 0, client_id, NULL)) AS sync_open_tab_users, SUM(sync_open_tab) AS sync_open_tab, --sync_sign_in_sync_pressed COUNT( DISTINCT IF(sync_sign_in_sync_pressed > 0, client_id, NULL) ) AS sync_sign_in_sync_pressed_users, SUM(sync_sign_in_sync_pressed) AS sync_sign_in_sync_pressed, /*Privacy*/ --tabs_private_tabs_quantity COUNT( DISTINCT IF(tabs_private_tabs_quantity > 0, client_id, NULL) ) AS tabs_private_tabs_quantity_users, SUM(tabs_private_tabs_quantity) AS tabs_private_tabs_quantity, -- Preferences Close Private Tabs COUNT( DISTINCT IF(preferences_close_private_tabs > 0, client_id, NULL) ) AS preferences_close_private_tabs_users, SUM(preferences_close_private_tabs) AS preferences_close_private_tabs, -- Tracking Protection Enabled COUNT( DISTINCT IF(tracking_protection_enabled > 0, client_id, NULL) ) AS tracking_protection_enabled_users, SUM(tracking_protection_enabled) AS tracking_protection_enabled, -- Tracking Protection Strict COUNT( DISTINCT IF(tracking_protection_strict_enabled > 0, client_id, NULL) ) AS tracking_protection_strict_users, SUM(tracking_protection_strict_enabled) AS tracking_protection_strict, /*Tab Count*/ --tabs_normal_tabs_quantity COUNT( DISTINCT IF(tabs_normal_tabs_quantity > 0, client_id, NULL) ) AS tabs_normal_tabs_quantity_users, SUM(tabs_normal_tabs_quantity) AS tabs_normal_tabs_quantity, --tabs_inactive_tabs_count COUNT( DISTINCT IF(tabs_inactive_tabs_count > 0, client_id, NULL) ) AS tabs_inactive_tabs_count_users, SUM(tabs_inactive_tabs_count) AS tabs_inactive_tabs_count, /*Default Browser*/ --app_opened_as_default_browser COUNT( DISTINCT IF(app_opened_as_default_browser > 0, client_id, NULL) ) AS app_opened_as_default_browser_users, SUM(app_opened_as_default_browser) AS app_opened_as_default_browser, -- settings_menu_set_as_default_browser_pressed COUNT( DISTINCT IF(settings_menu_set_as_default_browser_pressed > 0, client_id, NULL) ) AS settings_menu_set_as_default_browser_pressed_users, SUM(settings_menu_set_as_default_browser_pressed) AS settings_menu_set_as_default_browser_pressed, /*Notification*/ --preferences_sync_notifs COUNT(DISTINCT IF(preferences_sync_notifs > 0, client_id, NULL)) AS preferences_sync_notifs_users, SUM(preferences_sync_notifs) AS preferences_sync_notifs, -- preferences_tips_and_features_notifs COUNT( DISTINCT IF(preferences_tips_and_features_notifs > 0, client_id, NULL) ) AS preferences_tips_and_features_notifs_users, SUM(preferences_tips_and_features_notifs) AS preferences_tips_and_features_notifs, /*Customize Home*/ --preferences_jump_back_in COUNT( DISTINCT IF(preferences_jump_back_in > 0, client_id, NULL) ) AS preferences_jump_back_in_users, SUM(preferences_jump_back_in) AS preferences_jump_back_in, -- Preferences Recently Visited COUNT( DISTINCT IF(preferences_recently_visited > 0, client_id, NULL) ) AS preferences_recently_visited_users, SUM(preferences_recently_visited) AS preferences_recently_visited, -- Preferences Recently Saved COUNT( DISTINCT IF(preferences_recently_saved > 0, client_id, NULL) ) AS preferences_recently_saved_users, SUM(preferences_recently_saved) AS preferences_recently_saved, -- Preferences Pocket COUNT(DISTINCT IF(preferences_pocket > 0, client_id, NULL)) AS preferences_pocket_users, SUM(preferences_pocket) AS preferences_pocket, -- App Menu Customize Homepage COUNT( DISTINCT IF(app_menu_customize_homepage > 0, client_id, NULL) ) AS app_menu_customize_homepage_users, SUM(app_menu_customize_homepage) AS app_menu_customize_homepage, -- Firefox Home Page Customize Homepage Button COUNT( DISTINCT IF(firefox_home_page_customize_homepage_button > 0, client_id, NULL) ) AS firefox_home_page_customize_homepage_button_users, SUM(firefox_home_page_customize_homepage_button) AS firefox_home_page_customize_homepage_button, -- addresses_saved_all COUNT(DISTINCT IF(addresses_saved_all > 0, client_id, NULL)) AS addresses_saved_all_users, SUM(addresses_saved_all) AS addresses_saved_all FROM metric_ping_clients_feature_usage LEFT JOIN client_attribution USING (client_id) WHERE dau_date = DATE_SUB(@submission_date, INTERVAL 4 DAY) GROUP BY submission_date, metric_date, channel, country, adjust_network, is_default_browser