definitions/fenix.toml (699 lines of code) (raw):
[metrics]
[metrics.uri_count]
data_source = "baseline"
select_expression = '{{agg_sum("metrics.counter.events_normal_and_private_uri_count")}}'
friendly_name = "URIs visited"
description = "Counts the number of URIs each client visited"
[metrics.active_hours]
select_expression = "COALESCE(SUM(metrics.timespan.glean_baseline_duration.value), 0) / 3600.0"
data_source = "baseline"
friendly_name = "Active Hours"
description = "Total time Firefox was active"
[metrics.days_of_use]
friendly_name = "Days of use"
description = "The number of days in an observation window that clients used the browser."
select_expression = "COUNT(DISTINCT DATE(submission_timestamp))"
data_source = "baseline"
[metrics.daily_active_users]
data_source = "baseline_v2"
select_expression = "COUNT(DISTINCT CASE WHEN LOWER(metadata.isp.name) != 'browserstack' THEN client_info.client_id ELSE NULL END)"
type = "scalar"
friendly_name = "DAU"
description = """
The number of unique clients that we received a baseline ping from each day, excluding
pings originating from BrowserStack. To be comparable to DAU used for KPI tracking,
this metric needs to be aggregated by `submission_date`. If the metric is NOT
aggregated by `submission_date`, the metric is similar to a "days of use" metric. For more details, refer to
[the DAU description in the Mozilla Data Documentation](https://docs.telemetry.mozilla.org/concepts/terminology.html#dau).
For questions, please contact bochocki@mozilla.com or firefox-kpi@mozilla.com.
"""
category = "KPI"
owner = ["bochocki@mozilla.com", "firefox-kpi@mozilla.com"]
deprecated = true
[metrics.daily_active_users_v2]
data_source = "fenix_active_users_aggregates_view"
select_expression = "SUM(dau)"
type = "scalar"
friendly_name = "Fenix DAU"
description = """
This is the official DAU reporting definition. The logic is
[detailed on the Confluence DAU page](https://mozilla-hub.atlassian.net/wiki/spaces/DATA/pages/314704478/Daily+Active+Users+DAU+Metric)
and is automatically cross-checked, actively monitored, and change controlled.
Whenever possible, this is the preferred DAU reporting definition to use for Fenix.
This metric needs to be aggregated by `submission_date`. If it is not aggregated by `submission_date`,
it is similar to a "days of use" metric, and not DAU.
For more information, refer to [the DAU description in Confluence](https://mozilla-hub.atlassian.net/wiki/spaces/DATA/pages/314704478/Daily+Active+Users+DAU+Metric).
For questions please contact bochocki@mozilla.com or firefox-kpi@mozilla.com.
"""
owner = ["bochocki@mozilla.com", "firefox-kpi@mozilla.com"]
deprecated = false
[metrics.client_level_daily_active_users_v1]
data_source = "baseline_v2"
select_expression = "COUNT(DISTINCT CASE WHEN LOWER(metadata.isp.name) != 'browserstack' THEN client_info.client_id ELSE NULL END)"
type = "scalar"
friendly_name = "Fenix Client-Level DAU"
description = """
This metric reports DAU values similar (but not necessarily identical)
to the [official DAU reporting definition](https://mozilla.github.io/metric-hub/metrics/fenix/#daily_active_users_v2).
It's generally preferable to use the official DAU reporting definition when possible; this metric
exists only for cases where reporting `client_id` is required (e.g. for experiments). This metric
needs to be aggregated by `submission_date`. If it is not aggregated by `submission_date`, it is
similar to a "days of use" metric, and not DAU.
For more information, refer to [the DAU description in Confluence](https://mozilla-hub.atlassian.net/wiki/spaces/DATA/pages/314704478/Daily+Active+Users+DAU+Metric).
For questions please contact bochocki@mozilla.com or firefox-kpi@mozilla.com.
"""
owner = ["bochocki@mozilla.com", "firefox-kpi@mozilla.com"]
deprecated = true
[metrics.client_level_daily_active_users_v2]
data_source = "baseline_v2"
select_expression = """
COUNT(DISTINCT CASE WHEN metrics.timespan.glean_baseline_duration.value > 0
AND LOWER(metadata.isp.name) != 'browserstack'
THEN client_info.client_id
ELSE NULL END)
"""
type = "scalar"
friendly_name = "Fenix Client-Level DAU"
description = """
This metric reports DAU values similar (but not necessarily identical)
to the [official DAU reporting definition](https://mozilla.github.io/metric-hub/metrics/fenix/#daily_active_users_v2).
It's generally preferable to use the official DAU reporting definition when possible; this metric
exists only for cases where reporting `client_id` is required (e.g. for experiments). This metric
needs to be aggregated by `submission_date`. If it is not aggregated by `submission_date`, it is
similar to a "days of use" metric, and not DAU.
For more information, refer to [the DAU description in Confluence](https://mozilla-hub.atlassian.net/wiki/spaces/DATA/pages/314704478/Daily+Active+Users+DAU+Metric).
For questions please contact bochocki@mozilla.com or firefox-kpi@mozilla.com.
"""
owner = ["bochocki@mozilla.com", "firefox-kpi@mozilla.com"]
deprecated = true
[metrics.client_level_daily_active_users_v3]
friendly_name = "Fenix Client-Level DAU"
data_source = "fenix_active_users_view"
select_expression = """COUNTIF(is_dau)"""
type = "scalar"
description = """
Client-level DAU. The logic is
[detailed on the Confluence DAU page](https://mozilla-hub.atlassian.net/wiki/spaces/DATA/pages/314704478/Daily+Active+Users+DAU+Metric)
and is automatically cross-checked, actively monitored, and change controlled.
This metric needs to be aggregated by `submission_date`. If it is not aggregated by `submission_date`, it is
similar to a "days of use" metric, and not DAU.
"""
owner = ["bochocki@mozilla.com", "firefox-kpi@mozilla.com"]
deprecated = false
[metrics.user_reports_site_issue_count]
data_source = "events"
select_expression = """
COUNTIF(event.name = 'browser_menu_action' AND
mozfun.map.get_key(event.extra, 'item') = 'report_site_issue')
"""
friendly_name = "Site issues reported"
description = "Counts the number of times clients reported an issue with a site."
[metrics.user_reload_count]
data_source = "events"
select_expression = """
COUNTIF(event.name = 'browser_menu_action' AND
mozfun.map.get_key(event.extra, 'item') = 'reload')
"""
friendly_name = "Pages reloaded"
description = "Counts the number of times a client reloaded a page."
bigger_is_better = false
[metrics.baseline_ping_count]
data_source = "baseline"
select_expression = "COUNT(document_id)"
friendly_name = "Baseline pings"
description = "Counts the number of `baseline` pings received from each client."
[metrics.metric_ping_count]
data_source = "metrics"
select_expression = "COUNT(document_id)"
friendly_name = "Metrics pings"
description = "Counts the number of `metrics` pings received from each client."
[metrics.first_run_date]
data_source = "baseline"
select_expression = "MIN(client_info.first_run_date)"
friendly_name = "First run date"
description = "The earliest first-run date reported by each client."
[metrics.performance_pageload_load_time]
data_source = "metrics"
select_expression = "ARRAY_AGG(metrics.timing_distribution.performance_pageload_load_time IGNORE NULLS)"
friendly_name = "Pageload Load Time"
description = "Time in milliseconds from navigationStart to loadEventStart for the foreground http or https root content document."
category = "performance"
type = "histogram"
[metrics.performance_pageload_load_time_responsestart]
data_source = "metrics"
select_expression = "ARRAY_AGG(metrics.timing_distribution.performance_pageload_load_time_responsestart IGNORE NULLS)"
friendly_name = "Pageload Load Time Response Start"
description = "Time in milliseconds from responseStart to loadEventStart for the foreground http or https root content document."
category = "performance"
type = "histogram"
[metrics.performance_page_non_blank_paint]
data_source = "metrics"
select_expression = "ARRAY_AGG(metrics.timing_distribution.performance_page_non_blank_paint IGNORE NULLS)"
friendly_name = "Page Non Blank Paint"
description = "The time between navigationStart and the first non-blank paint of a foreground root content document, in milliseconds."
category = "performance"
type = "histogram"
[metrics.performance_pageload_req_anim_frame_callback]
data_source = "metrics"
select_expression = "ARRAY_AGG(metrics.timing_distribution.performance_pageload_req_anim_frame_callback IGNORE NULLS)"
friendly_name = "Pageload Load Req Animation Frame Callback"
description = "Time spent in milliseconds calling all request animation frame callbacks for a document before it has reached readystate complete."
category = "performance"
type = "histogram"
[metrics.performance_pageload_dcl]
data_source = "metrics"
select_expression = "ARRAY_AGG(metrics.timing_distribution.performance_pageload_dcl IGNORE NULLS)"
friendly_name = "Pageload DCL"
description = "Time in milliseconds from navigationStart to domContentLoaded for the foreground http or https root content document."
category = "performance"
type = "histogram"
[metrics.performance_pageload_dcl_responsestart]
data_source = "metrics"
select_expression = "ARRAY_AGG(metrics.timing_distribution.performance_pageload_dcl_responsestart IGNORE NULLS)"
friendly_name = "Pageload DCL Response Start"
description = "Time in milliseconds from responseStart to domContentLoaded for the foreground http or https root content document."
category = "performance"
type = "histogram"
[metrics.performance_pageload_fcp]
data_source = "metrics"
select_expression = "ARRAY_AGG(metrics.timing_distribution.performance_pageload_fcp IGNORE NULLS)"
friendly_name = "Pageload FCP"
description = "The time between navigationStart and the first contentful paint of a foreground http or https root content document, in milliseconds. The contentful paint timestamp is taken during display list building and does not include rasterization or compositing of that paint."
category = "performance"
type = "histogram"
[metrics.performance_pageload_fcp_responsestart]
data_source = "metrics"
select_expression = "ARRAY_AGG(metrics.timing_distribution.performance_pageload_fcp_responsestart IGNORE NULLS)"
friendly_name = "Pageload FCP Response Start"
description = "The time between responseStart and the first contentful paint of a foreground http or https root content document, in milliseconds. The contentful paint timestamp is taken during display list building and does not include rasterization or compositing of that paint."
category = "performance"
type = "histogram"
[metrics.perf_startup_cold_main_app_to_first_frame]
data_source = "metrics"
select_expression = "ARRAY_AGG(metrics.timing_distribution.perf_startup_cold_main_app_to_first_frame IGNORE NULLS)"
friendly_name = "Startup Cold Main App to First Frame"
description = "The duration from `*Application`'s initializer to the first Android frame\nbeing drawn in a [COLD MAIN start\nup](https://wiki.mozilla.org/index.php?title=Performance/Fenix/Glossary)."
category = "performance"
type = "histogram"
[metrics.perf_startup_cold_view_app_to_first_frame]
data_source = "metrics"
select_expression = "ARRAY_AGG(metrics.timing_distribution.perf_startup_cold_view_app_to_first_frame IGNORE NULLS)"
friendly_name = "Startup Cold View App to First Frame"
description = "The duration from `*Application`'s initializer to the first Android frame\nbeing drawn in a [COLD VIEW start\nup](https://wiki.mozilla.org/index.php?title=Performance/Fenix/Glossary)."
category = "performance"
type = "histogram"
[metrics.storage_stats_app_bytes]
data_source = "metrics"
select_expression = "ARRAY_AGG(metrics.memory_distribution.storage_stats_app_bytes IGNORE NULLS)"
friendly_name = "App Byte Size"
description = "The size of the app's APK and related files as installed: this is expected\nto be larger than download size."
category = "performance"
type = "histogram"
[metrics.storage_stats_cache_bytes]
data_source = "metrics"
select_expression = "ARRAY_AGG(metrics.memory_distribution.storage_stats_cache_bytes IGNORE NULLS)"
friendly_name = "Cache Byte Size"
description = "The size of all cached data in the app."
category = "performance"
type = "histogram"
[metrics.storage_stats_data_dir_bytes]
data_source = "metrics"
select_expression = "ARRAY_AGG(metrics.memory_distribution.storage_stats_data_dir_bytes IGNORE NULLS)"
friendly_name = "Data Dir Byte Size"
description = "The size of all data minus `cache_bytes`."
category = "performance"
type = "histogram"
#### search metrics
[metrics.tagged_sap_searches]
select_expression = "{{agg_sum('tagged_sap')}}"
data_source = "mobile_search_clients_engines_sources_daily"
friendly_name = "Tagged SAP Searches"
description = "Total number of tagged SAP searches. This metric is deprecated, use tagged_search_count instead"
deprecated = true
[metrics.organic_search_count]
friendly_name = "Organic searches"
description = """
Counts organic searches, which are searches that are _not_ performed
through a Firefox SAP and which are not monetizable.
Learn more in the
[search data documentation](https://docs.telemetry.mozilla.org/datasets/search.html).
"""
select_expression = "{{agg_sum('organic')}}"
data_source = "mobile_search_clients_engines_sources_daily"
category = "search"
type = "scalar"
owner = "xluo-all@mozilla.com"
[metrics.ad_click_organic]
friendly_name = "Organic Ad Click Count"
description = "Total number of Organic Ad Click Counts"
select_expression = "{{agg_sum('ad_click_organic')}}"
data_source = "mobile_search_clients_engines_sources_daily"
category = "search"
type = "scalar"
owner = "xluo-all@mozilla.com"
[metrics.searches_with_ads_organic]
friendly_name = "Organic Search With Ads Count"
description = "Total number of Organic Search With Ads Counts"
select_expression = "{{agg_sum('search_with_ads_organic')}}"
data_source = "mobile_search_clients_engines_sources_daily"
category = "search"
type = "scalar"
owner = "xluo-all@mozilla.com"
[metrics.search_count]
friendly_name = "SAP searches"
description = """
Counts the number of searches a user performed through Firefox's
Search Access Points.
Learn more in the
[search data documentation](https://docs.telemetry.mozilla.org/datasets/search.html).
"""
select_expression = "{{agg_sum('search_count')}}"
data_source = "mobile_search_clients_engines_sources_daily"
category = "search"
type = "scalar"
owner = "xluo-all@mozilla.com"
[metrics.searches_with_ads]
friendly_name = "Search result pages with ads"
description = """
Counts search result pages served with advertising.
Users may not actually see these ads thanks to e.g. ad-blockers.
Learn more in the
[search analysis documentation](https://mozilla-private.report/search-analysis-docs/book/in_content_searches.html).
"""
category = "search"
type = "scalar"
select_expression = "{{agg_sum('search_with_ads')}}"
data_source = "mobile_search_clients_engines_sources_daily"
owner = "xluo-all@mozilla.com"
[metrics.ad_clicks]
select_expression = "{{agg_sum('ad_click')}}"
data_source = "mobile_search_clients_engines_sources_daily"
friendly_name = "Ad clicks"
description = """
Counts clicks on ads on search engine result pages with a Mozilla
partner tag.
"""
category = "search"
type = "scalar"
owner = "xluo-all@mozilla.com"
[metrics.tagged_search_count]
select_expression = "{{agg_sum('tagged_sap')}}"
data_source = "mobile_search_clients_engines_sources_daily"
friendly_name = "Tagged SAP searches"
description = """
Counts the number of searches a user performed through Firefox's
Search Access Points that were submitted with a partner code
and were potentially revenue-generating.
Learn more in the
[search data documentation](https://docs.telemetry.mozilla.org/datasets/search.html).
"""
category = "search"
type = "scalar"
owner = "xluo-all@mozilla.com"
[metrics.tagged_follow_on]
select_expression = "{{agg_sum('tagged_follow_on')}}"
data_source = "mobile_search_clients_engines_sources_daily"
friendly_name = "Tagged follow-on searches"
description = """
Counts the number of follow-on searches with a Mozilla partner tag.
These are additional searches that users performed from a search engine
results page after executing a tagged search through a SAP.
Learn more in the
[search data documentation](https://docs.telemetry.mozilla.org/datasets/search.html).
"""
category = "search"
type = "scalar"
owner = "xluo-all@mozilla.com"
### Sponsored Tiles metrics
[metrics.spoc_tiles_impressions]
select_expression = """
COALESCE(COUNTIF(
event.category = 'top_sites'
AND event.name = 'contile_impression'
),0)
"""
data_source = "events"
friendly_name = "Sponsored Tiles Impressions"
description = "Number of times Contile Sponsored Tiles are shown."
owner = "xluo-all@mozilla.com"
[metrics.spoc_tiles_clicks]
select_expression = """
COALESCE(COUNTIF(
event.category = 'top_sites'
AND event.name = 'contile_click'
),0)
"""
data_source = "events"
friendly_name = "Sponsored Tiles Clicks"
description = "Number of times user clicked a Contile Sponsored Tile."
owner = "xluo-all@mozilla.com"
[metrics.spoc_tiles_disable_rate]
select_expression = """
COALESCE(MAX(
CAST(
metrics.boolean.customize_home_contile AS int )
),0)
"""
data_source = "metrics"
bigger_is_better = false
friendly_name = "Sponsored Tiles Disable Rate"
description = "Fraction of users who disable Contile Sponsored Tiles"
owner = "xluo-all@mozilla.com"
[metrics.spoc_tiles_preference_toggled]
select_expression = """
COALESCE(SUM(CASE WHEN
event.category = 'customize_home'
AND event.name = 'preference_toggled'
AND `mozfun.map.get_key`(event.extra, 'preference_key') = 'contile'
THEN 1 ELSE 0 END
),0)
"""
data_source = "events"
bigger_is_better = false
friendly_name = "Sponsored Tiles Preference Toggled"
description = "Number of times Contile Sponsored Tiles setting is flipped."
owner = "xluo-all@mozilla.com"
[metrics.new_profile_activation]
select_expression = "COUNTIF(is_activated)"
data_source = "new_profile_activation"
friendly_name = "New Profile Activation"
description = "A new profile is counted as activated one week after creation if it meets the following conditions: 1) at least 3 days of use during first week 2) at least one search between days 4-7."
owner = "vsabino@mozilla.com"
[metrics.fxa_sign_in]
select_expression = """MAX(IF(metrics.boolean.preferences_signed_in_sync, 1, 0))"""
data_source = "metrics"
friendly_name = "Firefox Accounts Signed In"
description = "Whether a user was signed into FxA at any point in the period"
owner = "loines@mozilla.com"
[metrics.turn_on_notifications_ctr_onboarding]
select_expression = "COALESCE(SUM(turn_on_notifications_flag))"
data_source = "special_onboarding_events_v2"
friendly_name = "Turn on Notification Click"
description = "This metric looks at proportion of all new profiles that were exposed to the turn on notification card and clicked the action during on-boarding."
owner = "rbaffourawuah@mozilla.com"
[metrics.set_to_default_ctr_onboarding]
select_expression = "COALESCE(SUM(set_to_default_flag))"
data_source = "special_onboarding_events_v2"
friendly_name = "Set to Default Click"
description = "This metric looks at proportion of all new profiles that were exposed to the set to default card and clicked the action during on-boarding."
owner = "rbaffourawuah@mozilla.com"
[metrics.sign_in_ctr_onboarding]
select_expression = "COALESCE(SUM(sign_in_flag))"
data_source = "special_onboarding_events_v2"
friendly_name = "Sign in Click"
description = "This metric looks at proportion of all new profiles that were exposed to the sign-in card and clicked the action during on-boarding."
owner = "rbaffourawuah@mozilla.com"
[metrics.at_least_1_cta_ctr_onboarding]
select_expression = "COALESCE(SUM(at_least_1_cta))"
data_source = "special_onboarding_events_v2"
friendly_name = "Clicked at least one CTA"
description = "This metric looks at proportion of all new profiles that were exposed to onboarding cards and clicked at least one action during on-boarding."
owner = "rbaffourawuah@mozilla.com"
[metrics.bookmarks_add_v1]
select_expression = "SUM(bookmarks_add)"
data_source = "feature_usage_metrics_v1"
friendly_name = "Added Bookmarks"
description = "Number of Added Bookmarks"
owner = "rzhao@mozilla.com"
[metrics.bookmarks_delete_v1]
select_expression = "SUM(bookmarks_delete)"
data_source = "feature_usage_metrics_v1"
friendly_name = "Deleted Bookmarks"
description = "Number of Deleted Bookmarks"
owner = "rzhao@mozilla.com"
[metrics.bookmarks_add_users_v1]
select_expression = "SUM(bookmarks_add_users)"
data_source = "feature_usage_metrics_v1"
friendly_name = "Added Bookmarks Users"
description = "Number of Users that Added Bookmarks"
owner = "rzhao@mozilla.com"
[metrics.bookmarks_delete_users_v1]
select_expression = "SUM(bookmarks_delete_users)"
data_source = "feature_usage_metrics_v1"
friendly_name = "Deleted Bookmarks Users"
description = "Number of Users that Deleted Bookmarks"
owner = "rzhao@mozilla.com"
[metrics.engagement_rate_v1]
friendly_name = "Fenix Engagement Rate"
data_source = "fenix_engagement_view"
select_expression = "SUM(dau) / SUM(mau)"
type = "scalar"
description = """
The Engagement Rate is calculated as the ratio between DAU and MAU. For each day, we use the single-day DAU number and divide
it by the MAU corresponding to the 28-day period ending on that day. For OKR reporting, we then calculate a
28-day moving average of this number. More information is provided on the
[New Profiles, Retention and Engagement Rate Confluence Page](https://mozilla-hub.atlassian.net/wiki/spaces/DATA/pages/814481685/Firefox+New+Profiles+Retention+and+Engagement#Engagement-Rate).
"""
owner = ["vsabino@mozilla.com", "firefox-kpi@mozilla.com"]
deprecated = false
[metrics.retention_rate_v1]
friendly_name = "Fenix Retention Rate"
data_source = "fenix_retention_view"
select_expression = "SUM(retained_week_4) / SUM(active_metric_date)"
type = "scalar"
description = """
The Retention Rate is calculated as the proportion of clients that are active on the 4th week after the metric date.
"""
owner = ["vsabino@mozilla.com", "firefox-kpi@mozilla.com"]
deprecated = false
[metrics.new_profile_retention_rate_v1]
friendly_name = "Fenix New Proflie Retention Rate"
data_source = "fenix_retention_view"
select_expression = "SUM(retained_week_4_new_profiles) / SUM(new_profiles_metric_date)"
type = "scalar"
description = """
The New Profile Retention Rate is calculated as the proportion of new profiles that are active on the 4th week after the metric date.
More information is provided on the
[New Profiles, Retention and Engagement Rate Confluence Page](https://mozilla-hub.atlassian.net/wiki/spaces/DATA/pages/814481685/Firefox+New+Profiles+Retention+and+Engagement#New-Profile-Retention).
"""
owner = ["vsabino@mozilla.com", "firefox-kpi@mozilla.com"]
deprecated = false
[data_sources]
[data_sources.fenix_active_users_aggregates_view]
from_expression = """(
SELECT *
FROM `moz-fx-data-shared-prod.telemetry.active_users_aggregates`
WHERE app_name = 'Fenix'
)"""
friendly_name = "Active Users Aggregates"
description = "Active Users Aggregates, filtered on Fenix"
submission_date_column = "submission_date"
client_id_column = "NULL" # this table doesn't include client_id, and we don't need it for calculating DAU
[data_sources.baseline]
from_expression = """(
SELECT
p.*,
DATE(p.submission_timestamp) AS submission_date
FROM `moz-fx-data-shared-prod.{dataset}.baseline` p
)"""
client_id_column = "client_info.client_id"
experiments_column_type = "glean"
default_dataset = "org_mozilla_firefox"
friendly_name = "Baseline"
description = "Baseline Ping"
build_id_column = "REPLACE(CAST(DATE(mozfun.norm.fenix_build_to_datetime(client_info.app_build)) AS STRING), '-', '')"
[data_sources.baseline_v2]
from_expression = """(
SELECT
p.*,
DATE(p.submission_timestamp) AS submission_date
FROM `moz-fx-data-shared-prod.{dataset}.baseline` p
)"""
client_id_column = "client_info.client_id"
experiments_column_type = "glean"
submission_date_column = "submission_date"
default_dataset = "fenix"
friendly_name = "Baseline"
description = "Baseline Ping"
build_id_column = "REPLACE(CAST(DATE(mozfun.norm.fenix_build_to_datetime(client_info.app_build)) AS STRING), '-', '')"
[data_sources.events]
from_expression = """(
SELECT
p.* EXCEPT (events),
DATE(p.submission_timestamp) AS submission_date,
event
FROM
`moz-fx-data-shared-prod.{dataset}.events` p
CROSS JOIN
UNNEST(p.events) AS event
)"""
client_id_column = "client_info.client_id"
experiments_column_type = "glean"
default_dataset = "org_mozilla_firefox"
friendly_name = "Events"
description = "Events Ping"
build_id_column = "REPLACE(CAST(DATE(mozfun.norm.fenix_build_to_datetime(client_info.app_build)) AS STRING), '-', '')"
[data_sources.metrics]
from_expression = """(
SELECT
p.*,
DATE(p.submission_timestamp) AS submission_date
FROM `moz-fx-data-shared-prod.{dataset}.metrics` p
)"""
client_id_column = "client_info.client_id"
experiments_column_type = "glean"
default_dataset = "org_mozilla_firefox"
friendly_name = "Metrics"
description = "Metrics Ping"
build_id_column = "REPLACE(CAST(DATE(mozfun.norm.fenix_build_to_datetime(client_info.app_build)) AS STRING), '-', '')"
[data_sources.mobile_search_clients_engines_sources_daily]
from_expression = """(
SELECT *
FROM `mozdata.search.mobile_search_clients_engines_sources_daily`
WHERE normalized_app_name_os = 'Firefox Android'
)"""
experiments_column_type = "simple"
client_id_column = "client_id"
submission_date_column = "submission_date"
[data_sources.new_profile_activation]
from_expression = "`moz-fx-data-shared-prod.fenix.new_profile_activation_clients`"
experiments_column_type = "none"
[data_sources.special_onboarding_events]
from_expression = """(
SELECT
expo.submission_date
, expo.client_id
, case when (conv.set_to_default >= 1 AND expo.set_to_default_card >= 1) then 1
when (coalesce(conv.set_to_default, 0) = 0 AND expo.set_to_default_card >= 1) then 0 else null end as set_to_default_flag
, case when (conv.turn_on_notifications >= 1 AND expo.turn_on_notifications_card >= 1) then 1
when (coalesce(conv.turn_on_notifications, 0) = 0 AND expo.turn_on_notifications_card >= 1) then 0 else null end as turn_on_notifications_flag
, case when (conv.sign_in >= 1 AND expo.sign_in_card >= 1) then 1
when (coalesce(conv.sign_in,0) = 0 AND expo.sign_in_card >= 1) then 0 else null end as sign_in_flag
, case when (conv.set_to_default >= 1 AND expo.set_to_default_card >= 1) OR (conv.turn_on_notifications >= 1 AND expo.turn_on_notifications_card >= 1) OR (conv.sign_in >= 1 AND expo.sign_in_card >= 1)then 1
when (coalesce(conv.set_to_default, 0) = 0 AND coalesce(conv.turn_on_notifications, 0) = 0 AND coalesce(conv.sign_in,0) = 0) AND (set_to_default_card >= 1 OR turn_on_notifications_card >= 1 OR sign_in_card >= 1) then 0 else null end as at_least_1_cta
FROM (
SELECT
client_info.client_id as client_id
, min(DATE(submission_timestamp)) as submission_date
, count(case when event.name = "set_to_default_card" then DATE(submission_timestamp) END) as set_to_default_card
, count(case when event.name = "turn_on_notifications_card" then DATE(submission_timestamp) END) as turn_on_notifications_card
, count(case when event.name = "sign_in_card" then DATE(submission_timestamp) END) as sign_in_card
FROM
`mozdata.org_mozilla_firefox.events` tm
CROSS JOIN
UNNEST(events) AS event
CROSS JOIN
UNNEST(event.extra) AS ext
WHERE event.category = "onboarding" AND ext.value ="impression" AND event.name in ("set_to_default_card", "turn_on_notifications_card", "sign_in_card")
AND DATE(submission_timestamp) >= "2023-01-01"
GROUP BY 1
) expo
LEFT JOIN (
SELECT
client_info.client_id as client_id
, count(case when event.name = "set_to_default" then DATE(submission_timestamp) END) as set_to_default
, count(case when event.name = "turn_on_notifications" then DATE(submission_timestamp) END) as turn_on_notifications
, count(case when event.name = "sign_in" then DATE(submission_timestamp) END) as sign_in
FROM
`mozdata.org_mozilla_firefox.events` tm
CROSS JOIN
UNNEST(events) AS event
CROSS JOIN
UNNEST(event.extra) AS ext
WHERE event.category = "onboarding" AND ext.key ="action" AND event.name in ("set_to_default", "turn_on_notifications", "sign_in")
AND DATE(submission_timestamp) >= "2023-01-01"
GROUP BY 1
) conv
ON expo.client_id = conv.client_id
GROUP BY 1, 2, 3, 4, 5, 6
)
"""
experiments_column_type = "none"
[data_sources.special_onboarding_events_v2]
from_expression = """(
SELECT
expo.submission_date
, expo.client_id
, case when (conv.set_to_default >= 1 AND expo.set_to_default_card >= 1) then 1
when (coalesce(conv.set_to_default, 0) = 0 AND expo.set_to_default_card >= 1) then 0 else null end as set_to_default_flag
, case when (conv.turn_on_notifications >= 1 AND expo.turn_on_notifications_card >= 1) then 1
when (coalesce(conv.turn_on_notifications, 0) = 0 AND expo.turn_on_notifications_card >= 1) then 0 else null end as turn_on_notifications_flag
, case when (conv.sign_in >= 1 AND expo.sign_in_card >= 1) then 1
when (coalesce(conv.sign_in,0) = 0 AND expo.sign_in_card >= 1) then 0 else null end as sign_in_flag
, case when (conv.set_to_default >= 1 AND expo.set_to_default_card >= 1) OR (conv.turn_on_notifications >= 1 AND expo.turn_on_notifications_card >= 1) OR (conv.sign_in >= 1 AND expo.sign_in_card >= 1)then 1
when (coalesce(conv.set_to_default, 0) = 0 AND coalesce(conv.turn_on_notifications, 0) = 0 AND coalesce(conv.sign_in,0) = 0) AND (set_to_default_card >= 1 OR turn_on_notifications_card >= 1 OR sign_in_card >= 1) then 0 else null end as at_least_1_cta
FROM (
SELECT
client_id as client_id
, min(DATE(submission_timestamp)) as submission_date
, count(case when event_name = "set_to_default_card" then DATE(submission_timestamp) END) as set_to_default_card
, count(case when event_name = "turn_on_notifications_card" then DATE(submission_timestamp) END) as turn_on_notifications_card
, count(case when event_name = "sign_in_card" then DATE(submission_timestamp) END) as sign_in_card
FROM
`mozdata.org_mozilla_firefox.events_stream` tm
WHERE event_category = "onboarding"
AND JSON_VALUE(event_extra, "$.action") = 'impression'
AND event_name in ("set_to_default_card", "turn_on_notifications_card", "sign_in_card")
AND DATE(submission_timestamp) >= "2023-01-01"
GROUP BY 1
) expo
LEFT JOIN (
SELECT
client_id as client_id
, count(case when event_name = "set_to_default" then DATE(submission_timestamp) END) as set_to_default
, count(case when event_name = "turn_on_notifications" then DATE(submission_timestamp) END) as turn_on_notifications
, count(case when event_name = "sign_in" then DATE(submission_timestamp) END) as sign_in
FROM
`mozdata.org_mozilla_firefox.events_stream` tm
WHERE event_category = "onboarding"
AND JSON_QUERY(event_extra, "$.action") IS NOT NULL
AND event_name in ("set_to_default", "turn_on_notifications", "sign_in")
AND DATE(submission_timestamp) >= "2023-01-01"
GROUP BY 1
) conv
ON expo.client_id = conv.client_id
GROUP BY 1, 2, 3, 4, 5, 6
)
"""
experiments_column_type = "none"
[data_sources.feature_usage_metrics_v1]
from_expression = """(
SELECT
*
FROM `mozdata.fenix.feature_usage_metrics` p
LEFT JOIN (
SELECT
submission_date,
SUM(dau) AS dau
FROM `mozdata.telemetry.active_users_aggregates`
WHERE app_name = 'Fenix'
GROUP BY submission_date
)
USING(submission_date)
)"""
client_id_column = "NULL"
friendly_name = "Feature Usage Metrics"
description = "Fenix feature usage metrics"
[data_sources.fenix_engagement_view]
from_expression = """(
SELECT *
FROM `moz-fx-data-shared-prod.fenix.engagement`
WHERE is_mobile
)"""
submission_date_column = "submission_date"
description = "Aggregated DAU, WAU, and MAU by different attributes for engagement ratio calculation."
friendly_name = "Fenix Engagement"
client_id_column = "NULL"
columns_as_dimensions = true
[data_sources.fenix_retention_view]
from_expression = """(
SELECT *
FROM `moz-fx-data-shared-prod.fenix.retention`
WHERE is_mobile
)"""
submission_date_column = "metric_date"
description = "Aggregated 4th Week Retention Outcomes of Fenix New and Existing Users."
friendly_name = "Fenix Retention"
client_id_column = "NULL"
columns_as_dimensions = true
[data_sources.fenix_active_users_view]
friendly_name = "Fenix Active Users"
description = "Client-level table that indicates whether a client meets 'active user' criteria on a given submission_date."
from_expression = """(
SELECT *
FROM `moz-fx-data-shared-prod.fenix.active_users`
WHERE is_mobile
)"""
submission_date_column = "submission_date"
client_id_column = "client_id"
deprecated = false