mozilla_vpn/dashboards/vpn_saasboard_retention.dashboard.lookml (1,637 lines of code) (raw):
- dashboard: vpn_saasboard__retention
title: VPN SaaSboard - Retention
layout: newspaper
preferred_viewer: dashboards-next
crossfilter_enabled: true
description: ''
refresh: 2147484 seconds
preferred_slug: Xy9m1LuSVOyM1ql8YcKOGA
elements:
- name: ''
type: text
body_text: <img src="https://www.mozilla.org/media/img/logos/vpn/logo-with-wordmark.c1659f9e6dd6.svg"
style="width:160px;height:50px;" >
row: 2
col: 0
width: 3
height: 5
- name: " (2)"
type: text
title_text: ''
body_text: "<div style='background-color: #ffffdd; padding: 5px 10px; border:\
\ solid 3px #ededed; border-radius: 5px; height:220px'>\n\nThese visualizations\
\ capture <strong>subscription retention</strong>.\n<ul>\n<li>Retention rate\
\ is the percentage of active subscriptions out of all subscriptions. </li>\n\
<li>Subscriptions are counted in every month less than or equal to their current\
\ months since subscription started.</li>\n\n<li>Retention rate must not be\
\ aggregated over multiple months because it is cumulative. Therefore, when\
\ Months Since Subscription Start not shown, the retention rate shows data for\
\ the current month.</li>\n\n<li>A cohort refers to a group of subscriptions\
\ that started their subscriptions in a particular month. For example, cohort\
\ 07-2020 includes all subscriptions that started in the month of July 2020.</li>\n\
</ul>\n<br>\nPlease submit any questions in <b><a href=\"https://mozilla.slack.com/messages/mozilla-vpn-data/\"\
>mozilla-vpn-data</a></b> channel on Slack. \n</div>"
row: 2
col: 3
width: 16
height: 5
- name: " (3)"
type: text
title_text: ''
body_text: |2-
<div style="border-top: solid 2px #e0e0e0;">
<h3><b>Retention Rate</b></h3>
<h4> <b><code>Original Subscription Start Date</code> is used to discard subscription removal due to plan changes(upgrades).</b> </h4>
row: 7
col: 0
width: 24
height: 3
- title: Retention Rate Table (by Cohort)
name: Retention Rate Table (by Cohort)
model: mozilla_vpn
explore: subscriptions
type: looker_grid
fields: [original_subscriptions__retention.months_since_original_subscription_start,
original_subscriptions__retention.retained, original_subscriptions__retention.subscription_count,
subscriptions.original_subscription_start_month]
pivots: [original_subscriptions__retention.months_since_original_subscription_start]
fill_fields: [subscriptions.original_subscription_start_month]
filters:
original_subscriptions__retention.is_cohort_complete: 'Yes'
sorts: [subscriptions.original_subscription_start_month]
total: true
dynamic_fields:
- category: table_calculation
expression: "${subscriptions__retention.retained}/${subscriptions.count}"
label: Retention Rate
value_format_name: percent_2
_kind_hint: measure
table_calculation: retention_rate
_type_hint: number
is_disabled: true
- category: table_calculation
expression: "${original_subscriptions__retention.retained}/${original_subscriptions__retention.subscription_count}"
label: Total Retention Rate
value_format:
value_format_name: percent_0
_kind_hint: measure
table_calculation: total_retention_rate
_type_hint: number
show_view_names: false
show_row_numbers: false
transpose: false
truncate_text: true
hide_totals: false
hide_row_totals: false
size_to_fit: true
table_theme: white
limit_displayed_rows: false
enable_conditional_formatting: true
header_text_alignment: center
header_font_size: '12'
rows_font_size: '12'
conditional_formatting_include_totals: false
conditional_formatting_include_nulls: false
show_sql_query_menu_options: false
show_totals: true
show_row_totals: true
series_labels:
subscriptions__retention.age_in_months: Months Since Subcription Started
subscriptions.subscription_start_month: Cohort
subscriptions__retention.months_since_subscription_start: Months Since Subscription
Start
series_cell_visualizations:
subscriptions__retention.age_in_months:
is_active: false
header_background_color: "#D8D8D8"
conditional_formatting: [{type: along a scale..., value: !!null '', background_color: "#3FE1B0",
font_color: !!null '', color_application: {collection_id: mozilla, custom: {
id: 0a238a55-cee3-6513-fab8-e325a1654f8e, label: Custom, type: continuous,
stops: [{color: "#fff", offset: 0}, {color: "#a5e6ff", offset: 50}, {
color: "#0060E0", offset: 100}]}, options: {steps: 100, constraints: {
min: {type: minimum}, mid: {type: number, value: 0}, max: {type: maximum}},
mirror: false, reverse: false, stepped: true}}, bold: false, italic: false,
strikethrough: false, fields: !!null ''}]
x_axis_gridlines: false
y_axis_gridlines: true
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: pivot
stacking: ''
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"
y_axes: [{label: '', orientation: left, series: [{axisId: retention_rate, id: 2019-10
- retention_rate, name: 2019-10}, {axisId: retention_rate, id: 2019-11
- retention_rate, name: 2019-11}, {axisId: retention_rate, id: 2019-12
- retention_rate, name: 2019-12}, {axisId: retention_rate, id: 2020-01
- retention_rate, name: 2020-01}, {axisId: retention_rate, id: 2020-02
- retention_rate, name: 2020-02}, {axisId: retention_rate, id: 2020-03
- retention_rate, name: 2020-03}, {axisId: retention_rate, id: 2020-04
- retention_rate, name: 2020-04}, {axisId: retention_rate, id: 2020-05
- retention_rate, name: 2020-05}, {axisId: retention_rate, id: 2020-06
- retention_rate, name: 2020-06}, {axisId: retention_rate, id: 2020-07
- retention_rate, name: 2020-07}, {axisId: retention_rate, id: 2020-08
- retention_rate, name: 2020-08}, {axisId: retention_rate, id: 2020-09
- retention_rate, name: 2020-09}, {axisId: retention_rate, id: 2020-10
- retention_rate, name: 2020-10}, {axisId: retention_rate, id: 2020-11
- retention_rate, name: 2020-11}, {axisId: retention_rate, id: 2020-12
- retention_rate, name: 2020-12}, {axisId: retention_rate, id: 2021-01
- retention_rate, name: 2021-01}, {axisId: retention_rate, id: 2021-02
- retention_rate, name: 2021-02}, {axisId: retention_rate, id: 2021-03
- retention_rate, name: 2021-03}, {axisId: retention_rate, id: 2021-04
- retention_rate, name: 2021-04}, {axisId: retention_rate, id: 2021-05
- retention_rate, name: 2021-05}, {axisId: retention_rate, id: 2021-06
- retention_rate, name: 2021-06}, {axisId: retention_rate, id: 2021-07
- retention_rate, name: 2021-07}, {axisId: retention_rate, id: 2021-08
- retention_rate, name: 2021-08}], showLabels: true, showValues: true,
unpinAxis: false, tickDensity: default, tickDensityCustom: 5, type: linear}]
defaults_version: 1
hidden_fields: [original_subscriptions__retention.retained, original_subscriptions__retention.subscription_count]
hidden_pivots: {}
listen:
Country: subscriptions.country_name
Pricing Plan: subscriptions.pricing_plan
Provider: subscriptions.provider
Plan Interval Type: subscriptions.plan_interval_type
Product Name: subscriptions.product_name
Original Subscription Start Date: subscriptions.original_subscription_start_date
Plan ID: subscriptions.plan_id
Has Fraudulent Charge Refunds (Yes / No): subscriptions.has_fraudulent_charge_refunds
Has Fraudulent Charges (Yes / No): subscriptions.has_fraudulent_charges
row: 51
col: 0
width: 24
height: 7
- title: Retention Counts Table (by Cohort)
name: Retention Counts Table (by Cohort)
model: mozilla_vpn
explore: subscriptions
type: looker_grid
fields: [original_subscriptions__retention.months_since_original_subscription_start,
original_subscriptions__retention.retained, original_subscriptions__retention.subscription_count,
subscriptions.original_subscription_start_month]
pivots: [original_subscriptions__retention.months_since_original_subscription_start]
fill_fields: [subscriptions.original_subscription_start_month]
filters:
original_subscriptions__retention.is_cohort_complete: 'Yes'
sorts: [subscriptions.original_subscription_start_month]
total: true
dynamic_fields:
- category: table_calculation
expression: "${subscriptions__retention.retained}/${subscriptions.count}"
label: Retention Rate
value_format_name: percent_2
_kind_hint: measure
table_calculation: retention_rate
_type_hint: number
is_disabled: true
- category: table_calculation
expression: "${original_subscriptions__retention.retained}/${original_subscriptions__retention.subscription_count}"
label: Total Retention Rate
value_format:
value_format_name: percent_0
_kind_hint: measure
table_calculation: total_retention_rate
_type_hint: number
show_view_names: false
show_row_numbers: false
transpose: false
truncate_text: true
hide_totals: false
hide_row_totals: false
size_to_fit: true
table_theme: white
limit_displayed_rows: false
enable_conditional_formatting: true
header_text_alignment: center
header_font_size: '12'
rows_font_size: '12'
conditional_formatting_include_totals: false
conditional_formatting_include_nulls: false
show_sql_query_menu_options: false
show_totals: true
show_row_totals: true
series_labels:
subscriptions__retention.age_in_months: Months Since Subcription Started
subscriptions.subscription_start_month: Cohort
subscriptions__retention.months_since_subscription_start: Months Since Subscription
Start
series_cell_visualizations:
subscriptions__retention.age_in_months:
is_active: false
header_background_color: "#D8D8D8"
conditional_formatting: [{type: along a scale..., value: !!null '', background_color: "#3FE1B0",
font_color: !!null '', color_application: {collection_id: mozilla, custom: {
id: 0a238a55-cee3-6513-fab8-e325a1654f8e, label: Custom, type: continuous,
stops: [{color: "#fff", offset: 0}, {color: "#a5e6ff", offset: 50}, {
color: "#0060E0", offset: 100}]}, options: {steps: 100, constraints: {
min: {type: minimum}, mid: {type: number, value: 0}, max: {type: maximum}},
mirror: false, reverse: false, stepped: true}}, bold: false, italic: false,
strikethrough: false, fields: !!null ''}]
x_axis_gridlines: false
y_axis_gridlines: true
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: pivot
stacking: ''
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"
y_axes: [{label: '', orientation: left, series: [{axisId: retention_rate, id: 2019-10
- retention_rate, name: 2019-10}, {axisId: retention_rate, id: 2019-11
- retention_rate, name: 2019-11}, {axisId: retention_rate, id: 2019-12
- retention_rate, name: 2019-12}, {axisId: retention_rate, id: 2020-01
- retention_rate, name: 2020-01}, {axisId: retention_rate, id: 2020-02
- retention_rate, name: 2020-02}, {axisId: retention_rate, id: 2020-03
- retention_rate, name: 2020-03}, {axisId: retention_rate, id: 2020-04
- retention_rate, name: 2020-04}, {axisId: retention_rate, id: 2020-05
- retention_rate, name: 2020-05}, {axisId: retention_rate, id: 2020-06
- retention_rate, name: 2020-06}, {axisId: retention_rate, id: 2020-07
- retention_rate, name: 2020-07}, {axisId: retention_rate, id: 2020-08
- retention_rate, name: 2020-08}, {axisId: retention_rate, id: 2020-09
- retention_rate, name: 2020-09}, {axisId: retention_rate, id: 2020-10
- retention_rate, name: 2020-10}, {axisId: retention_rate, id: 2020-11
- retention_rate, name: 2020-11}, {axisId: retention_rate, id: 2020-12
- retention_rate, name: 2020-12}, {axisId: retention_rate, id: 2021-01
- retention_rate, name: 2021-01}, {axisId: retention_rate, id: 2021-02
- retention_rate, name: 2021-02}, {axisId: retention_rate, id: 2021-03
- retention_rate, name: 2021-03}, {axisId: retention_rate, id: 2021-04
- retention_rate, name: 2021-04}, {axisId: retention_rate, id: 2021-05
- retention_rate, name: 2021-05}, {axisId: retention_rate, id: 2021-06
- retention_rate, name: 2021-06}, {axisId: retention_rate, id: 2021-07
- retention_rate, name: 2021-07}, {axisId: retention_rate, id: 2021-08
- retention_rate, name: 2021-08}], showLabels: true, showValues: true,
unpinAxis: false, tickDensity: default, tickDensityCustom: 5, type: linear}]
defaults_version: 1
hidden_fields: [original_subscriptions__retention.subscription_count, total_retention_rate]
hidden_pivots: {}
listen:
Country: subscriptions.country_name
Pricing Plan: subscriptions.pricing_plan
Provider: subscriptions.provider
Plan Interval Type: subscriptions.plan_interval_type
Product Name: subscriptions.product_name
Original Subscription Start Date: subscriptions.original_subscription_start_date
Plan ID: subscriptions.plan_id
Has Fraudulent Charge Refunds (Yes / No): subscriptions.has_fraudulent_charge_refunds
Has Fraudulent Charges (Yes / No): subscriptions.has_fraudulent_charges
row: 58
col: 0
width: 24
height: 7
- title: Current Retention by Cohort
name: Current Retention by Cohort
model: mozilla_vpn
explore: subscriptions
type: looker_column
fields: [subscriptions.original_subscription_start_month, filtered_original_subscription_retention_retained_updated,
original_subscriptions__retention.subscription_count]
fill_fields: [subscriptions.original_subscription_start_month]
filters:
original_subscriptions__retention.is_cohort_complete: 'Yes'
sorts: [subscriptions.original_subscription_start_month desc]
dynamic_fields:
- category: table_calculation
expression: "${subscriptions__retention.retained}/${subscriptions.count}"
label: Retention Rate
value_format:
value_format_name: percent_1
_kind_hint: measure
table_calculation: retention_rate
_type_hint: number
is_disabled: true
- category: table_calculation
expression: "${subscriptions.count}-${subscriptions__retention.retained}"
label: Not Retained
value_format:
value_format_name:
_kind_hint: measure
table_calculation: not_retained
_type_hint: number
is_disabled: true
- category: measure
expression:
label: Filtered Retention - Retained - Updated
value_format:
value_format_name:
based_on: subscriptions__retention.retained
_kind_hint: measure
measure: filtered_retention_retained_updated
type: count_distinct
_type_hint: number
filters:
subscriptions.is_ended: 'No'
- category: table_calculation
expression: "${filtered_retention_retained_updated}/${subscriptions.count}"
label: Retention Rate - Updated
value_format:
value_format_name: percent_1
_kind_hint: measure
table_calculation: retention_rate_updated
_type_hint: number
is_disabled: true
- category: measure
expression:
label: Filtered Original Subscription Retention - Retained - Updated
value_format:
value_format_name:
based_on: original_subscriptions__retention.retained
_kind_hint: measure
measure: filtered_original_subscription_retention_retained_updated
type: count_distinct
_type_hint: number
filters:
subscriptions.is_ended: 'No'
- category: table_calculation
expression: "${filtered_original_subscription_retention_retained_updated}/${original_subscriptions__retention.subscription_count}"
label: Total Rentention Rate - Updated
value_format:
value_format_name: percent_0
_kind_hint: measure
table_calculation: total_rentention_rate_updated
_type_hint: number
x_axis_gridlines: true
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: circle_outline
show_value_labels: true
label_density: 25
x_axis_scale: auto
y_axis_combined: true
ordering: none
show_null_labels: false
show_totals_labels: true
show_silhouette: false
totals_color: "#808080"
color_application:
collection_id: mozilla
palette_id: mozilla-categorical-0
options:
steps: 5
y_axes: [{label: Retention Rate, orientation: left, series: [{axisId: total_rentention_rate_updated,
id: total_rentention_rate_updated, name: Total Rentention Rate - Updated}],
showLabels: true, showValues: true, valueFormat: '', unpinAxis: false, tickDensity: default,
type: linear}, {label: Retention Counts, orientation: right, series: [{axisId: filtered_original_subscription_retention_retained_updated,
id: filtered_original_subscription_retention_retained_updated, name: Filtered
Original Subscription Retention - Retained - Updated}], showLabels: true,
showValues: true, unpinAxis: false, tickDensity: default, type: linear}]
x_axis_label: Cohort
x_axis_zoom: true
y_axis_zoom: true
hidden_series: [subscriptions.count]
series_types:
total_rentention_rate_updated: line
series_colors:
retained: "#0060E0"
retention_rate: "#000000"
churned: "#F9CB67"
not_retained: "#F9CB67"
subscriptions__retention.retained: "#0060E0"
retention_rate_updated: "#000000"
filtered_retention_retained_updated: "#1A73E8"
total_rentention_rate_updated: "#000000"
filtered_original_subscription_retention_retained_updated: "#0060E0"
series_labels:
filtered_retention_retained_updated: Retained
retention_rate_updated: Retention Rate
label_color: []
x_axis_datetime_label: "%m-%Y"
x_axis_label_rotation: -45
column_group_spacing_ratio: 0.3
defaults_version: 1
hidden_fields: [original_subscriptions__retention.subscription_count]
note_state: expanded
note_display: hover
note_text: This views show the current retention rate and counts for each cohort.
hidden_pivots: {}
listen:
Country: subscriptions.country_name
Pricing Plan: subscriptions.pricing_plan
Provider: subscriptions.provider
Plan Interval Type: subscriptions.plan_interval_type
Product Name: subscriptions.product_name
Original Subscription Start Date: subscriptions.original_subscription_start_date
Plan ID: subscriptions.plan_id
Has Fraudulent Charge Refunds (Yes / No): subscriptions.has_fraudulent_charge_refunds
Has Fraudulent Charges (Yes / No): subscriptions.has_fraudulent_charges
row: 10
col: 12
width: 12
height: 10
- title: Retention at Months Since Subscription Start
name: Retention at Months Since Subscription Start
model: mozilla_vpn
explore: subscriptions
type: looker_column
fields: [original_subscriptions__retention.months_since_original_subscription_start,
original_subscriptions__retention.retained, original_subscriptions__retention.subscription_count]
filters:
original_subscriptions__retention.is_cohort_complete: 'Yes'
sorts: [original_subscriptions__retention.retained desc]
dynamic_fields:
- category: table_calculation
expression: "${subscriptions__retention.retained}/${subscriptions.count}"
label: Retention Rate
value_format:
value_format_name: percent_1
_kind_hint: measure
table_calculation: retention_rate
_type_hint: number
is_disabled: true
- category: table_calculation
expression: "${subscriptions.count}-${subscriptions__retention.retained}"
label: Not Retained
value_format:
value_format_name:
_kind_hint: measure
table_calculation: not_retained
_type_hint: number
is_disabled: true
- category: table_calculation
expression: "${original_subscriptions__retention.retained}/${original_subscriptions__retention.subscription_count}"
label: Total Retention Rate
value_format:
value_format_name: percent_0
_kind_hint: measure
table_calculation: total_retention_rate
_type_hint: number
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: circle_outline
show_value_labels: true
label_density: 25
x_axis_scale: auto
y_axis_combined: true
ordering: none
show_null_labels: false
show_totals_labels: true
show_silhouette: false
totals_color: "#808080"
color_application:
collection_id: 7c56cc21-66e4-41c9-81ce-a60e1c3967b2
palette_id: 5d189dfc-4f46-46f3-822b-bfb0b61777b1
options:
steps: 5
y_axes: [{label: '', orientation: left, series: [{axisId: original_subscriptions__retention.retained,
id: original_subscriptions__retention.retained, name: Retained}], showLabels: true,
showValues: true, unpinAxis: false, tickDensity: default, type: linear}, {
label: '', orientation: left, series: [{axisId: subscriptions.count, id: subscriptions.count,
name: Subscriptions}], showLabels: true, showValues: true, unpinAxis: false,
tickDensity: default, type: linear}, {label: '', orientation: right, series: [
{axisId: total_retention_rate, id: total_retention_rate, name: Total Retention
Rate}], showLabels: true, showValues: true, unpinAxis: false, tickDensity: default,
type: linear}]
x_axis_label: Months Since Subscription Start
x_axis_zoom: true
y_axis_zoom: true
series_types:
total_retention_rate: line
series_colors:
retention_rate: "#000000"
churned: "#ffa993"
retained: "#0060E0"
not_retained: "#F9CB67"
total_retention_rate: "#000000"
label_color: []
column_group_spacing_ratio: 0.3
defaults_version: 1
hidden_fields: [original_subscriptions__retention.subscription_count]
show_row_numbers: true
transpose: false
truncate_text: true
hide_totals: false
hide_row_totals: false
size_to_fit: true
table_theme: white
enable_conditional_formatting: false
header_text_alignment: left
header_font_size: 12
rows_font_size: 12
conditional_formatting_include_totals: false
conditional_formatting_include_nulls: false
hidden_pivots: {}
listen:
Country: subscriptions.country_name
Pricing Plan: subscriptions.pricing_plan
Provider: subscriptions.provider
Plan Interval Type: subscriptions.plan_interval_type
Product Name: subscriptions.product_name
Original Subscription Start Date: subscriptions.original_subscription_start_date
Plan ID: subscriptions.plan_id
Has Fraudulent Charge Refunds (Yes / No): subscriptions.has_fraudulent_charge_refunds
Has Fraudulent Charges (Yes / No): subscriptions.has_fraudulent_charges
row: 10
col: 0
width: 12
height: 10
- title: Untitled
name: Untitled
model: mozilla_vpn
explore: subscriptions
type: single_value
fields: [metadata.last_modified_date]
fill_fields: [metadata.last_modified_date]
sorts: [metadata.last_modified_date desc]
limit: 1
dynamic_fields:
- category: table_calculation
expression: add_days(-1, ${metadata.last_modified_date})
label: New Calculation
value_format:
value_format_name:
_kind_hint: dimension
table_calculation: new_calculation
_type_hint: date
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: Data Last Updated
defaults_version: 1
hidden_fields: [metadata.last_modified_date]
listen:
Country: subscriptions.country_name
Pricing Plan: subscriptions.pricing_plan
Provider: subscriptions.provider
Plan Interval Type: subscriptions.plan_interval_type
Product Name: subscriptions.product_name
Original Subscription Start Date: subscriptions.original_subscription_start_date
Subscription Start Date: subscriptions.subscription_start_month
Plan ID: subscriptions.plan_id
Has Fraudulent Charge Refunds (Yes / No): subscriptions.has_fraudulent_charge_refunds
Has Fraudulent Charges (Yes / No): subscriptions.has_fraudulent_charges
row: 2
col: 19
width: 5
height: 5
- name: " (4)"
type: text
title_text: ''
body_text: |2-
<div style="border-top: solid 2px #e0e0e0;">
<h3><b>Retention by Cohort</b></h3>
<h4> <b><code>Original Subscription Start Date</code> is used to discard subscription removal due to plan changes(upgrades).</b> </h4>
row: 39
col: 0
width: 24
height: 3
- name: " (5)"
type: text
title_text: ''
body_text: |2-
<div style="border-top: solid 2px #e0e0e0;">
<h3><b>Retention by Plan Interval Type</b></h3>
<h4> <b><code>Subscription Start Date</code> is used to track subscription removal due to plan changes(upgrades).</b> </h4>
row: 20
col: 0
width: 24
height: 3
- name: " (6)"
type: text
title_text: ''
body_text: |2-
<div style="border-top: solid 2px #e0e0e0;">
<h3><b>Retention by Forcast Region</b></h3>
<h4> <b><code>Original Subscription Start Date</code> is used to discard subscription removal due to plan changes(upgrades).</b> </h4>
row: 65
col: 0
width: 24
height: 3
- name: " (7)"
type: text
title_text: ''
body_text: |
<div style="border-radius: 5px; padding: 5px 10px; background: #412399; height: 60px; color: red;">
<nav style="font-size: 20px;">
<img style="color: #efefef; padding: 5px 25px; float: left; height: 40px;" src="https://wwwstatic.lookercdn.com/logos/looker_all_white.svg"/>
<a style="color: #efefef; padding: 5px 25px; float: left; line-height: 40px;" href="https://mozilla.cloud.looker.com/dashboards/412">
Active Subs</a>
<a style="color: #efefef; padding: 5px 25px; float: left; line-height: 40px;" href="https://mozilla.cloud.looker.com/dashboards/416">
Subs Growth</a>
<a style="color: #efefef; border: 1px solid white; padding: 5px 25px; float: left; line-height: 40px; font-weight: bold; text-decoration: underline" href="https://mozilla.cloud.looker.com/dashboards/414">Retention</a>
<a style="color: #efefef; padding: 5px 25px; float: left; line-height: 40px;" href="https://mozilla.cloud.looker.com/dashboards/413">Churn</a>
<a style="color: #efefef; padding: 5px 25px; float: left; line-height: 40px;" href="https://mozilla.cloud.looker.com/dashboards/433">Revenue</a>
<a style="color: #efefef; padding: 5px 25px; float: left; line-height: 40px;" href="https://docs.google.com/document/d/1VtrTwm8Eqt9cPLZLaH1kjnM413gKtdaZArS29xcxXpA/edit?usp=sharing">Docs</a>
</nav>
</div>
row: 0
col: 0
width: 24
height: 2
- title: Cohort Retention Rate By Months Since Subscription Start (A)
name: Cohort Retention Rate By Months Since Subscription Start (A)
model: mozilla_vpn
explore: subscriptions
type: looker_line
fields: [original_subscriptions__retention.months_since_original_subscription_start,
original_subscriptions__retention.retained, original_subscriptions__retention.subscription_count,
subscriptions.original_subscription_start_month]
pivots: [original_subscriptions__retention.months_since_original_subscription_start]
fill_fields: [subscriptions.original_subscription_start_month]
filters:
original_subscriptions__retention.is_cohort_complete: 'Yes'
sorts: [subscriptions.original_subscription_start_month, original_subscriptions__retention.months_since_original_subscription_start]
dynamic_fields:
- category: table_calculation
expression: "${subscriptions__retention.retained}/${subscriptions.count}"
label: Retention Rate
value_format:
value_format_name: percent_1
_kind_hint: measure
table_calculation: retention_rate
_type_hint: number
is_disabled: true
- category: table_calculation
expression: "${original_subscriptions__retention.retained}/${original_subscriptions__retention.subscription_count}"
label: Total Retention Rate
value_format:
value_format_name: percent_0
_kind_hint: measure
table_calculation: total_retention_rate
_type_hint: number
x_axis_gridlines: true
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: left
point_style: circle_outline
show_value_labels: false
label_density: 25
x_axis_scale: auto
y_axis_combined: true
show_null_points: false
interpolation: linear
y_axes: [{label: '', orientation: left, series: [{axisId: retention_rate, id: 2019-10
- retention_rate, name: 2019-10}, {axisId: retention_rate, id: 2019-11
- retention_rate, name: 2019-11}, {axisId: retention_rate, id: 2019-12
- retention_rate, name: 2019-12}, {axisId: retention_rate, id: 2020-01
- retention_rate, name: 2020-01}, {axisId: retention_rate, id: 2020-02
- retention_rate, name: 2020-02}, {axisId: retention_rate, id: 2020-03
- retention_rate, name: 2020-03}, {axisId: retention_rate, id: 2020-04
- retention_rate, name: 2020-04}, {axisId: retention_rate, id: 2020-05
- retention_rate, name: 2020-05}, {axisId: retention_rate, id: 2020-06
- retention_rate, name: 2020-06}, {axisId: retention_rate, id: 2020-07
- retention_rate, name: 2020-07}, {axisId: retention_rate, id: 2020-08
- retention_rate, name: 2020-08}, {axisId: retention_rate, id: 2020-09
- retention_rate, name: 2020-09}, {axisId: retention_rate, id: 2020-10
- retention_rate, name: 2020-10}, {axisId: retention_rate, id: 2020-11
- retention_rate, name: 2020-11}, {axisId: retention_rate, id: 2020-12
- retention_rate, name: 2020-12}, {axisId: retention_rate, id: 2021-01
- retention_rate, name: 2021-01}, {axisId: retention_rate, id: 2021-02
- retention_rate, name: 2021-02}, {axisId: retention_rate, id: 2021-03
- retention_rate, name: 2021-03}, {axisId: retention_rate, id: 2021-04
- retention_rate, name: 2021-04}, {axisId: retention_rate, id: 2021-05
- retention_rate, name: 2021-05}, {axisId: retention_rate, id: 2021-06
- retention_rate, name: 2021-06}, {axisId: retention_rate, id: 2021-07
- retention_rate, name: 2021-07}, {axisId: retention_rate, id: 2021-08
- retention_rate, name: 2021-08}], showLabels: true, showValues: true,
unpinAxis: false, tickDensity: default, tickDensityCustom: 5, type: linear}]
x_axis_label: Cohort
x_axis_zoom: true
y_axis_zoom: true
hidden_series: []
series_labels:
0 - retention_rate: Month 0
1 - retention_rate: Month 1
2 - retention_rate: Month 2
3 - retention_rate: Month 3
4 - retention_rate: Month 4
5 - retention_rate: Month 5
6 - retention_rate: Month 6
7 - retention_rate: Month 7
8 - retention_rate: Month 8
9 - retention_rate: Month 9
13 - retention_rate: Month 13
12 - retention_rate: Month 12
11 - retention_rate: Month 11
10 - retention_rate: Month 10
14 - retention_rate: Month 14
15 - retention_rate: Month 15
16 - retention_rate: Month 16
17 - retention_rate: Month 17
18 - retention_rate: Month 18
19 - retention_rate: Month 19
20 - retention_rate: Month 20
21 - retention_rate: Month 21
0 - total_retention_rate: Month 0
1 - total_retention_rate: Month 1
2 - total_retention_rate: Month 2
3 - total_retention_rate: Month 3
4 - total_retention_rate: Month 4
x_axis_datetime_label: "%m-%Y"
x_axis_label_rotation: -45
discontinuous_nulls: true
show_sql_query_menu_options: false
show_totals: true
show_row_totals: true
show_row_numbers: true
transpose: false
truncate_text: true
size_to_fit: true
table_theme: white
enable_conditional_formatting: true
header_text_alignment: left
header_font_size: '12'
rows_font_size: '12'
conditional_formatting: [{type: along a scale..., value: !!null '', background_color: "#3FE1B0",
font_color: !!null '', color_application: {collection_id: mozilla, palette_id: mozilla-sequential-0,
options: {steps: 5, constraints: {min: {type: minimum}, mid: {type: number,
value: 0}, max: {type: maximum}}, mirror: true, reverse: false, stepped: false}},
bold: false, italic: false, strikethrough: false, fields: !!null ''}]
conditional_formatting_include_totals: false
conditional_formatting_include_nulls: false
ordering: none
show_null_labels: false
show_totals_labels: false
show_silhouette: false
totals_color: "#808080"
defaults_version: 1
hidden_fields: [original_subscriptions__retention.retained, original_subscriptions__retention.subscription_count]
hide_totals: false
hide_row_totals: false
hidden_pivots: {}
listen:
Country: subscriptions.country_name
Pricing Plan: subscriptions.pricing_plan
Provider: subscriptions.provider
Plan Interval Type: subscriptions.plan_interval_type
Product Name: subscriptions.product_name
Original Subscription Start Date: subscriptions.original_subscription_start_date
Plan ID: subscriptions.plan_id
Has Fraudulent Charge Refunds (Yes / No): subscriptions.has_fraudulent_charge_refunds
Has Fraudulent Charges (Yes / No): subscriptions.has_fraudulent_charges
row: 42
col: 0
width: 12
height: 9
- title: Retention Rate Table (By Plan Interval Type)
name: Retention Rate Table (By Plan Interval Type)
model: mozilla_vpn
explore: subscriptions
type: looker_grid
fields: [subscriptions.count, subscriptions__retention.months_since_subscription_start,
subscriptions__retention.retained, subscriptions.plan_interval_type]
pivots: [subscriptions__retention.months_since_subscription_start]
filters:
subscriptions__retention.is_cohort_complete: 'Yes'
sorts: [subscriptions__retention.months_since_subscription_start]
column_limit: 50
total: true
dynamic_fields:
- category: table_calculation
expression: "${subscriptions__retention.retained}/${subscriptions.count}"
label: Retention Rate
value_format:
value_format_name: percent_1
_kind_hint: measure
table_calculation: retention_rate
_type_hint: number
- category: table_calculation
expression: max(pivot_row(if(is_null(${subscriptions.count}),null,${subscriptions__retention.months_since_subscription_start})))
label: Months Since Plan Start
value_format:
value_format_name:
_kind_hint: supermeasure
table_calculation: months_since_plan_start
_type_hint: number
- category: table_calculation
description: for sorting plans by volume
expression: pivot_offset(${subscriptions.count}, 0)
label: Total Subscribers
value_format:
value_format_name:
_kind_hint: measure
table_calculation: total_subscribers
_type_hint: number
show_view_names: false
show_row_numbers: false
transpose: false
truncate_text: true
hide_totals: false
hide_row_totals: false
size_to_fit: true
table_theme: white
limit_displayed_rows: false
enable_conditional_formatting: true
header_text_alignment: center
header_font_size: '12'
rows_font_size: '12'
conditional_formatting_include_totals: false
conditional_formatting_include_nulls: false
color_application:
collection_id: 5f313589-67ce-44ba-b084-ec5107a7bb7e
palette_id: be92eae7-de25-46ae-8e4f-21cb0b69a1f3
options:
steps: 5
show_sql_query_menu_options: false
show_totals: true
show_row_totals: true
series_labels:
subscriptions__retention.months_since_subscription_start: Months Since Subscription
Start
series_cell_visualizations:
retained:
is_active: false
series_text_format:
retention_rate:
align: center
subscriptions__retention.months_since_subscription_start:
align: center
header_background_color: "#D8D8D8"
conditional_formatting: [{type: along a scale..., value: !!null '', background_color: !!null '',
font_color: !!null '', color_application: {collection_id: 5f313589-67ce-44ba-b084-ec5107a7bb7e,
custom: {id: f7c6f923-568d-4870-0fb1-bcf663bd1626, label: Custom, type: continuous,
stops: [{color: "#fff", offset: 0}, {color: "#a5e6ff", offset: 50}, {
color: "#0060E0", offset: 100}]}, options: {steps: 100, stepped: true}},
bold: false, italic: false, strikethrough: false, fields: !!null ''}]
x_axis_gridlines: false
y_axis_gridlines: true
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: pivot
stacking: ''
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"
x_axis_label: Months Since Subscription Started
series_colors: {}
defaults_version: 1
hidden_fields: [subscriptions.count, new_calculation, months_since_plan_start,
pricing_plan_for_sorting, total_subscriptions, total_subscriptions_for_sorting,
total_subscribers, subscriptions__retention.retained]
listen:
Country: subscriptions.country_name
Pricing Plan: subscriptions.pricing_plan
Provider: subscriptions.provider
Plan Interval Type: subscriptions.plan_interval_type
Product Name: subscriptions.product_name
Subscription Start Date: subscriptions.subscription_start_month
Plan ID: subscriptions.plan_id
Has Fraudulent Charge Refunds (Yes / No): subscriptions.has_fraudulent_charge_refunds
Has Fraudulent Charges (Yes / No): subscriptions.has_fraudulent_charges
row: 29
col: 0
width: 24
height: 5
- title: Retention Counts Table (By Plan Interval Type)
name: Retention Counts Table (By Plan Interval Type)
model: mozilla_vpn
explore: subscriptions
type: looker_grid
fields: [subscriptions.count, subscriptions__retention.months_since_subscription_start,
subscriptions__retention.retained, subscriptions.plan_interval_type]
pivots: [subscriptions__retention.months_since_subscription_start]
filters:
subscriptions__retention.is_cohort_complete: 'Yes'
sorts: [subscriptions__retention.months_since_subscription_start]
column_limit: 50
total: true
dynamic_fields:
- category: table_calculation
expression: "${subscriptions__retention.retained}/${subscriptions.count}"
label: Retention Rate
value_format_name: percent_2
_kind_hint: measure
table_calculation: retention_rate
_type_hint: number
- category: table_calculation
expression: max(pivot_row(if(is_null(${subscriptions.count}),null,${subscriptions__retention.months_since_subscription_start})))
label: Months Since Plan Start
value_format:
value_format_name:
_kind_hint: supermeasure
table_calculation: months_since_plan_start
_type_hint: number
- category: table_calculation
description: for sorting plans by volume
expression: pivot_offset(${subscriptions.count}, 0)
label: Total Subscribers
value_format:
value_format_name:
_kind_hint: measure
table_calculation: total_subscribers
_type_hint: number
show_view_names: false
show_row_numbers: false
transpose: false
truncate_text: true
hide_totals: false
hide_row_totals: false
size_to_fit: true
table_theme: white
limit_displayed_rows: false
enable_conditional_formatting: true
header_text_alignment: center
header_font_size: '12'
rows_font_size: '12'
conditional_formatting_include_totals: false
conditional_formatting_include_nulls: false
color_application:
collection_id: 5f313589-67ce-44ba-b084-ec5107a7bb7e
palette_id: be92eae7-de25-46ae-8e4f-21cb0b69a1f3
options:
steps: 5
show_sql_query_menu_options: false
show_totals: true
show_row_totals: true
series_labels:
subscriptions__retention.months_since_subscription_start: Months Since Subscription
Start
retained: Subs Retained
series_cell_visualizations:
retained:
is_active: false
series_text_format:
retention_rate: {}
header_background_color: "#D8D8D8"
conditional_formatting: [{type: along a scale..., value: !!null '', background_color: !!null '',
font_color: !!null '', color_application: {collection_id: 5f313589-67ce-44ba-b084-ec5107a7bb7e,
custom: {id: 85eacb9d-f942-94f5-a329-7ac6ede930c2, label: Custom, type: continuous,
stops: [{color: "#fff", offset: 0}, {color: "#a5e6ff", offset: 50}, {
color: "#0060E0", offset: 100}]}, options: {steps: 100, stepped: true}},
bold: false, italic: false, strikethrough: false, fields: !!null ''}]
x_axis_gridlines: false
y_axis_gridlines: true
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: pivot
stacking: ''
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"
x_axis_label: Months Since Subscription Started
series_colors: {}
defaults_version: 1
hidden_fields: [subscriptions.count, new_calculation, months_since_plan_start,
pricing_plan_for_sorting, total_subscriptions, total_subscriptions_for_sorting,
total_subscribers, retention_rate]
listen:
Country: subscriptions.country_name
Pricing Plan: subscriptions.pricing_plan
Provider: subscriptions.provider
Plan Interval Type: subscriptions.plan_interval_type
Product Name: subscriptions.product_name
Subscription Start Date: subscriptions.subscription_start_month
Plan ID: subscriptions.plan_id
Has Fraudulent Charge Refunds (Yes / No): subscriptions.has_fraudulent_charge_refunds
Has Fraudulent Charges (Yes / No): subscriptions.has_fraudulent_charges
row: 34
col: 0
width: 24
height: 5
- title: Retention Rate (By Plan Interval Type)
name: Retention Rate (By Plan Interval Type)
model: mozilla_vpn
explore: subscriptions
type: looker_line
fields: [subscriptions.count, subscriptions__retention.months_since_subscription_start,
subscriptions__retention.retained, subscriptions.plan_interval_type]
pivots: [subscriptions.plan_interval_type]
filters:
subscriptions__retention.is_cohort_complete: 'Yes'
sorts: [subscriptions__retention.months_since_subscription_start, subscriptions.plan_interval_type,
months_since_plan_start desc 0, total_subscribers desc 0]
limit: 1000
column_limit: 50
dynamic_fields:
- category: table_calculation
expression: "${subscriptions__retention.retained}/${subscriptions.count}"
label: Retention Rate
value_format:
value_format_name: percent_1
_kind_hint: measure
table_calculation: retention_rate
_type_hint: number
- category: table_calculation
expression: max(pivot_row(if(is_null(${subscriptions.count}),null,${subscriptions__retention.months_since_subscription_start})))
label: Months Since Plan Start
value_format:
value_format_name:
_kind_hint: supermeasure
table_calculation: months_since_plan_start
_type_hint: number
- category: table_calculation
description: for sorting plans by volume
expression: pivot_offset(${subscriptions.count}, 0)
label: Total Subscribers
value_format:
value_format_name:
_kind_hint: measure
table_calculation: total_subscribers
_type_hint: number
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: left
point_style: circle_outline
show_value_labels: false
label_density: 25
x_axis_scale: auto
y_axis_combined: true
show_null_points: false
interpolation: linear
color_application:
collection_id: 80e60a97-c02b-4a41-aa05-83522ee2144b
palette_id: 8b146fdb-43c2-42c2-a572-277b13e9ae5c
options:
steps: 5
x_axis_label: Months Since Subscription Start
series_colors:
1-month-usd-4.99 - retention_rate: "#7363A9"
6-month-chf-47.94 - retention_rate: "#82a6a8"
1_month - retention_rate: "#ffd95f"
1_year - retention_rate: "#4276be"
6_month - retention_rate: "#b42f37"
discontinuous_nulls: true
show_row_numbers: true
transpose: false
truncate_text: true
hide_totals: false
hide_row_totals: false
size_to_fit: true
table_theme: white
enable_conditional_formatting: true
header_text_alignment: left
header_font_size: '12'
rows_font_size: '12'
conditional_formatting_include_totals: false
conditional_formatting_include_nulls: false
show_sql_query_menu_options: false
show_totals: true
show_row_totals: true
series_cell_visualizations:
retained:
is_active: false
series_text_format:
retention_rate: {}
header_background_color: "#D8D8D8"
conditional_formatting: [{type: along a scale..., value: !!null '', background_color: !!null '',
font_color: !!null '', color_application: {collection_id: 5f313589-67ce-44ba-b084-ec5107a7bb7e,
custom: {id: f7c6f923-568d-4870-0fb1-bcf663bd1626, label: Custom, type: continuous,
stops: [{color: "#fff", offset: 0}, {color: "#a5e6ff", offset: 50}, {
color: "#0060E0", offset: 100}]}, options: {steps: 100, stepped: true}},
bold: false, italic: false, strikethrough: false, fields: !!null ''}]
ordering: none
show_null_labels: false
show_totals_labels: false
show_silhouette: false
totals_color: "#808080"
defaults_version: 1
hidden_fields: [subscriptions.count, new_calculation, months_since_plan_start,
pricing_plan_for_sorting, total_subscriptions, total_subscriptions_for_sorting,
total_subscribers, subscriptions__retention.retained]
listen:
Country: subscriptions.country_name
Pricing Plan: subscriptions.pricing_plan
Provider: subscriptions.provider
Plan Interval Type: subscriptions.plan_interval_type
Product Name: subscriptions.product_name
Subscription Start Date: subscriptions.subscription_start_month
Plan ID: subscriptions.plan_id
Has Fraudulent Charge Refunds (Yes / No): subscriptions.has_fraudulent_charge_refunds
Has Fraudulent Charges (Yes / No): subscriptions.has_fraudulent_charges
row: 23
col: 0
width: 24
height: 6
- title: Cohort Retention Rate By Months Since Subscription Start (B)
name: Cohort Retention Rate By Months Since Subscription Start (B)
model: mozilla_vpn
explore: subscriptions
type: looker_line
fields: [original_subscriptions__retention.months_since_original_subscription_start,
original_subscriptions__retention.retained, original_subscriptions__retention.subscription_count,
subscriptions.original_subscription_start_month]
pivots: [subscriptions.original_subscription_start_month]
fill_fields: [subscriptions.original_subscription_start_month]
filters:
original_subscriptions__retention.is_cohort_complete: 'Yes'
sorts: [original_subscriptions__retention.retained desc 0, subscriptions.original_subscription_start_month]
dynamic_fields:
- category: table_calculation
expression: "${subscriptions__retention.retained}/${subscriptions.count}"
label: Retention Rate
value_format:
value_format_name: percent_1
_kind_hint: measure
table_calculation: retention_rate
_type_hint: number
is_disabled: true
- category: table_calculation
expression: "${original_subscriptions__retention.retained}/${original_subscriptions__retention.subscription_count}"
label: Total Retention Rate
value_format:
value_format_name: percent_0
_kind_hint: measure
table_calculation: total_retention_rate
_type_hint: number
x_axis_gridlines: true
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: left
point_style: circle_outline
show_value_labels: false
label_density: 25
x_axis_scale: auto
y_axis_combined: true
show_null_points: false
interpolation: linear
y_axes: [{label: '', orientation: left, series: [{axisId: retention_rate, id: 2019-10
- retention_rate, name: 2019-10}, {axisId: retention_rate, id: 2019-11
- retention_rate, name: 2019-11}, {axisId: retention_rate, id: 2019-12
- retention_rate, name: 2019-12}, {axisId: retention_rate, id: 2020-01
- retention_rate, name: 2020-01}, {axisId: retention_rate, id: 2020-02
- retention_rate, name: 2020-02}, {axisId: retention_rate, id: 2020-03
- retention_rate, name: 2020-03}, {axisId: retention_rate, id: 2020-04
- retention_rate, name: 2020-04}, {axisId: retention_rate, id: 2020-05
- retention_rate, name: 2020-05}, {axisId: retention_rate, id: 2020-06
- retention_rate, name: 2020-06}, {axisId: retention_rate, id: 2020-07
- retention_rate, name: 2020-07}, {axisId: retention_rate, id: 2020-08
- retention_rate, name: 2020-08}, {axisId: retention_rate, id: 2020-09
- retention_rate, name: 2020-09}, {axisId: retention_rate, id: 2020-10
- retention_rate, name: 2020-10}, {axisId: retention_rate, id: 2020-11
- retention_rate, name: 2020-11}, {axisId: retention_rate, id: 2020-12
- retention_rate, name: 2020-12}, {axisId: retention_rate, id: 2021-01
- retention_rate, name: 2021-01}, {axisId: retention_rate, id: 2021-02
- retention_rate, name: 2021-02}, {axisId: retention_rate, id: 2021-03
- retention_rate, name: 2021-03}, {axisId: retention_rate, id: 2021-04
- retention_rate, name: 2021-04}, {axisId: retention_rate, id: 2021-05
- retention_rate, name: 2021-05}, {axisId: retention_rate, id: 2021-06
- retention_rate, name: 2021-06}, {axisId: retention_rate, id: 2021-07
- retention_rate, name: 2021-07}, {axisId: retention_rate, id: 2021-08
- retention_rate, name: 2021-08}], showLabels: true, showValues: true,
unpinAxis: false, tickDensity: default, tickDensityCustom: 5, type: linear}]
x_axis_label: ''
hidden_series: []
series_labels:
0 - retention_rate: Month 0
1 - retention_rate: Month 1
2 - retention_rate: Month 2
3 - retention_rate: Month 3
4 - retention_rate: Month 4
5 - retention_rate: Month 5
6 - retention_rate: Month 6
7 - retention_rate: Month 7
8 - retention_rate: Month 8
9 - retention_rate: Month 9
13 - retention_rate: Month 13
12 - retention_rate: Month 12
11 - retention_rate: Month 11
10 - retention_rate: Month 10
14 - retention_rate: Month 14
15 - retention_rate: Month 15
16 - retention_rate: Month 16
17 - retention_rate: Month 17
18 - retention_rate: Month 18
19 - retention_rate: Month 19
20 - retention_rate: Month 20
21 - retention_rate: Month 21
x_axis_datetime_label: ''
discontinuous_nulls: true
show_sql_query_menu_options: false
show_totals: true
show_row_totals: true
show_row_numbers: true
transpose: false
truncate_text: true
size_to_fit: true
table_theme: white
enable_conditional_formatting: true
header_text_alignment: left
header_font_size: '12'
rows_font_size: '12'
conditional_formatting: [{type: along a scale..., value: !!null '', background_color: "#3FE1B0",
font_color: !!null '', color_application: {collection_id: mozilla, palette_id: mozilla-sequential-0,
options: {steps: 5, constraints: {min: {type: minimum}, mid: {type: number,
value: 0}, max: {type: maximum}}, mirror: true, reverse: false, stepped: false}},
bold: false, italic: false, strikethrough: false, fields: !!null ''}]
conditional_formatting_include_totals: false
conditional_formatting_include_nulls: false
ordering: none
show_null_labels: false
show_totals_labels: false
show_silhouette: false
totals_color: "#808080"
defaults_version: 1
hidden_fields: [original_subscriptions__retention.retained, original_subscriptions__retention.subscription_count]
hide_totals: false
hide_row_totals: false
hidden_pivots: {}
listen:
Country: subscriptions.country_name
Pricing Plan: subscriptions.pricing_plan
Provider: subscriptions.provider
Plan Interval Type: subscriptions.plan_interval_type
Product Name: subscriptions.product_name
Original Subscription Start Date: subscriptions.original_subscription_start_date
Plan ID: subscriptions.plan_id
Has Fraudulent Charge Refunds (Yes / No): subscriptions.has_fraudulent_charge_refunds
Has Fraudulent Charges (Yes / No): subscriptions.has_fraudulent_charges
row: 42
col: 12
width: 12
height: 9
- title: Retention Rate Table (by Forecast Region)
name: Retention Rate Table (by Forecast Region)
model: mozilla_vpn
explore: subscriptions
type: looker_line
fields: [original_subscriptions__retention.months_since_original_subscription_start,
original_subscriptions__retention.retained, original_subscriptions__retention.subscription_count,
subscriptions.forecast_region]
pivots: [subscriptions.forecast_region]
filters:
original_subscriptions__retention.is_cohort_complete: 'Yes'
sorts: [original_subscriptions__retention.months_since_original_subscription_start,
subscriptions.forecast_region]
total: true
dynamic_fields:
- category: table_calculation
expression: "${original_subscriptions__retention.retained}/${original_subscriptions__retention.subscription_count}"
label: Total Retention Rate
value_format:
value_format_name: percent_0
_kind_hint: measure
table_calculation: total_retention_rate
_type_hint: number
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: left
point_style: circle_outline
show_value_labels: true
label_density: 25
x_axis_scale: auto
y_axis_combined: true
show_null_points: true
interpolation: linear
y_axes: [{label: '', orientation: left, series: [{axisId: retention_rate, id: 2019-10
- retention_rate, name: 2019-10}, {axisId: retention_rate, id: 2019-11
- retention_rate, name: 2019-11}, {axisId: retention_rate, id: 2019-12
- retention_rate, name: 2019-12}, {axisId: retention_rate, id: 2020-01
- retention_rate, name: 2020-01}, {axisId: retention_rate, id: 2020-02
- retention_rate, name: 2020-02}, {axisId: retention_rate, id: 2020-03
- retention_rate, name: 2020-03}, {axisId: retention_rate, id: 2020-04
- retention_rate, name: 2020-04}, {axisId: retention_rate, id: 2020-05
- retention_rate, name: 2020-05}, {axisId: retention_rate, id: 2020-06
- retention_rate, name: 2020-06}, {axisId: retention_rate, id: 2020-07
- retention_rate, name: 2020-07}, {axisId: retention_rate, id: 2020-08
- retention_rate, name: 2020-08}, {axisId: retention_rate, id: 2020-09
- retention_rate, name: 2020-09}, {axisId: retention_rate, id: 2020-10
- retention_rate, name: 2020-10}, {axisId: retention_rate, id: 2020-11
- retention_rate, name: 2020-11}, {axisId: retention_rate, id: 2020-12
- retention_rate, name: 2020-12}, {axisId: retention_rate, id: 2021-01
- retention_rate, name: 2021-01}, {axisId: retention_rate, id: 2021-02
- retention_rate, name: 2021-02}, {axisId: retention_rate, id: 2021-03
- retention_rate, name: 2021-03}, {axisId: retention_rate, id: 2021-04
- retention_rate, name: 2021-04}, {axisId: retention_rate, id: 2021-05
- retention_rate, name: 2021-05}, {axisId: retention_rate, id: 2021-06
- retention_rate, name: 2021-06}, {axisId: retention_rate, id: 2021-07
- retention_rate, name: 2021-07}, {axisId: retention_rate, id: 2021-08
- retention_rate, name: 2021-08}], showLabels: true, showValues: true,
unpinAxis: false, tickDensity: default, tickDensityCustom: 5, type: linear}]
x_axis_zoom: true
y_axis_zoom: true
trellis_rows: 1
series_labels:
subscriptions__retention.age_in_months: Months Since Subcription Started
subscriptions.subscription_start_month: Cohort
subscriptions__retention.months_since_subscription_start: Months Since Subscription
Start
show_row_numbers: false
transpose: false
truncate_text: true
hide_totals: false
hide_row_totals: false
size_to_fit: true
table_theme: white
enable_conditional_formatting: true
header_text_alignment: center
header_font_size: '12'
rows_font_size: '12'
conditional_formatting_include_totals: false
conditional_formatting_include_nulls: false
show_sql_query_menu_options: false
show_totals: true
show_row_totals: true
series_cell_visualizations:
subscriptions__retention.age_in_months:
is_active: false
header_background_color: "#D8D8D8"
conditional_formatting: [{type: along a scale..., value: !!null '', background_color: "#3FE1B0",
font_color: !!null '', color_application: {collection_id: mozilla, custom: {
id: 0a238a55-cee3-6513-fab8-e325a1654f8e, label: Custom, type: continuous,
stops: [{color: "#fff", offset: 0}, {color: "#a5e6ff", offset: 50}, {
color: "#0060E0", offset: 100}]}, options: {steps: 100, constraints: {
min: {type: minimum}, mid: {type: number, value: 0}, max: {type: maximum}},
mirror: false, reverse: false, stepped: true}}, bold: false, italic: false,
strikethrough: false, fields: !!null ''}]
ordering: none
show_null_labels: false
show_totals_labels: false
show_silhouette: false
totals_color: "#808080"
defaults_version: 1
hidden_fields: [original_subscriptions__retention.subscription_count, original_subscriptions__retention.retained]
hidden_pivots: {}
listen:
Country: subscriptions.country_name
Pricing Plan: subscriptions.pricing_plan
Provider: subscriptions.provider
Plan Interval Type: subscriptions.plan_interval_type
Product Name: subscriptions.product_name
Original Subscription Start Date: subscriptions.original_subscription_start_date
Plan ID: subscriptions.plan_id
Has Fraudulent Charge Refunds (Yes / No): subscriptions.has_fraudulent_charge_refunds
Has Fraudulent Charges (Yes / No): subscriptions.has_fraudulent_charges
row: 68
col: 0
width: 24
height: 7
filters:
- name: Provider
title: Provider
type: field_filter
default_value: "-NULL"
allow_multiple_values: true
required: false
ui_config:
type: advanced
display: popover
model: mozilla_vpn
explore: subscriptions
listens_to_filters: [Provider, Plan Interval Type, Subscription Start Date, Country,
Pricing Plan]
field: subscriptions.provider
- name: Pricing Plan
title: Pricing Plan
type: field_filter
default_value: ''
allow_multiple_values: true
required: false
ui_config:
type: checkboxes
display: popover
model: mozilla_vpn
explore: subscriptions
listens_to_filters: [Pricing Plan, Plan Interval Type, Subscription Start Date,
Country, Provider]
field: subscriptions.pricing_plan
- name: Country
title: Country
type: field_filter
default_value: ''
allow_multiple_values: true
required: false
ui_config:
type: checkboxes
display: popover
model: mozilla_vpn
explore: subscriptions
listens_to_filters: [Country, Plan Interval Type, Subscription Start Date, Pricing
Plan, Provider]
field: subscriptions.country_name
- name: Subscription Start Date
title: Subscription Start Date
type: field_filter
default_value: 6 month
allow_multiple_values: true
required: false
ui_config:
type: advanced
display: popover
options: []
model: mozilla_vpn
explore: subscriptions
listens_to_filters: []
field: subscriptions.subscription_start_month
- name: Plan Interval Type
title: Plan Interval Type
type: field_filter
default_value: ''
allow_multiple_values: true
required: false
ui_config:
type: checkboxes
display: popover
options: []
model: mozilla_vpn
explore: subscriptions
listens_to_filters: [Subscription Start Date, Country, Pricing Plan, Provider]
field: subscriptions.plan_interval_type
- name: Product Name
title: Product Name
type: field_filter
default_value: Mozilla VPN,Mozilla VPN & Firefox Relay
allow_multiple_values: true
required: false
ui_config:
type: checkboxes
display: popover
model: mozilla_vpn
explore: subscriptions
listens_to_filters: []
field: subscriptions.product_name
- name: Original Subscription Start Date
title: Original Subscription Start Date
type: field_filter
default_value: 6 month
allow_multiple_values: true
required: false
ui_config:
type: advanced
display: popover
options: []
model: mozilla_vpn
explore: subscriptions
listens_to_filters: []
field: subscriptions.original_subscription_start_date
- name: Has Fraudulent Charge Refunds (Yes / No)
title: Has Fraudulent Charge Refunds (Yes / No)
type: field_filter
default_value: 'No'
allow_multiple_values: true
required: false
ui_config:
type: dropdown_menu
display: overflow
model: mozilla_vpn
explore: subscriptions
listens_to_filters: []
field: subscriptions.has_fraudulent_charge_refunds
- name: Has Fraudulent Charges (Yes / No)
title: Has Fraudulent Charges (Yes / No)
type: field_filter
default_value: 'No'
allow_multiple_values: true
required: false
ui_config:
type: dropdown_menu
display: overflow
model: mozilla_vpn
explore: subscriptions
listens_to_filters: []
field: subscriptions.has_fraudulent_charges
- name: Plan ID
title: Plan ID
type: field_filter
default_value: -"price_1MzNRCJNcmPzuWtRMCwUWADu"
allow_multiple_values: true
required: false
ui_config:
type: advanced
display: overflow
model: mozilla_vpn
explore: subscriptions
listens_to_filters: []
field: subscriptions.plan_id