subscription_platform/dashboards/monitor_saasboard__churn.dashboard.lookml (1,450 lines of code) (raw):
---
- dashboard: monitor_saasboard__churn
title: Monitor SaaSboard - Churn
layout: newspaper
preferred_viewer: dashboards-next
description: ''
preferred_slug: Zzhzz7eA9gBjXRmRWSnHQ0
elements:
- name: ''
type: text
title_text: ''
body_text: |
<div style="border-radius: 5px; padding: 5px 10px; background: #412399; height: 60px;">
<nav style="font-size: 20px;">
<a href="https://mozilla.cloud.looker.com/dashboards/subscription_platform::monitor_saasboard__active_subscriptions" style="color: #efefef; padding: 5px 25px; float: left; line-height: 40px;">
Active Subscriptions
</a>
<a href="https://mozilla.cloud.looker.com/dashboards/subscription_platform::monitor_saasboard__subscriptions_growth" style="color: #efefef; padding: 5px 25px; float: left; line-height: 40px;">
Subscriptions Growth
</a>
<a href="https://mozilla.cloud.looker.com/dashboards/subscription_platform::monitor_saasboard__retention" style="color: #efefef; padding: 5px 25px; float: left; line-height: 40px;">
Retention
</a>
<a style="color: #efefef; padding: 5px 25px; float: left; line-height: 40px; border: 1px solid white; font-weight: bold; text-decoration: underline;">
Churn
</a>
<a href="https://mozilla.cloud.looker.com/dashboards/subscription_platform::monitor_saasboard__revenue" style="color: #efefef; padding: 5px 25px; float: left; line-height: 40px;">
Revenue
</a>
<!--<a href="" style="color: #efefef; padding: 5px 25px; float: left; line-height: 40px;">
Docs
</a>-->
</nav>
</div>
row: 0
col: 0
width: 24
height: 2
- name: " (2)"
type: text
title_text: ''
body_text: |-
<div style='background-color: #ffffdd; padding: 5px 10px; border: solid 3px #ededed; border-radius: 5px; height:160px'>
This dashboard captures the current state of <strong>subscription churn</strong>.
<ul>
<li>A cohort refers to a group of subscriptions that started in a particular month. For example, cohort 2024-02 includes all subscriptions that started in the month of February 2024.</li>
<li>Churn rate is the percentage of not-retained subscriptions out of the number retained from the previous month.</li>
</ul>
<br>
</div>
row: 2
col: 0
width: 16
height: 4
- title: Most Recent Data
name: Most Recent Data
model: subscription_platform
explore: daily_active_logical_subscriptions
type: single_value
fields: [daily_active_logical_subscriptions.date_date]
filters:
daily_active_logical_subscriptions.date_date: 1 month
sorts: [daily_active_logical_subscriptions.date_date desc]
limit: 1
column_limit: 50
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
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: {}
row: 2
col: 16
width: 8
height: 4
- title: Churn by Subscription Month Number
name: Churn by Subscription Month Number
model: subscription_platform
explore: logical_subscriptions
type: looker_column
fields: [retention_by_month.subscription_month_number, retention_by_month.churned_subscription_count,
retention_by_month.previously_retained_subscription_count]
sorts: [retention_by_month.subscription_month_number]
limit: 500
column_limit: 50
dynamic_fields:
- category: table_calculation
expression: "${retention_by_month.churned_subscription_count} / ${retention_by_month.previously_retained_subscription_count}"
label: Churn Rate
value_format:
value_format_name: percent_0
_kind_hint: measure
table_calculation: churn_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: false
show_silhouette: false
totals_color: "#808080"
y_axes: [{label: !!null '', orientation: left, series: [{axisId: retention_by_month.churned_subscription_count,
id: retention_by_month.churned_subscription_count, name: Churned Subscription
Count}], showLabels: true, showValues: true, unpinAxis: false, tickDensity: custom,
tickDensityCustom: 70, type: linear}, {label: !!null '', orientation: right,
series: [{axisId: churn_rate, id: churn_rate, name: Churn Rate}], showLabels: true,
showValues: true, valueFormat: 0%, unpinAxis: false, tickDensity: default,
tickDensityCustom: 5, type: linear}]
x_axis_zoom: true
y_axis_zoom: true
hide_legend: true
series_types:
churn_rate: line
series_colors:
retention_by_month.churned_subscription_count: "#FF7139"
defaults_version: 1
hidden_fields: [retention_by_month.previously_retained_subscription_count]
listen:
Subscription Start Date: logical_subscriptions.started_at_date
Payment Provider: logical_subscriptions.payment_provider
Plan Interval: logical_subscriptions.plan_interval
Plan: logical_subscriptions.plan_summary
Region: countries.region_name
Country: countries.name
Has Fraudulent Charges (Yes / No): logical_subscriptions.has_fraudulent_charges
Has Refunds (Yes / No): logical_subscriptions.has_refunds
Service ID: subscription_services.id
row: 6
col: 0
width: 12
height: 8
- title: Total Churn Rate by Cohort
name: Total Churn Rate by Cohort
model: subscription_platform
explore: logical_subscriptions
type: looker_line
fields: [retention_by_month.churned_subscription_count, retention_by_month.previously_retained_subscription_count,
logical_subscriptions.started_at_month]
sorts: [logical_subscriptions.started_at_month]
limit: 500
column_limit: 50
dynamic_fields:
- category: table_calculation
expression: "${retention_by_month.churned_subscription_count} / ${retention_by_month.previously_retained_subscription_count}"
label: Churn Rate
value_format:
value_format_name: percent_0
_kind_hint: measure
table_calculation: churn_rate
_type_hint: number
x_axis_gridlines: false
y_axis_gridlines: true
show_view_names: false
show_y_axis_labels: false
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
show_null_points: false
interpolation: linear
y_axes: [{label: !!null '', orientation: left, series: [{axisId: churn_rate, id: churn_rate,
name: Churn Rate}], showLabels: false, showValues: true, valueFormat: 0%,
unpinAxis: false, tickDensity: default, tickDensityCustom: 5, type: linear}]
x_axis_label: Cohort
x_axis_zoom: true
y_axis_zoom: true
series_colors:
retention_by_month.churned_subscription_count: "#FF7139"
churn_rate: "#073072"
x_axis_datetime_label: "%Y-%m"
x_axis_label_rotation:
ordering: none
show_null_labels: false
show_totals_labels: false
show_silhouette: false
totals_color: "#808080"
defaults_version: 1
hidden_fields: [retention_by_month.previously_retained_subscription_count, retention_by_month.churned_subscription_count]
listen:
Subscription Start Date: logical_subscriptions.started_at_date
Payment Provider: logical_subscriptions.payment_provider
Plan Interval: logical_subscriptions.plan_interval
Plan: logical_subscriptions.plan_summary
Region: countries.region_name
Country: countries.name
Has Fraudulent Charges (Yes / No): logical_subscriptions.has_fraudulent_charges
Has Refunds (Yes / No): logical_subscriptions.has_refunds
Service ID: subscription_services.id
row: 6
col: 12
width: 12
height: 8
- title: Pooled Churn
name: Pooled Churn
model: subscription_platform
explore: monthly_active_logical_subscriptions
type: looker_column
fields: [monthly_active_logical_subscriptions.month_month, monthly_active_logical_subscriptions.logical_subscription_count,
next_month_still_active_subscriptions.logical_subscription_count]
filters:
monthly_active_logical_subscriptions.was_active_at_month_start: 'Yes'
next_month_still_active_subscriptions.logical_subscription_count: ">0"
sorts: [monthly_active_logical_subscriptions.month_month]
limit: 500
column_limit: 50
dynamic_fields:
- category: table_calculation
expression: "${monthly_active_logical_subscriptions.logical_subscription_count}\
\ - ${next_month_still_active_subscriptions.logical_subscription_count}"
label: Churned Subscription Count
value_format:
value_format_name:
_kind_hint: measure
table_calculation: churned_subscription_count
_type_hint: number
- category: table_calculation
expression: "(${monthly_active_logical_subscriptions.logical_subscription_count}\
\ - ${next_month_still_active_subscriptions.logical_subscription_count}) /\
\ ${monthly_active_logical_subscriptions.logical_subscription_count}"
label: Pooled Churn Rate
value_format:
value_format_name: percent_0
_kind_hint: measure
table_calculation: pooled_churn_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: false
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: time
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: churned_subscription_count,
id: churned_subscription_count, name: Churned Subscription Count}], showLabels: true,
showValues: true, unpinAxis: false, tickDensity: default, type: linear}, {
label: !!null '', orientation: right, series: [{axisId: pooled_churn_rate,
id: pooled_churn_rate, name: Pooled Churn Rate}], showLabels: true, showValues: true,
valueFormat: 0%, unpinAxis: false, tickDensity: default, tickDensityCustom: 5,
type: linear}]
x_axis_zoom: true
y_axis_zoom: true
hide_legend: true
series_types:
pooled_churn_rate: line
series_colors:
pooled_churn_rate: "#0060E0"
churned: "#FF7139"
churned_subscription_count: "#FF7139"
series_labels:
churned: Churned Subscription Count
show_null_points: false
interpolation: linear
hidden_pivots: {}
defaults_version: 1
hidden_fields: [monthly_active_logical_subscriptions.logical_subscription_count,
next_month_still_active_subscriptions.logical_subscription_count]
listen:
Subscription Start Date: monthly_active_logical_subscriptions.subscription__started_at_date
Payment Provider: monthly_active_logical_subscriptions.subscription__payment_provider
Plan Interval: monthly_active_logical_subscriptions.subscription__plan_interval
Plan: monthly_active_logical_subscriptions.subscription__plan_summary
Region: countries.region_name
Country: countries.name
Has Fraudulent Charges (Yes / No): current_subscription_state.has_fraudulent_charges
Has Refunds (Yes / No): current_subscription_state.has_refunds
Service ID: subscription_services.id
row: 14
col: 0
width: 12
height: 8
- title: Daily Churn
name: Daily Churn
model: subscription_platform
explore: logical_subscriptions
type: looker_column
fields: [logical_subscriptions.ended_at_date, logical_subscriptions.logical_subscription_count]
filters: {}
sorts: [logical_subscriptions.ended_at_date desc]
limit: 5000
column_limit: 50
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: 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
ordering: none
show_null_labels: false
show_totals_labels: false
show_silhouette: false
totals_color: "#808080"
y_axes: [{label: '', orientation: left, series: [{axisId: logical_subscriptions.logical_subscription_count,
id: logical_subscriptions.logical_subscription_count, name: Logical Subscription
Count}], showLabels: false, showValues: true, unpinAxis: false, tickDensity: default,
tickDensityCustom: 5, type: linear}]
x_axis_zoom: true
y_axis_zoom: true
series_colors:
logical_subscriptions.logical_subscription_count: "#FF7139"
series_labels:
logical_subscriptions.logical_subscription_count: Churned Subscription Count
show_null_points: true
interpolation: linear
defaults_version: 1
listen:
Subscription Start Date: logical_subscriptions.started_at_date
Payment Provider: logical_subscriptions.payment_provider
Plan Interval: logical_subscriptions.plan_interval
Plan: logical_subscriptions.plan_summary
Region: countries.region_name
Country: countries.name
Has Fraudulent Charges (Yes / No): logical_subscriptions.has_fraudulent_charges
Has Refunds (Yes / No): logical_subscriptions.has_refunds
Service ID: subscription_services.id
row: 14
col: 12
width: 12
height: 8
- name: " (3)"
type: text
title_text: ''
body_text: |-
<div style="border-top: solid 2px #e0e0e0;">
<h3><b>Upcoming Cancellations and Auto-Renew Disabling</b></h3>
</div>
row: 22
col: 0
width: 24
height: 2
- title: Upcoming Cancellations by Plan Interval
name: Upcoming Cancellations by Plan Interval
model: subscription_platform
explore: logical_subscriptions
type: looker_column
fields: [logical_subscriptions.logical_subscription_count, logical_subscriptions.current_period_ends_at_month,
logical_subscriptions.plan_interval]
pivots: [logical_subscriptions.plan_interval]
fill_fields: [logical_subscriptions.current_period_ends_at_month]
filters:
logical_subscriptions.auto_renew: 'No'
logical_subscriptions.current_period_ends_at_date: after 0 days ago
sorts: [logical_subscriptions.current_period_ends_at_month, logical_subscriptions.plan_interval]
limit: 500
column_limit: 50
dynamic_fields:
- category: table_calculation
expression: add_days(-1, ${table_metadata.last_modified_date})
label: Date Calculation
value_format:
value_format_name:
_kind_hint: dimension
table_calculation: date_calculation
_type_hint: date
is_disabled: true
x_axis_gridlines: false
y_axis_gridlines: true
show_view_names: false
show_y_axis_labels: false
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: true
y_axis_scale_mode: linear
x_axis_reversed: false
y_axis_reversed: false
plot_size_by_field: false
trellis: ''
stacking: normal
limit_displayed_rows: false
legend_position: center
point_style: none
show_value_labels: true
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_zoom: true
y_axis_zoom: true
series_colors:
logical_subscriptions.logical_subscription_count: "#ffc286"
hidden_pivots: {}
show_null_points: true
interpolation: linear
defaults_version: 1
note_state: collapsed
note_display: hover
note_text: The Subscription Start Date filter does not apply to this chart.
listen:
Payment Provider: logical_subscriptions.payment_provider
Plan Interval: logical_subscriptions.plan_interval
Plan: logical_subscriptions.plan_summary
Region: countries.region_name
Country: countries.name
Has Fraudulent Charges (Yes / No): logical_subscriptions.has_fraudulent_charges
Has Refunds (Yes / No): logical_subscriptions.has_refunds
Service ID: subscription_services.id
row: 24
col: 0
width: 12
height: 8
- title: Days to Disable Auto-Renew by Plan Interval
name: Days to Disable Auto-Renew by Plan Interval
model: subscription_platform
explore: logical_subscription_events
type: looker_area
fields: [auto_renew_disabled_date_difference_days, logical_subscription_events.subscription__plan_interval,
logical_subscription_events.logical_subscription_count]
pivots: [logical_subscription_events.subscription__plan_interval]
filters:
logical_subscription_events.reason: Auto-Renew Disabled
logical_subscription_events.type: Auto-Renew Change
sorts: [logical_subscription_events.subscription__plan_interval, auto_renew_disabled_date_difference_days]
limit: 500
column_limit: 50
dynamic_fields:
- category: dimension
expression: diff_days(${logical_subscription_events.subscription__started_at_date},
${logical_subscription_events.subscription__auto_renew_disabled_at_date})
label: Auto-Renew Disabled Date Difference (Days)
value_format:
value_format_name:
dimension: auto_renew_disabled_date_difference_days
_kind_hint: dimension
_type_hint: number
- args:
- logical_subscription_events.logical_subscription_count
calculation_type: percent_of_column_sum
category: table_calculation
based_on: logical_subscription_events.logical_subscription_count
label: Percent of Logical Subscription Events Logical Subscription Count
source_field: logical_subscription_events.logical_subscription_count
table_calculation: percent_of_logical_subscription_events_logical_subscription_count
value_format:
value_format_name: percent_0
_kind_hint: measure
_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: none
show_value_labels: false
label_density: 25
x_axis_scale: auto
y_axis_combined: true
show_null_points: true
interpolation: linear
show_totals_labels: false
show_silhouette: false
totals_color: "#808080"
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
defaults_version: 1
hidden_fields: [logical_subscription_events.logical_subscription_count]
note_state: collapsed
note_display: hover
note_text: Time to disabling auto-renew is measured relative to the subscription
start date.
listen:
Subscription Start Date: logical_subscription_events.subscription__started_at_date
Payment Provider: logical_subscription_events.subscription__payment_provider
Plan Interval: logical_subscription_events.subscription__plan_interval
Plan: logical_subscription_events.subscription__plan_summary
Region: countries.region_name
Country: countries.name
Has Fraudulent Charges (Yes / No): logical_subscription_events.subscription__has_fraudulent_charges
Has Refunds (Yes / No): logical_subscription_events.subscription__has_refunds
Service ID: subscription_services.id
row: 24
col: 12
width: 12
height: 8
- title: Auto-Renew Disabled Occurrences
name: Auto-Renew Disabled Occurrences
model: subscription_platform
explore: logical_subscription_events
type: looker_column
fields: [logical_subscription_events.timestamp_date, logical_subscription_events.subscription__plan_interval,
logical_subscription_events.logical_subscription_count]
pivots: [logical_subscription_events.subscription__plan_interval]
fill_fields: [logical_subscription_events.timestamp_date]
filters:
logical_subscription_events.reason: Auto-Renew Disabled
logical_subscription_events.type: Auto-Renew Change
sorts: [logical_subscription_events.timestamp_date desc, logical_subscription_events.subscription__plan_interval]
limit: 500
column_limit: 50
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: normal
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"
x_axis_zoom: true
y_axis_zoom: true
hidden_pivots: {}
show_null_points: true
interpolation: linear
defaults_version: 1
listen:
Subscription Start Date: logical_subscription_events.timestamp_date
Payment Provider: logical_subscription_events.subscription__payment_provider
Plan Interval: logical_subscription_events.subscription__plan_interval
Plan: logical_subscription_events.subscription__plan_summary
Region: countries.region_name
Country: countries.name
Has Fraudulent Charges (Yes / No): logical_subscription_events.subscription__has_fraudulent_charges
Has Refunds (Yes / No): logical_subscription_events.subscription__has_refunds
Service ID: subscription_services.id
row: 32
col: 0
width: 12
height: 8
- title: Percent of Active Subscriptions with Auto-Renew Disabled
name: Percent of Active Subscriptions with Auto-Renew Disabled
model: subscription_platform
explore: daily_active_logical_subscriptions
type: looker_line
fields: [auto_renew_disabled_subscription_count, daily_active_logical_subscriptions.date_date,
daily_active_logical_subscriptions.subscription__plan_interval, daily_active_logical_subscriptions.logical_subscription_count]
pivots: [daily_active_logical_subscriptions.subscription__plan_interval]
fill_fields: [daily_active_logical_subscriptions.date_date]
filters:
daily_active_logical_subscriptions.was_active_at_day_end: 'Yes'
sorts: [daily_active_logical_subscriptions.date_date desc, daily_active_logical_subscriptions.subscription__plan_interval]
limit: 500
column_limit: 50
dynamic_fields:
- category: measure
expression:
label: Auto-Renew Disabled Subscription Count
value_format:
value_format_name:
based_on: daily_active_logical_subscriptions.logical_subscription_count
_kind_hint: measure
measure: auto_renew_disabled_subscription_count
type: count_distinct
_type_hint: number
filters:
current_subscription_state.auto_renew: 'No'
- category: table_calculation
expression: "${auto_renew_disabled_subscription_count} / ${daily_active_logical_subscriptions.logical_subscription_count}"
label: Percent Active Subscriptions Disabled Auto-Renew
value_format:
value_format_name: percent_1
_kind_hint: measure
table_calculation: percent_active_subscriptions_disabled_auto_renew
_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: none
show_value_labels: false
label_density: 25
x_axis_scale: auto
y_axis_combined: true
show_null_points: true
interpolation: linear
hidden_pivots: {}
defaults_version: 1
hidden_fields: [auto_renew_disabled_subscription_count, daily_active_logical_subscriptions.logical_subscription_count]
listen:
Subscription Start Date: daily_active_logical_subscriptions.date_date
Payment Provider: daily_active_logical_subscriptions.subscription__payment_provider
Plan Interval: daily_active_logical_subscriptions.subscription__plan_interval
Plan: daily_active_logical_subscriptions.subscription__plan_summary
Region: countries.region_name
Country: countries.name
Has Fraudulent Charges (Yes / No): daily_active_logical_subscriptions.subscription__has_fraudulent_charges
Has Refunds (Yes / No): daily_active_logical_subscriptions.subscription__has_refunds
Service ID: subscription_services.id
row: 32
col: 12
width: 12
height: 8
- name: " (4)"
type: text
title_text: ''
body_text: |-
<div style="border-top: solid 2px #e0e0e0;">
<h3><b>Churn by Plan Interval</b></h3>
</div>
row: 40
col: 0
width: 24
height: 2
- title: Churn Rate by Plan Interval
name: Churn Rate by Plan Interval
model: subscription_platform
explore: logical_subscriptions
type: looker_line
fields: [retention_by_month.churned_subscription_count, retention_by_month.previously_retained_subscription_count,
retention_by_month.subscription_month_number, logical_subscriptions.plan_interval]
pivots: [logical_subscriptions.plan_interval]
sorts: [retention_by_month.subscription_month_number, logical_subscriptions.plan_interval]
limit: 500
column_limit: 50
dynamic_fields:
- category: table_calculation
expression: "${retention_by_month.churned_subscription_count} / ${retention_by_month.previously_retained_subscription_count}"
label: Churn Rate
value_format:
value_format_name: percent_0
_kind_hint: measure
table_calculation: churn_rate
_type_hint: number
x_axis_gridlines: false
y_axis_gridlines: true
show_view_names: false
show_y_axis_labels: false
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
show_null_points: true
interpolation: linear
x_axis_zoom: true
y_axis_zoom: true
series_colors:
retention_by_month.churned_subscription_count: "#FF7139"
churn_rate: "#073072"
ordering: none
show_null_labels: false
show_totals_labels: false
show_silhouette: false
totals_color: "#808080"
defaults_version: 1
hidden_fields: [retention_by_month.previously_retained_subscription_count, retention_by_month.churned_subscription_count]
hidden_pivots: {}
listen:
Subscription Start Date: logical_subscriptions.started_at_date
Payment Provider: logical_subscriptions.payment_provider
Plan Interval: logical_subscriptions.plan_interval
Plan: logical_subscriptions.plan_summary
Region: countries.region_name
Country: countries.name
Has Fraudulent Charges (Yes / No): logical_subscriptions.has_fraudulent_charges
Has Refunds (Yes / No): logical_subscriptions.has_refunds
Service ID: subscription_services.id
row: 42
col: 0
width: 24
height: 6
- title: Churn Rate Table by Plan Interval
name: Churn Rate Table by Plan Interval
model: subscription_platform
explore: logical_subscriptions
type: looker_grid
fields: [retention_by_month.churned_subscription_count, retention_by_month.previously_retained_subscription_count,
retention_by_month.subscription_month_number, logical_subscriptions.plan_interval,
logical_subscriptions.plan_interval_months]
pivots: [retention_by_month.subscription_month_number]
sorts: [retention_by_month.subscription_month_number, logical_subscriptions.plan_interval_months]
limit: 500
column_limit: 50
dynamic_fields:
- category: table_calculation
expression: "${retention_by_month.churned_subscription_count} / ${retention_by_month.previously_retained_subscription_count}"
label: Churn Rate
value_format:
value_format_name: percent_1
_kind_hint: measure
table_calculation: churn_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: gray
limit_displayed_rows: false
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
truncate_header: false
minimum_column_width: 75
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 ''}]
x_axis_gridlines: false
y_axis_gridlines: true
y_axes: [{label: !!null '', orientation: left, series: [{axisId: retention_by_month.churned_subscription_count,
id: retention_by_month.churned_subscription_count, name: Churned Subscription
Count}], showLabels: true, showValues: true, unpinAxis: false, tickDensity: custom,
tickDensityCustom: 70, type: linear}, {label: !!null '', orientation: left,
series: [{axisId: churn_rate, id: churn_rate, name: Churn Rate}], showLabels: true,
showValues: true, unpinAxis: false, tickDensity: default, tickDensityCustom: 5,
type: linear}]
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
x_axis_zoom: true
y_axis_zoom: true
trellis: ''
stacking: ''
legend_position: center
point_style: circle_outline
series_colors:
retention_by_month.churned_subscription_count: "#FF7139"
churn_rate: "#073072"
show_value_labels: true
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"
defaults_version: 1
hidden_fields: [retention_by_month.previously_retained_subscription_count, retention_by_month.churned_subscription_count,
logical_subscriptions.plan_interval_months]
hidden_pivots: {}
show_null_points: true
interpolation: linear
listen:
Subscription Start Date: logical_subscriptions.started_at_date
Payment Provider: logical_subscriptions.payment_provider
Plan Interval: logical_subscriptions.plan_interval
Plan: logical_subscriptions.plan_summary
Region: countries.region_name
Country: countries.name
Has Fraudulent Charges (Yes / No): logical_subscriptions.has_fraudulent_charges
Has Refunds (Yes / No): logical_subscriptions.has_refunds
Service ID: subscription_services.id
row: 48
col: 0
width: 24
height: 4
- title: Churn Counts Table by Plan Interval
name: Churn Counts Table by Plan Interval
model: subscription_platform
explore: logical_subscriptions
type: looker_grid
fields: [retention_by_month.churned_subscription_count, retention_by_month.subscription_month_number,
logical_subscriptions.plan_interval, logical_subscriptions.plan_interval_months]
pivots: [retention_by_month.subscription_month_number]
sorts: [retention_by_month.subscription_month_number, logical_subscriptions.plan_interval_months]
limit: 500
column_limit: 50
dynamic_fields:
- category: table_calculation
expression: "${retention_by_month.churned_subscription_count} / ${retention_by_month.previously_retained_subscription_count}"
label: Churn Rate
value_format:
value_format_name: percent_2
_kind_hint: measure
table_calculation: churn_rate
_type_hint: number
is_disabled: true
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: gray
limit_displayed_rows: false
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
truncate_header: false
minimum_column_width: 75
series_cell_visualizations:
retention_by_month.churned_subscription_count:
is_active: false
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: 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
y_axes: [{label: !!null '', orientation: left, series: [{axisId: retention_by_month.churned_subscription_count,
id: retention_by_month.churned_subscription_count, name: Churned Subscription
Count}], showLabels: true, showValues: true, unpinAxis: false, tickDensity: custom,
tickDensityCustom: 70, type: linear}, {label: !!null '', orientation: left,
series: [{axisId: churn_rate, id: churn_rate, name: Churn Rate}], showLabels: true,
showValues: true, unpinAxis: false, tickDensity: default, tickDensityCustom: 5,
type: linear}]
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
x_axis_zoom: true
y_axis_zoom: true
trellis: ''
stacking: ''
legend_position: center
point_style: circle_outline
series_colors:
retention_by_month.churned_subscription_count: "#FF7139"
churn_rate: "#073072"
show_value_labels: true
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"
defaults_version: 1
hidden_fields: [logical_subscriptions.plan_interval_months]
hidden_pivots: {}
show_null_points: true
interpolation: linear
listen:
Subscription Start Date: logical_subscriptions.started_at_date
Payment Provider: logical_subscriptions.payment_provider
Plan Interval: logical_subscriptions.plan_interval
Plan: logical_subscriptions.plan_summary
Region: countries.region_name
Country: countries.name
Has Fraudulent Charges (Yes / No): logical_subscriptions.has_fraudulent_charges
Has Refunds (Yes / No): logical_subscriptions.has_refunds
Service ID: subscription_services.id
row: 52
col: 0
width: 24
height: 4
- name: " (5)"
type: text
title_text: ''
body_text: |-
<div style="border-top: solid 2px #e0e0e0;">
<h3><b>Churn by Cohort</b></h3>
</div>
row: 56
col: 0
width: 24
height: 2
- title: Cohort Churn Rate by Subscription Month Number
name: Cohort Churn Rate by Subscription Month Number
model: subscription_platform
explore: logical_subscriptions
type: looker_line
fields: [logical_subscriptions.started_at_month, retention_by_month.churned_subscription_count,
retention_by_month.previously_retained_subscription_count, retention_by_month.subscription_month_number]
pivots: [retention_by_month.subscription_month_number]
sorts: [retention_by_month.subscription_month_number, logical_subscriptions.started_at_month]
limit: 500
column_limit: 50
dynamic_fields:
- category: table_calculation
expression: "${retention_by_month.churned_subscription_count} / ${retention_by_month.previously_retained_subscription_count}"
label: Churn Rate
value_format:
value_format_name: percent_0
_kind_hint: measure
table_calculation: churn_rate
_type_hint: number
is_disabled: false
- category: table_calculation
expression: "${retention_by_month.churned_subscription_count}"
label: Churn
value_format:
value_format_name:
_kind_hint: measure
table_calculation: churn
_type_hint: number
is_disabled: true
x_axis_gridlines: false
y_axis_gridlines: true
show_view_names: false
show_y_axis_labels: false
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
show_null_points: false
interpolation: linear
x_axis_label: Cohort
x_axis_zoom: true
y_axis_zoom: true
x_axis_datetime_label: "%Y-%m"
hidden_pivots: {}
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
defaults_version: 1
hidden_fields: [retention_by_month.churned_subscription_count, retention_by_month.previously_retained_subscription_count]
listen:
Subscription Start Date: logical_subscriptions.started_at_date
Payment Provider: logical_subscriptions.payment_provider
Plan Interval: logical_subscriptions.plan_interval
Plan: logical_subscriptions.plan_summary
Region: countries.region_name
Country: countries.name
Has Fraudulent Charges (Yes / No): logical_subscriptions.has_fraudulent_charges
Has Refunds (Yes / No): logical_subscriptions.has_refunds
Service ID: subscription_services.id
row: 58
col: 0
width: 24
height: 7
- title: Churn Rate Table by Cohort
name: Churn Rate Table by Cohort
model: subscription_platform
explore: logical_subscriptions
type: looker_grid
fields: [logical_subscriptions.started_at_month, retention_by_month.churned_subscription_count,
retention_by_month.previously_retained_subscription_count, retention_by_month.subscription_month_number]
pivots: [retention_by_month.subscription_month_number]
sorts: [retention_by_month.subscription_month_number, logical_subscriptions.started_at_month]
limit: 500
column_limit: 50
dynamic_fields:
- category: table_calculation
expression: "${retention_by_month.churned_subscription_count} / ${retention_by_month.previously_retained_subscription_count}"
label: Churn Rate
value_format:
value_format_name: percent_1
_kind_hint: measure
table_calculation: churn_rate
_type_hint: number
- category: table_calculation
expression: "${retention_by_month.churned_subscription_count}"
label: Churn
value_format:
value_format_name:
_kind_hint: measure
table_calculation: churn
_type_hint: number
is_disabled: true
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: gray
limit_displayed_rows: false
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
truncate_header: false
minimum_column_width: 75
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 ''}]
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
x_axis_zoom: true
y_axis_zoom: true
trellis: ''
stacking: ''
legend_position: center
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
hidden_pivots: {}
defaults_version: 1
hidden_fields: [retention_by_month.churned_subscription_count, retention_by_month.previously_retained_subscription_count]
listen:
Subscription Start Date: logical_subscriptions.started_at_date
Payment Provider: logical_subscriptions.payment_provider
Plan Interval: logical_subscriptions.plan_interval
Plan: logical_subscriptions.plan_summary
Region: countries.region_name
Country: countries.name
Has Fraudulent Charges (Yes / No): logical_subscriptions.has_fraudulent_charges
Has Refunds (Yes / No): logical_subscriptions.has_refunds
Service ID: subscription_services.id
row: 65
col: 0
width: 24
height: 5
- title: Churn Counts Table by Cohort
name: Churn Counts Table by Cohort
model: subscription_platform
explore: logical_subscriptions
type: looker_grid
fields: [logical_subscriptions.started_at_month, retention_by_month.churned_subscription_count,
retention_by_month.subscription_month_number]
pivots: [retention_by_month.subscription_month_number]
sorts: [retention_by_month.subscription_month_number, logical_subscriptions.started_at_month]
limit: 500
column_limit: 50
dynamic_fields:
- category: table_calculation
expression: "${retention_by_month.churned_subscription_count} / ${retention_by_month.previously_retained_subscription_count}"
label: Churn Rate
value_format:
value_format_name: percent_2
_kind_hint: measure
table_calculation: churn_rate
_type_hint: number
is_disabled: true
- category: table_calculation
expression: "${retention_by_month.churned_subscription_count}"
label: Churn
value_format:
value_format_name:
_kind_hint: measure
table_calculation: churn
_type_hint: number
is_disabled: true
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: gray
limit_displayed_rows: false
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
color_application:
collection_id: mozilla
palette_id: mozilla-categorical-0
show_sql_query_menu_options: false
show_totals: true
show_row_totals: true
truncate_header: false
minimum_column_width: 75
series_cell_visualizations:
retention_by_month.churned_subscription_count:
is_active: false
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 ''}]
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
x_axis_zoom: true
y_axis_zoom: true
trellis: ''
stacking: ''
legend_position: center
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
hidden_pivots: {}
defaults_version: 1
hidden_fields: []
ordering: none
show_null_labels: false
show_totals_labels: false
show_silhouette: false
totals_color: "#808080"
listen:
Subscription Start Date: logical_subscriptions.started_at_date
Payment Provider: logical_subscriptions.payment_provider
Plan Interval: logical_subscriptions.plan_interval
Plan: logical_subscriptions.plan_summary
Region: countries.region_name
Country: countries.name
Has Fraudulent Charges (Yes / No): logical_subscriptions.has_fraudulent_charges
Has Refunds (Yes / No): logical_subscriptions.has_refunds
Service ID: subscription_services.id
row: 70
col: 0
width: 24
height: 5
filters:
- name: Subscription Start Date
title: Subscription Start Date
type: field_filter
default_value: after 2024-02-01
allow_multiple_values: true
required: false
ui_config:
type: advanced
display: popover
options: []
model: subscription_platform
explore: logical_subscriptions
listens_to_filters: []
field: logical_subscriptions.started_at_date
- name: Payment Provider
title: Payment Provider
type: field_filter
default_value: ''
allow_multiple_values: true
required: false
ui_config:
type: checkboxes
display: popover
model: subscription_platform
explore: logical_subscriptions
listens_to_filters: [Subscription Start Date, Service ID]
field: logical_subscriptions.payment_provider
- name: Plan Interval
title: Plan Interval
type: field_filter
default_value: ''
allow_multiple_values: true
required: false
ui_config:
type: checkboxes
display: popover
model: subscription_platform
explore: logical_subscriptions
listens_to_filters: [Subscription Start Date, Service ID]
field: logical_subscriptions.plan_interval
- name: Plan
title: Plan
type: field_filter
default_value: ''
allow_multiple_values: true
required: false
ui_config:
type: checkboxes
display: popover
model: subscription_platform
explore: logical_subscriptions
listens_to_filters: [Subscription Start Date, Plan Interval, Service ID]
field: logical_subscriptions.plan_summary
- name: Region
title: Region
type: field_filter
default_value: ''
allow_multiple_values: true
required: false
ui_config:
type: checkboxes
display: popover
model: subscription_platform
explore: logical_subscriptions
listens_to_filters: [Subscription Start Date, Service ID]
field: countries.region_name
- name: Country
title: Country
type: field_filter
default_value: ''
allow_multiple_values: true
required: false
ui_config:
type: checkboxes
display: popover
model: subscription_platform
explore: logical_subscriptions
listens_to_filters: [Region, Subscription Start Date, Service ID]
field: countries.name
- 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: subscription_platform
explore: logical_subscriptions
listens_to_filters: []
field: logical_subscriptions.has_fraudulent_charges
- name: Has Refunds (Yes / No)
title: Has Refunds (Yes / No)
type: field_filter
default_value: ''
allow_multiple_values: true
required: false
ui_config:
type: dropdown_menu
display: overflow
model: subscription_platform
explore: logical_subscriptions
listens_to_filters: []
field: logical_subscriptions.has_refunds
- name: Service ID
title: Service ID
type: field_filter
default_value: Monitor
allow_multiple_values: true
required: true
ui_config:
type: button_toggles
display: overflow
options:
- Monitor
model: subscription_platform
explore: logical_subscriptions
listens_to_filters: []
field: subscription_services.id