# Description Exposes Churn Rates into Main KPIs, specifically Revenue Churn Rate, Bookings Churn Rate and Listings Churn Rate. This is based on the average approach. Additionally, it adds these 3 metrics in the kpis_additive_metrics_per_dimension_are_consistent test. Additionally, it removes from int_mtd_vs_previous_year_metrics the computation of the additive Churn Rates. The removal of further unused code will be handled in a separated PR. # Checklist - [X] The edited models and dependants run properly with production data. - [X] The edited models are sufficiently documented. - [X] The edited models contain PK tests, and I've ran and passed them. - [NA] I have checked for DRY opportunities with other models and docs. - [NA] I've picked the right materialization for the affected models. # Other - [ ] Check if a full-refresh is required after this PR is merged. Related work items: #22691
476 lines
19 KiB
SQL
476 lines
19 KiB
SQL
{% set metrics = [
|
|
{
|
|
"order_by": 1,
|
|
"metric": "Created Bookings",
|
|
"value": "created_bookings",
|
|
"previous_year_value": "previous_year_created_bookings",
|
|
"relative_increment": "relative_increment_created_bookings",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 2,
|
|
"metric": "Cancelled Bookings",
|
|
"value": "cancelled_bookings",
|
|
"previous_year_value": "previous_year_cancelled_bookings",
|
|
"relative_increment": "relative_increment_cancelled_bookings",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "negative",
|
|
},
|
|
{
|
|
"order_by": 3,
|
|
"metric": "Checkout Bookings",
|
|
"value": "check_out_bookings",
|
|
"previous_year_value": "previous_year_check_out_bookings",
|
|
"relative_increment": "relative_increment_check_out_bookings",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 4,
|
|
"metric": "Est. Billable Bookings",
|
|
"value": "billable_bookings",
|
|
"previous_year_value": "previous_year_billable_bookings",
|
|
"relative_increment": "relative_increment_billable_bookings",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 10,
|
|
"metric": "Guest Journey Created",
|
|
"value": "created_guest_journeys",
|
|
"previous_year_value": "previous_year_created_guest_journeys",
|
|
"relative_increment": "relative_increment_created_guest_journeys",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 11,
|
|
"metric": "Guest Journey Started",
|
|
"value": "started_guest_journeys",
|
|
"previous_year_value": "previous_year_started_guest_journeys",
|
|
"relative_increment": "relative_increment_started_guest_journeys",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 12,
|
|
"metric": "Guest Journey Completed",
|
|
"value": "completed_guest_journeys",
|
|
"previous_year_value": "previous_year_completed_guest_journeys",
|
|
"relative_increment": "relative_increment_completed_guest_journeys",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 13,
|
|
"metric": "Guest Journey with Payment",
|
|
"value": "paid_guest_journeys",
|
|
"previous_year_value": "previous_year_paid_guest_journeys",
|
|
"relative_increment": "relative_increment_paid_guest_journeys",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 20,
|
|
"metric": "New Deals",
|
|
"value": "new_deals",
|
|
"previous_year_value": "previous_year_new_deals",
|
|
"relative_increment": "relative_increment_new_deals",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 21,
|
|
"metric": "First Time Booked Deals",
|
|
"value": "first_time_booked_deals",
|
|
"previous_year_value": "previous_year_first_time_booked_deals",
|
|
"relative_increment": "relative_increment_first_time_booked_deals",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 22,
|
|
"metric": "Deals Booked in Month",
|
|
"value": "deals_booked_in_month",
|
|
"previous_year_value": "previous_year_deals_booked_in_month",
|
|
"relative_increment": "relative_increment_deals_booked_in_month",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 23,
|
|
"metric": "Deals Booked in 6 Months",
|
|
"value": "deals_booked_in_6_months",
|
|
"previous_year_value": "previous_year_deals_booked_in_6_months",
|
|
"relative_increment": "relative_increment_deals_booked_in_6_months",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 24,
|
|
"metric": "Deals Booked in 12 Months",
|
|
"value": "deals_booked_in_12_months",
|
|
"previous_year_value": "previous_year_deals_booked_in_12_months",
|
|
"relative_increment": "relative_increment_deals_booked_in_12_months",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 25,
|
|
"metric": "Churning Deals",
|
|
"value": "churning_deals",
|
|
"previous_year_value": "previous_year_churning_deals",
|
|
"relative_increment": "relative_increment_churning_deals",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "negative",
|
|
},
|
|
{
|
|
"order_by": 30,
|
|
"metric": "New Listings",
|
|
"value": "new_listings",
|
|
"previous_year_value": "previous_year_new_listings",
|
|
"relative_increment": "relative_increment_new_listings",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 31,
|
|
"metric": "First Time Booked Listings",
|
|
"value": "first_time_booked_listings",
|
|
"previous_year_value": "previous_year_first_time_booked_listings",
|
|
"relative_increment": "relative_increment_first_time_booked_listings",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 32,
|
|
"metric": "Listings Booked in Month",
|
|
"value": "listings_booked_in_month",
|
|
"previous_year_value": "previous_year_listings_booked_in_month",
|
|
"relative_increment": "relative_increment_listings_booked_in_month",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 33,
|
|
"metric": "Listings Booked in 6 Months",
|
|
"value": "listings_booked_in_6_months",
|
|
"previous_year_value": "previous_year_listings_booked_in_6_months",
|
|
"relative_increment": "relative_increment_listings_booked_in_6_months",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 34,
|
|
"metric": "Listings Booked in 12 Months",
|
|
"value": "listings_booked_in_12_months",
|
|
"previous_year_value": "previous_year_listings_booked_in_12_months",
|
|
"relative_increment": "relative_increment_listings_booked_in_12_months",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 35,
|
|
"metric": "Churning Listings",
|
|
"value": "churning_listings",
|
|
"previous_year_value": "previous_year_churning_listings",
|
|
"relative_increment": "relative_increment_churning_listings",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "negative",
|
|
},
|
|
{
|
|
"order_by": 40,
|
|
"metric": "Host Resolutions Payment Count",
|
|
"value": "xero_host_resolution_payment_count",
|
|
"previous_year_value": "previous_year_xero_host_resolution_payment_count",
|
|
"relative_increment": "relative_increment_xero_host_resolution_payment_count",
|
|
"number_format": "integer",
|
|
"increment_sign_format": "negative",
|
|
},
|
|
{
|
|
"order_by": 100,
|
|
"metric": "Guest Journey Start Rate",
|
|
"value": "start_rate_guest_journey",
|
|
"previous_year_value": "previous_year_start_rate_guest_journey",
|
|
"relative_increment": "relative_increment_start_rate_guest_journey",
|
|
"number_format": "percentage",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 101,
|
|
"metric": "Guest Journey Completion Rate",
|
|
"value": "completion_rate_guest_journey",
|
|
"previous_year_value": "previous_year_completion_rate_guest_journey",
|
|
"relative_increment": "relative_increment_completion_rate_guest_journey",
|
|
"number_format": "percentage",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 102,
|
|
"metric": "Guest Journey Incompletion Rate",
|
|
"value": "incompletion_rate_guest_journey",
|
|
"previous_year_value": "previous_year_incompletion_rate_guest_journey",
|
|
"relative_increment": "relative_increment_incompletion_rate_guest_journey",
|
|
"number_format": "percentage",
|
|
"increment_sign_format": "negative",
|
|
},
|
|
{
|
|
"order_by": 103,
|
|
"metric": "Guest Journey Payment Rate",
|
|
"value": "payment_rate_guest_journey",
|
|
"previous_year_value": "previous_year_payment_rate_guest_journey",
|
|
"relative_increment": "relative_increment_payment_rate_guest_journey",
|
|
"number_format": "percentage",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 120,
|
|
"metric": "Revenue Churn Rate",
|
|
"value": "total_revenue_churn_average_contribution",
|
|
"previous_year_value": "previous_year_total_revenue_churn_average_contribution",
|
|
"relative_increment": "relative_increment_total_revenue_churn_average_contribution",
|
|
"number_format": "percentage",
|
|
"increment_sign_format": "negative",
|
|
},
|
|
{
|
|
"order_by": 121,
|
|
"metric": "Bookings Churn Rate",
|
|
"value": "created_bookings_churn_average_contribution",
|
|
"previous_year_value": "previous_year_created_bookings_churn_average_contribution",
|
|
"relative_increment": "relative_increment_created_bookings_churn_average_contribution",
|
|
"number_format": "percentage",
|
|
"increment_sign_format": "negative",
|
|
},
|
|
{
|
|
"order_by": 122,
|
|
"metric": "Listings Churn Rate",
|
|
"value": "listings_booked_in_month_churn_average_contribution",
|
|
"previous_year_value": "previous_year_listings_booked_in_month_churn_average_contribution",
|
|
"relative_increment": "relative_increment_listings_booked_in_month_churn_average_contribution",
|
|
"number_format": "percentage",
|
|
"increment_sign_format": "negative",
|
|
},
|
|
{
|
|
"order_by": 200,
|
|
"metric": "Total Revenue",
|
|
"value": "total_revenue_in_gbp",
|
|
"previous_year_value": "previous_year_total_revenue_in_gbp",
|
|
"relative_increment": "relative_increment_total_revenue_in_gbp",
|
|
"number_format": "currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 201,
|
|
"metric": "Total Revenue per Booking Created",
|
|
"value": "total_revenue_per_created_booking",
|
|
"previous_year_value": "previous_year_total_revenue_per_created_booking",
|
|
"relative_increment": "relative_increment_total_revenue_per_created_booking",
|
|
"number_format": "converted_metric_currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 202,
|
|
"metric": "Total Revenue per Guest Journey Created",
|
|
"value": "total_revenue_per_created_guest_journey",
|
|
"previous_year_value": "previous_year_total_revenue_per_created_guest_journey",
|
|
"relative_increment": "relative_increment_total_revenue_per_created_guest_journey",
|
|
"number_format": "converted_metric_currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 203,
|
|
"metric": "Total Revenue per Deals Booked in Month",
|
|
"value": "total_revenue_per_deals_booked_in_month",
|
|
"previous_year_value": "previous_year_total_revenue_per_deals_booked_in_month",
|
|
"relative_increment": "relative_increment_total_revenue_per_deals_booked_in_month",
|
|
"number_format": "converted_metric_currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 204,
|
|
"metric": "Total Revenue per Listings Booked in Month",
|
|
"value": "total_revenue_per_listings_booked_in_month",
|
|
"previous_year_value": "previous_year_total_revenue_per_listings_booked_in_month",
|
|
"relative_increment": "relative_increment_total_revenue_per_listings_booked_in_month",
|
|
"number_format": "converted_metric_currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 220,
|
|
"metric": "Invoiced Operator Revenue",
|
|
"value": "xero_operator_net_fees_in_gbp",
|
|
"previous_year_value": "previous_year_xero_operator_net_fees_in_gbp",
|
|
"relative_increment": "relative_increment_xero_operator_net_fees_in_gbp",
|
|
"number_format": "currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 225,
|
|
"metric": "Invoiced Booking Fees Revenue",
|
|
"value": "xero_booking_net_fees_in_gbp",
|
|
"previous_year_value": "previous_year_xero_booking_net_fees_in_gbp",
|
|
"relative_increment": "relative_increment_xero_booking_net_fees_in_gbp",
|
|
"number_format": "currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 226,
|
|
"metric": "Invoiced Listing Fees Revenue",
|
|
"value": "xero_listing_net_fees_in_gbp",
|
|
"previous_year_value": "previous_year_xero_listing_net_fees_in_gbp",
|
|
"relative_increment": "relative_increment_xero_listing_net_fees_in_gbp",
|
|
"number_format": "currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 227,
|
|
"metric": "Invoiced Verification Fees Revenue",
|
|
"value": "xero_verification_net_fees_in_gbp",
|
|
"previous_year_value": "previous_year_xero_verification_net_fees_in_gbp",
|
|
"relative_increment": "relative_increment_xero_verification_net_fees_in_gbp",
|
|
"number_format": "currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 230,
|
|
"metric": "Invoiced APIs Revenue",
|
|
"value": "xero_apis_net_fees_in_gbp",
|
|
"previous_year_value": "previous_year_xero_apis_net_fees_in_gbp",
|
|
"relative_increment": "relative_increment_xero_apis_net_fees_in_gbp",
|
|
"number_format": "currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 235,
|
|
"metric": "Invoiced Athena Revenue",
|
|
"value": "xero_guesty_net_fees_in_gbp",
|
|
"previous_year_value": "previous_year_xero_guesty_net_fees_in_gbp",
|
|
"relative_increment": "relative_increment_xero_guesty_net_fees_in_gbp",
|
|
"number_format": "currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 236,
|
|
"metric": "Invoiced E-Deposit Revenue",
|
|
"value": "xero_e_deposit_net_fees_in_gbp",
|
|
"previous_year_value": "previous_year_xero_e_deposit_net_fees_in_gbp",
|
|
"relative_increment": "relative_increment_xero_e_deposit_net_fees_in_gbp",
|
|
"number_format": "currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 250,
|
|
"metric": "Guest Revenue",
|
|
"value": "total_guest_payments_in_gbp",
|
|
"previous_year_value": "previous_year_total_guest_payments_in_gbp",
|
|
"relative_increment": "relative_increment_total_guest_payments_in_gbp",
|
|
"number_format": "currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 251,
|
|
"metric": "Guest Revenue per Guest Journey Completed",
|
|
"value": "guest_payments_per_completed_guest_journey",
|
|
"previous_year_value": "previous_year_guest_payments_per_completed_guest_journey",
|
|
"relative_increment": "relative_increment_guest_payments_per_completed_guest_journey",
|
|
"number_format": "converted_metric_currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 252,
|
|
"metric": "Guest Revenue per Guest Journey with Payment",
|
|
"value": "guest_payments_per_paid_guest_journey",
|
|
"previous_year_value": "previous_year_guest_payments_per_paid_guest_journey",
|
|
"relative_increment": "relative_increment_guest_payments_per_paid_guest_journey",
|
|
"number_format": "converted_metric_currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 260,
|
|
"metric": "Deposit Fees Revenue",
|
|
"value": "deposit_fees_in_gbp",
|
|
"previous_year_value": "previous_year_deposit_fees_in_gbp",
|
|
"relative_increment": "relative_increment_deposit_fees_in_gbp",
|
|
"number_format": "currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 262,
|
|
"metric": "Waiver Revenue",
|
|
"value": "waiver_payments_in_gbp",
|
|
"previous_year_value": "previous_year_waiver_payments_in_gbp",
|
|
"relative_increment": "relative_increment_waiver_payments_in_gbp",
|
|
"number_format": "currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 263,
|
|
"metric": "Damage Host-Waiver Payments",
|
|
"value": "xero_waiver_paid_back_to_host_in_gbp",
|
|
"previous_year_value": "previous_year_xero_waiver_paid_back_to_host_in_gbp",
|
|
"relative_increment": "relative_increment_xero_waiver_paid_back_to_host_in_gbp",
|
|
"number_format": "currency_gbp",
|
|
"increment_sign_format": "negative",
|
|
},
|
|
{
|
|
"order_by": 264,
|
|
"metric": "Waiver Retained",
|
|
"value": "waiver_net_fees_in_gbp",
|
|
"previous_year_value": "previous_year_waiver_net_fees_in_gbp",
|
|
"relative_increment": "relative_increment_waiver_net_fees_in_gbp",
|
|
"number_format": "currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 265,
|
|
"metric": "Check-In Hero Revenue",
|
|
"value": "checkin_cover_fees_in_gbp",
|
|
"previous_year_value": "previous_year_checkin_cover_fees_in_gbp",
|
|
"relative_increment": "relative_increment_checkin_cover_fees_in_gbp",
|
|
"number_format": "currency_gbp",
|
|
"increment_sign_format": "positive",
|
|
},
|
|
{
|
|
"order_by": 270,
|
|
"metric": "Host Resolutions Amount Paid",
|
|
"value": "xero_host_resolution_amount_paid_in_gbp",
|
|
"previous_year_value": "previous_year_xero_host_resolution_amount_paid_in_gbp",
|
|
"relative_increment": "relative_increment_xero_host_resolution_amount_paid_in_gbp",
|
|
"number_format": "currency_gbp",
|
|
"increment_sign_format": "negative",
|
|
},
|
|
] %}
|
|
with
|
|
int_mtd_vs_previous_year_metrics as (
|
|
select * from {{ ref("int_mtd_vs_previous_year_metrics") }}
|
|
)
|
|
{% for metric in metrics %}
|
|
select
|
|
year,
|
|
month,
|
|
day,
|
|
is_end_of_month,
|
|
is_current_month,
|
|
first_day_month,
|
|
date,
|
|
dimension,
|
|
dimension_value,
|
|
previous_year_date,
|
|
{{ metric.order_by }} as order_by,
|
|
-- quotation marks added because text format
|
|
'{{ metric.number_format }}' as number_format,
|
|
'{{ metric.metric }}' as metric,
|
|
{{ metric.value }} as value,
|
|
{{ metric.previous_year_value }} as previous_year_value,
|
|
{{ metric.relative_increment }} as relative_increment,
|
|
case
|
|
when '{{ metric.increment_sign_format }}' = 'negative'
|
|
then {{ metric.relative_increment }} * -1
|
|
else {{ metric.relative_increment }}
|
|
end as relative_increment_with_sign_format
|
|
from int_mtd_vs_previous_year_metrics
|
|
{% if not loop.last %}
|
|
union all
|
|
{% endif %}
|
|
{% endfor %}
|