duet/dashboards/mobile_android_country.dashboard.lookml (761 lines of code) (raw):

- dashboard: android_mobile_acquisition_funnel title: Android Mobile Acquisition Funnel layout: newspaper preferred_viewer: dashboards-next elements: - name: Mobile Acquisition Funnel for Android type: text title_text: Mobile Acquisition Funnel for Android subtitle_text: '' body_text: |- The purpose of this dashboard is to provide insight into the mobile acquisition funnel for some of our Android products, namely Fenix and Focus. It does not behave like a normal funnel due to the fact that the aggregated data originates from multiple sources, and it's important to understand each source and the caveats that may come with the data. Google Play Store data informs the first 2 steps of the funnel. These first two steps provide insight primarily into the new user visitor group in the Play Store app. A new user is one that does not have Firefox installed on any of their Google devices. Our internal telemetry is responsible for the final 2 steps, which provide acquisition (first seen) and activation counts. A new profile is activated if seen 5 out of 7 days in the first week. Both of these steps may be lower than step 2 primarily due to the fact that metrics are aggregated and counted differently between Google Play Store and Mozilla's internal telemetry. row: 0 col: 0 width: 12 height: 7 - title: Android Funnel Per Day name: Android Funnel Per Day model: duet explore: mobile_android_country type: looker_line fields: [mobile_android_country.submission_date, mobile_android_country.first_time_visitor_count, mobile_android_country.event_installs, mobile_android_country.first_seen, mobile_android_country.activated] fill_fields: [mobile_android_country.submission_date] sorts: [mobile_android_country.first_seen desc] limit: 500 x_axis_gridlines: false y_axis_gridlines: true show_view_names: false show_y_axis_labels: true show_y_axis_ticks: true y_axis_tick_density: default y_axis_tick_density_custom: 5 show_x_axis_label: true show_x_axis_ticks: true y_axis_scale_mode: linear x_axis_reversed: false y_axis_reversed: false plot_size_by_field: false trellis: '' stacking: '' limit_displayed_rows: false legend_position: center point_style: none show_value_labels: false label_density: 25 x_axis_scale: auto y_axis_combined: true show_null_points: true interpolation: linear defaults_version: 1 listen: History Days: mobile_android_country.history_days App ID: mobile_android_country.app_id Bucket: country_buckets.bucket row: 50 col: 0 width: 24 height: 8 - title: Last Play Store Update name: Last Play Store Update model: duet explore: mobile_android_country type: single_value fields: [mobile_android_country.play_store_updated] fill_fields: [mobile_android_country.play_store_updated] sorts: [mobile_android_country.play_store_updated desc] limit: 500 dynamic_fields: [{measure: count_of_latest_date, based_on: mobile_android_country.latest_date, expression: '', label: Count of Latest Date, type: count_distinct, _kind_hint: measure, _type_hint: number}] custom_color_enabled: true show_single_value_title: true show_comparison: false comparison_type: value comparison_reverse_colors: false show_comparison_label: true enable_conditional_formatting: false conditional_formatting_include_totals: false conditional_formatting_include_nulls: false single_value_title: Last Play Store Update x_axis_gridlines: false y_axis_gridlines: true show_view_names: false show_y_axis_labels: true show_y_axis_ticks: true y_axis_tick_density: default y_axis_tick_density_custom: 5 show_x_axis_label: true show_x_axis_ticks: true y_axis_scale_mode: linear x_axis_reversed: false y_axis_reversed: false plot_size_by_field: false trellis: '' stacking: '' limit_displayed_rows: false legend_position: center point_style: none show_value_labels: false label_density: 25 x_axis_scale: auto y_axis_combined: true show_null_points: true interpolation: linear defaults_version: 1 series_types: {} note_state: collapsed note_display: hover note_text: This date may be delayed because Google does not make Play Store data available every day (usually every 7-14 days). listen: History Days: mobile_android_country.history_days App ID: mobile_android_country.app_id Bucket: country_buckets.bucket row: 8 col: 12 width: 6 height: 2 - title: Funnel Overview name: Funnel Overview model: duet explore: mobile_android_country type: looker_column fields: [mobile_android_country.first_time_visitor_count, mobile_android_country.event_installs, mobile_android_country.first_seen, mobile_android_country.activated] sorts: [mobile_android_country.event_installs desc] limit: 500 x_axis_gridlines: false y_axis_gridlines: true show_view_names: false show_y_axis_labels: true show_y_axis_ticks: true y_axis_tick_density: default y_axis_tick_density_custom: 5 show_x_axis_label: false show_x_axis_ticks: false y_axis_scale_mode: linear x_axis_reversed: false y_axis_reversed: false plot_size_by_field: false trellis: '' stacking: '' limit_displayed_rows: false legend_position: center point_style: none show_value_labels: false label_density: 25 x_axis_scale: auto y_axis_combined: true ordering: none show_null_labels: false show_totals_labels: false show_silhouette: false totals_color: "#808080" color_application: collection_id: mozilla palette_id: mozilla-categorical-0 options: steps: 5 series_types: {} leftAxisLabelVisible: false leftAxisLabel: '' rightAxisLabelVisible: false rightAxisLabel: '' smoothedBars: false orientation: automatic labelPosition: left percentType: total percentPosition: inline valuePosition: right labelColorEnabled: false labelColor: "#FFF" defaults_version: 1 show_null_points: true interpolation: linear value_labels: legend label_type: labPer listen: History Days: mobile_android_country.history_days App ID: mobile_android_country.app_id Bucket: country_buckets.bucket row: 0 col: 12 width: 12 height: 8 - name: First Time Visitor Count title: First Time Visitor Count note_state: collapsed note_display: hover note_text: The number of first time visitor counts to the app's Play Store page. See notes above for context on how this number is calculated and reported on by Google. merged_queries: - model: duet explore: mobile_android_country type: table fields: [mobile_android_country.join_field, mobile_android_country.first_time_visitor_count] fill_fields: [mobile_android_country.join_field] filters: mobile_android_country.period_offset: '0' limit: 500 join_fields: [] - model: duet explore: mobile_android_country type: table fields: [mobile_android_country.join_field, mobile_android_country.first_time_visitor_count] fill_fields: [mobile_android_country.join_field] filters: mobile_android_country.period_offset: '1' sorts: [mobile_android_country.first_time_visitor_count desc] limit: 500 join_fields: - field_name: mobile_android_country.join_field source_field_name: mobile_android_country.join_field custom_color_enabled: true show_single_value_title: true single_value_title: First Time Visitor Count show_comparison: true comparison_type: change comparison_reverse_colors: false show_comparison_label: true enable_conditional_formatting: false conditional_formatting_include_totals: false conditional_formatting_include_nulls: false hidden_fields: [q1_mobile_android_country.first_time_visitor_count] series_types: {} type: single_value column_limit: 50 dynamic_fields: [{_kind_hint: measure, table_calculation: from_previous_time_period, _type_hint: number, category: table_calculation, expression: "(${mobile_android_country.first_time_visitor_count}-${q1_mobile_android_country.first_time_visitor_count})/${q1_mobile_android_country.first_time_visitor_count}", label: From Previous Time Period, value_format: !!null '', value_format_name: percent_1}] listen: - History Days: mobile_android_country.history_days App ID: mobile_android_country.app_id Bucket: country_buckets.bucket - History Days: mobile_android_country.history_days App ID: mobile_android_country.app_id Bucket: country_buckets.bucket row: 10 col: 12 width: 12 height: 4 - name: Event Installs title: Event Installs note_state: collapsed note_display: above note_text: The count of install events as reported in the Play Store. It includes re-installs but not pre-installs on Google devices. merged_queries: - model: duet explore: mobile_android_country type: table fields: [mobile_android_country.join_field, mobile_android_country.first_time_installs] fill_fields: [mobile_android_country.join_field] filters: mobile_android_country.period_offset: '0' country_buckets.bucket: '' sorts: [mobile_android_country.first_time_installs desc] limit: 500 join_fields: [] - model: duet explore: mobile_android_country type: table fields: [mobile_android_country.join_field, mobile_android_country.first_time_installs] fill_fields: [mobile_android_country.join_field] filters: mobile_android_country.period_offset: '1' country_buckets.bucket: '' sorts: [mobile_android_country.first_time_installs desc] limit: 500 join_fields: - field_name: mobile_android_country.join_field source_field_name: mobile_android_country.join_field custom_color_enabled: true show_single_value_title: true single_value_title: Event Installs show_comparison: true comparison_type: change comparison_reverse_colors: false show_comparison_label: true enable_conditional_formatting: false conditional_formatting_include_totals: false conditional_formatting_include_nulls: false hidden_fields: [q1_mobile_android_country.event_installs] type: single_value series_types: {} column_limit: 50 dynamic_fields: [{_kind_hint: measure, table_calculation: from_previous_time_period, _type_hint: number, category: table_calculation, expression: "(${mobile_android_country.event_installs}-${q1_mobile_android_country.event_installs})/${q1_mobile_android_country.event_installs}", label: From Previous Time Period, value_format: !!null '', value_format_name: percent_1}] listen: - History Days: mobile_android_country.history_days App ID: mobile_android_country.app_id Bucket: country_buckets.bucket - History Days: mobile_android_country.history_days App ID: mobile_android_country.app_id Bucket: country_buckets.bucket row: 20 col: 12 width: 12 height: 4 - name: First Seen title: First Seen note_state: collapsed note_display: hover note_text: The number of client IDs seen for the first time in the given time period. merged_queries: - model: duet explore: mobile_android_country type: table fields: [mobile_android_country.join_field, mobile_android_country.first_seen] fill_fields: [mobile_android_country.join_field] filters: mobile_android_country.period_offset: '0' limit: 500 join_fields: [] - model: duet explore: mobile_android_country type: table fields: [mobile_android_country.join_field, mobile_android_country.first_seen] fill_fields: [mobile_android_country.join_field] filters: mobile_android_country.period_offset: '1' limit: 500 join_fields: - field_name: mobile_android_country.join_field source_field_name: mobile_android_country.join_field custom_color_enabled: true show_single_value_title: true single_value_title: First Seen show_comparison: true comparison_type: change comparison_reverse_colors: false show_comparison_label: true comparison_label: From Previous Time Period enable_conditional_formatting: false conditional_formatting_include_totals: false conditional_formatting_include_nulls: false series_types: {} type: single_value hidden_fields: [q1_mobile_android_country.first_seen] column_limit: 50 dynamic_fields: [{_kind_hint: measure, table_calculation: from_previous_time_period, _type_hint: number, category: table_calculation, expression: "(${mobile_android_country.first_seen}-${q1_mobile_android_country.first_seen})/${q1_mobile_android_country.first_seen}", label: From Previous Time Period, value_format: !!null '', value_format_name: percent_1}] listen: - History Days: mobile_android_country.history_days App ID: mobile_android_country.app_id Bucket: country_buckets.bucket - History Days: mobile_android_country.history_days App ID: mobile_android_country.app_id Bucket: country_buckets.bucket row: 30 col: 12 width: 12 height: 4 - name: Activated title: Activated note_state: collapsed note_display: above note_text: A new profile is activated if seen in 5 out of their first 7 days. merged_queries: - model: duet explore: mobile_android_country type: table fields: [mobile_android_country.join_field, mobile_android_country.activated] fill_fields: [mobile_android_country.join_field] filters: mobile_android_country.period_offset: '0' sorts: [mobile_android_country.activated desc] limit: 500 join_fields: [] - model: duet explore: mobile_android_country type: table fields: [mobile_android_country.join_field, mobile_android_country.activated] fill_fields: [mobile_android_country.join_field] filters: mobile_android_country.period_offset: '1' limit: 500 join_fields: - field_name: mobile_android_country.join_field source_field_name: mobile_android_country.join_field custom_color_enabled: true show_single_value_title: true single_value_title: 7 Day Activated show_comparison: true comparison_type: change comparison_reverse_colors: false show_comparison_label: true enable_conditional_formatting: false conditional_formatting_include_totals: false conditional_formatting_include_nulls: false hidden_fields: [q1_mobile_android_country.activated] type: single_value series_types: {} column_limit: 50 dynamic_fields: [{_kind_hint: measure, table_calculation: from_previous_time_period, _type_hint: number, category: table_calculation, expression: "(${mobile_android_country.activated}-${q1_mobile_android_country.activated})/${q1_mobile_android_country.activated}", label: From Previous Time Period, value_format: !!null '', value_format_name: percent_1}] listen: - History Days: mobile_android_country.history_days App ID: mobile_android_country.app_id Bucket: country_buckets.bucket - History Days: mobile_android_country.history_days App ID: mobile_android_country.app_id Bucket: country_buckets.bucket row: 40 col: 12 width: 12 height: 4 - title: Last Valid Submission Date name: Last Valid Submission Date model: duet explore: mobile_android_country type: single_value fields: [mobile_android_country.latest_date] fill_fields: [mobile_android_country.latest_date] sorts: [mobile_android_country.latest_date desc] limit: 500 dynamic_fields: [{measure: count_of_latest_date, based_on: mobile_android_country.latest_date, expression: '', label: Count of Latest Date, type: count_distinct, _kind_hint: measure, _type_hint: number}] custom_color_enabled: true show_single_value_title: true show_comparison: false comparison_type: value comparison_reverse_colors: false show_comparison_label: true enable_conditional_formatting: false conditional_formatting_include_totals: false conditional_formatting_include_nulls: false single_value_title: Most Recent Submission Date for Analysis x_axis_gridlines: false y_axis_gridlines: true show_view_names: false show_y_axis_labels: true show_y_axis_ticks: true y_axis_tick_density: default y_axis_tick_density_custom: 5 show_x_axis_label: true show_x_axis_ticks: true y_axis_scale_mode: linear x_axis_reversed: false y_axis_reversed: false plot_size_by_field: false trellis: '' stacking: '' limit_displayed_rows: false legend_position: center point_style: none show_value_labels: false label_density: 25 x_axis_scale: auto y_axis_combined: true show_null_points: true interpolation: linear defaults_version: 1 series_types: {} listen: History Days: mobile_android_country.history_days App ID: mobile_android_country.app_id Bucket: country_buckets.bucket row: 8 col: 18 width: 6 height: 2 - name: 'Step 2: Google Play Store First Time Installs' type: text title_text: 'Step 2: Google Play Store First Time Installs' subtitle_text: How many first time installs did we get from the Google Play Store? body_text: This metric is a follow-on from Step 1 - out of the first time page visits in the Google Play Store, how many first time installations did we get? This measurement helps us determine, in conjunction with Step 1, how well we are converting new visitors. row: 20 col: 0 width: 12 height: 4 - title: Page Visits from Google Play Store name: Page Visits from Google Play Store model: duet explore: mobile_android_country type: looker_line fields: [mobile_android_country.submission_date, mobile_android_country.first_time_visitor_count] fill_fields: [mobile_android_country.submission_date] sorts: [mobile_android_country.submission_date desc] limit: 500 x_axis_gridlines: false y_axis_gridlines: true show_view_names: false show_y_axis_labels: true show_y_axis_ticks: true y_axis_tick_density: default y_axis_tick_density_custom: 5 show_x_axis_label: true show_x_axis_ticks: true y_axis_scale_mode: linear x_axis_reversed: false y_axis_reversed: false plot_size_by_field: false trellis: '' stacking: '' limit_displayed_rows: false legend_position: center point_style: none show_value_labels: false label_density: 25 x_axis_scale: auto y_axis_combined: true show_null_points: true interpolation: linear y_axes: [{label: '', orientation: left, series: [{axisId: mobile_android_country.first_time_visitor_count, id: mobile_android_country.first_time_visitor_count, name: First Time Visitor Count}], showLabels: true, showValues: true, unpinAxis: true, tickDensity: default, tickDensityCustom: 5, type: linear}] defaults_version: 1 listen: History Days: mobile_android_country.history_days App ID: mobile_android_country.app_id Bucket: country_buckets.bucket row: 14 col: 0 width: 24 height: 6 - name: 'Step 3: First Seen in Internal Telemetry' type: text title_text: 'Step 3: First Seen in Internal Telemetry' body_text: The count of new client IDs measured in our internal telemetry. This is our internal indication of how many acquisitions we have gotten during the time period of interest. The jump from Step 2 to Step 3 is the installation from Google Play Store to opening the app for the first time - these events may happen on the same day, or a user could have installed from the Play Store during a previous time period and opening the app for the first time during this time period. Events like this could cause counts in Step 3 to be greater than Step 2. row: 30 col: 0 width: 12 height: 4 - name: 'Step 1: Google Play Store Page Views' type: text title_text: 'Step 1: Google Play Store Page Views' subtitle_text: How many visitors did we get to our Play Store App page? body_text: Google provides the count of unique users who visited the app listing in the Play Store but haven’t ever previously installed the app. This definition restricts the count to essentially brand new visitors. There are no additional Play Store page view metrics available. row: 10 col: 0 width: 12 height: 4 - title: Install Events from Google Play Store name: Install Events from Google Play Store model: duet explore: mobile_android_country type: looker_line fields: [mobile_android_country.submission_date, mobile_android_country.first_time_installs] fill_fields: [mobile_android_country.submission_date] filters: {} sorts: [mobile_android_country.submission_date desc] limit: 500 x_axis_gridlines: false y_axis_gridlines: true show_view_names: false show_y_axis_labels: true show_y_axis_ticks: true y_axis_tick_density: default y_axis_tick_density_custom: 5 show_x_axis_label: true show_x_axis_ticks: true y_axis_scale_mode: linear x_axis_reversed: false y_axis_reversed: false plot_size_by_field: false trellis: '' stacking: '' limit_displayed_rows: false legend_position: center point_style: none show_value_labels: false label_density: 25 x_axis_scale: auto y_axis_combined: true show_null_points: true interpolation: linear y_axes: [{label: '', orientation: left, series: [{axisId: mobile_android_country.event_installs, id: mobile_android_country.event_installs, name: Event Installs}], showLabels: true, showValues: true, unpinAxis: true, tickDensity: default, tickDensityCustom: 5, type: linear}] defaults_version: 1 listen: History Days: mobile_android_country.history_days App ID: mobile_android_country.app_id Bucket: country_buckets.bucket row: 24 col: 0 width: 24 height: 6 - title: Client First Seen Counts name: Client First Seen Counts model: duet explore: mobile_android_country type: looker_line fields: [mobile_android_country.submission_date, mobile_android_country.first_seen] fill_fields: [mobile_android_country.submission_date] sorts: [mobile_android_country.submission_date desc] limit: 500 x_axis_gridlines: false y_axis_gridlines: true show_view_names: false show_y_axis_labels: true show_y_axis_ticks: true y_axis_tick_density: default y_axis_tick_density_custom: 5 show_x_axis_label: true show_x_axis_ticks: true y_axis_scale_mode: linear x_axis_reversed: false y_axis_reversed: false plot_size_by_field: false trellis: '' stacking: '' limit_displayed_rows: false legend_position: center point_style: none show_value_labels: false label_density: 25 x_axis_scale: auto y_axis_combined: true show_null_points: true interpolation: linear y_axes: [{label: '', orientation: left, series: [{axisId: mobile_android_country.first_seen, id: mobile_android_country.first_seen, name: First Seen}], showLabels: true, showValues: true, unpinAxis: true, tickDensity: default, tickDensityCustom: 5, type: linear}] defaults_version: 1 listen: History Days: mobile_android_country.history_days App ID: mobile_android_country.app_id Bucket: country_buckets.bucket row: 34 col: 0 width: 24 height: 6 - name: 'Step 4: New Acquisition Activations' type: text title_text: 'Step 4: New Acquisition Activations' subtitle_text: What proportion of our acquisitions were activated? body_text: A new client ID is considered activated if they were active during at least 5 of their first 7 days. This definition is the same as in the desktop acquisition funnel. The time frame for reporting in the dashboard ensures that we have observed at least a 7 day window after their acquisition date. row: 40 col: 0 width: 12 height: 4 - title: Activated Client Count name: Activated Client Count model: duet explore: mobile_android_country type: looker_line fields: [mobile_android_country.submission_date, mobile_android_country.activated] fill_fields: [mobile_android_country.submission_date] sorts: [mobile_android_country.submission_date desc] limit: 500 x_axis_gridlines: false y_axis_gridlines: true show_view_names: false show_y_axis_labels: true show_y_axis_ticks: true y_axis_tick_density: default y_axis_tick_density_custom: 5 show_x_axis_label: true show_x_axis_ticks: true y_axis_scale_mode: linear x_axis_reversed: false y_axis_reversed: false plot_size_by_field: false trellis: '' stacking: '' limit_displayed_rows: false legend_position: center point_style: none show_value_labels: false label_density: 25 x_axis_scale: auto y_axis_combined: true show_null_points: true interpolation: linear y_axes: [{label: '', orientation: left, series: [{axisId: mobile_android_country.activated, id: mobile_android_country.activated, name: Activated}], showLabels: true, showValues: true, unpinAxis: true, tickDensity: default, tickDensityCustom: 5, type: linear}] defaults_version: 1 listen: History Days: mobile_android_country.history_days App ID: mobile_android_country.app_id Bucket: country_buckets.bucket row: 44 col: 0 width: 24 height: 6 - name: Important Dates type: text title_text: Important Dates body_text: The dates for which we receive the latest data for Google and internally usually do not match up. This is due to the fact that Google does not make Play Store data available for export every day, instead it's usually exported every 7-14 days. Because of this there may appear to be lags between the two datasets. Generally the reported data will be from the most recent submission date. row: 7 col: 0 width: 12 height: 3 filters: - name: App ID title: App ID type: field_filter default_value: firefox allow_multiple_values: true required: true ui_config: type: button_toggles display: inline options: [] model: duet explore: mobile_android_country listens_to_filters: [] field: mobile_android_country.app_id - name: History Days title: History Days type: field_filter default_value: '7' allow_multiple_values: true required: false ui_config: type: button_toggles display: inline options: [] model: duet explore: mobile_android_country listens_to_filters: [] field: mobile_android_country.history_days - name: Bucket title: Bucket type: field_filter default_value: tier-1 allow_multiple_values: true required: false ui_config: type: button_toggles display: popover options: [] model: duet explore: country_buckets listens_to_filters: [] field: country_buckets.bucket