From 756d1c54d58bb9b44cc7c20213b16cbc6a27ecc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oriol=20Roqu=C3=A9=20Paniagua?= Date: Mon, 29 Jul 2024 13:16:19 +0000 Subject: [PATCH] Merged PR 2429: Business KPIs - Revenue details Exposes the following metrics: 1. Invoiced Booking Fees 1. Invoiced Listing Fees 1. Invoiced Verification Fees 1. Invoiced Guesty Fees 1. Invoiced E-Deposit Fees 1. Deposit Fees 1. Waiver Amount Paid by Guests 1. Waiver Amount Paid back to Hosts 1. Check-In Hero Amount Paid by Guests This PR is only for Global metrics, the one by deal id will follow separately. Keep in mind that merging this PR will make the data appear in the report. Related work items: #18914 --- ...hly_aggregated_metrics_history_by_deal.sql | 21 +++-- .../cross/int_mtd_aggregated_metrics.sql | 82 ++++++++++++++++++- .../int_mtd_vs_previous_year_metrics.sql | 26 +++--- ...ero__monthly_invoicing_history_by_deal.sql | 4 +- .../xero/int_xero__mtd_invoicing_metrics.sql | 4 +- .../general/mtd_aggregated_metrics.sql | 19 ++++- 6 files changed, 130 insertions(+), 26 deletions(-) diff --git a/models/intermediate/cross/int_monthly_aggregated_metrics_history_by_deal.sql b/models/intermediate/cross/int_monthly_aggregated_metrics_history_by_deal.sql index 1d7ab43..8d0ead8 100644 --- a/models/intermediate/cross/int_monthly_aggregated_metrics_history_by_deal.sql +++ b/models/intermediate/cross/int_monthly_aggregated_metrics_history_by_deal.sql @@ -65,7 +65,6 @@ select invoicing.xero_listing_net_fees_in_gbp, invoicing.xero_verification_net_fees_in_gbp, invoicing.xero_operator_net_fees_in_gbp, - invoicing.xero_waiver_net_fees_in_gbp, -- APIs REVENUE -- invoicing.xero_apis_net_fees_in_gbp, @@ -79,19 +78,25 @@ select -- GUEST REVENUE AND PAYMENTS -- guest_payments.deposit_fees_in_gbp, guest_payments.waiver_payments_in_gbp, + invoicing.xero_waiver_paid_back_to_host_in_gbp, + nullif( + coalesce(guest_payments.waiver_payments_in_gbp, 0) + + coalesce(invoicing.xero_waiver_paid_back_to_host_in_gbp, 0), + 0 + ) as waiver_net_fees_in_gbp, guest_payments.checkin_cover_fees_in_gbp, guest_payments.total_guest_payments_in_gbp, guest_payments.total_guest_income_in_gbp, nullif( coalesce(guest_payments.total_guest_income_in_gbp, 0) - + coalesce(invoicing.xero_waiver_net_fees_in_gbp, 0), + + coalesce(invoicing.xero_waiver_paid_back_to_host_in_gbp, 0), 0 ) as total_guest_revenue_in_gbp, -- TOTAL REVENUE -- nullif( coalesce(guest_payments.total_guest_income_in_gbp, 0) - + coalesce(invoicing.xero_waiver_net_fees_in_gbp, 0) + + coalesce(invoicing.xero_waiver_paid_back_to_host_in_gbp, 0) + coalesce(invoicing.xero_operator_net_fees_in_gbp, 0) + coalesce(invoicing.xero_apis_net_fees_in_gbp, 0), 0 @@ -106,14 +111,14 @@ select ) as guest_payments_per_paid_guest_journey, nullif( coalesce(guest_payments.total_guest_income_in_gbp, 0) - + coalesce(invoicing.xero_waiver_net_fees_in_gbp, 0), + + coalesce(invoicing.xero_waiver_paid_back_to_host_in_gbp, 0), 0 ) / nullif( guest_journeys.completed_guest_journeys, 0 ) as guest_revenue_per_completed_guest_journey, nullif( coalesce(guest_payments.total_guest_income_in_gbp, 0) - + coalesce(invoicing.xero_waiver_net_fees_in_gbp, 0), + + coalesce(invoicing.xero_waiver_paid_back_to_host_in_gbp, 0), 0 ) / nullif( guest_journeys.paid_guest_journeys, 0 @@ -122,14 +127,14 @@ select -- TOTAL REVENUE WEIGHTED METRICS -- ( coalesce(guest_payments.total_guest_income_in_gbp, 0) - + coalesce(invoicing.xero_waiver_net_fees_in_gbp, 0) + + coalesce(invoicing.xero_waiver_paid_back_to_host_in_gbp, 0) + coalesce(invoicing.xero_operator_net_fees_in_gbp, 0) + coalesce(invoicing.xero_apis_net_fees_in_gbp, 0) ) / nullif(bookings.created_bookings, 0) as total_revenue_per_created_booking, ( coalesce(guest_payments.total_guest_income_in_gbp, 0) - + coalesce(invoicing.xero_waiver_net_fees_in_gbp, 0) + + coalesce(invoicing.xero_waiver_paid_back_to_host_in_gbp, 0) + coalesce(invoicing.xero_operator_net_fees_in_gbp, 0) + coalesce(invoicing.xero_apis_net_fees_in_gbp, 0) ) / nullif( @@ -137,7 +142,7 @@ select ) as total_revenue_per_created_guest_journey, ( coalesce(guest_payments.total_guest_income_in_gbp, 0) - + coalesce(invoicing.xero_waiver_net_fees_in_gbp, 0) + + coalesce(invoicing.xero_waiver_paid_back_to_host_in_gbp, 0) + coalesce(invoicing.xero_operator_net_fees_in_gbp, 0) + coalesce(invoicing.xero_apis_net_fees_in_gbp, 0) ) / nullif( diff --git a/models/intermediate/cross/int_mtd_aggregated_metrics.sql b/models/intermediate/cross/int_mtd_aggregated_metrics.sql index 1444889..96ee022 100644 --- a/models/intermediate/cross/int_mtd_aggregated_metrics.sql +++ b/models/intermediate/cross/int_mtd_aggregated_metrics.sql @@ -199,7 +199,7 @@ "relative_increment": "relative_increment_total_revenue_in_gbp", "number_format": "currency_gbp", }, - { + { "order_by": 201, "metric": "Total Revenue per Booking Created", "value": "total_revenue_per_created_booking", @@ -239,6 +239,30 @@ "relative_increment": "relative_increment_xero_operator_net_fees_in_gbp", "number_format": "currency_gbp", }, + { + "order_by": 225, + "metric": "Invoiced Booking Fees", + "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", + }, + { + "order_by": 226, + "metric": "Invoiced Listing Fees", + "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", + }, + { + "order_by": 227, + "metric": "Invoiced Verification Fees", + "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", + }, { "order_by": 230, "metric": "Invoiced APIs Revenue", @@ -247,6 +271,22 @@ "relative_increment": "relative_increment_xero_apis_net_fees_in_gbp", "number_format": "currency_gbp", }, + { + "order_by": 235, + "metric": "Invoiced Guesty Fees", + "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", + }, + { + "order_by": 236, + "metric": "Invoiced E-Deposit Fees", + "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", + }, { "order_by": 250, "metric": "Guest Revenue", @@ -271,6 +311,46 @@ "relative_increment": "relative_increment_guest_revenue_per_paid_guest_journey", "number_format": "currency_gbp", }, + { + "order_by": 260, + "metric": "Deposit Fees", + "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", + }, + { + "order_by": 262, + "metric": "Waiver Amount Paid by Guests", + "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", + }, + { + "order_by": 263, + "metric": "Waiver Amount Paid back to Hosts", + "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", + }, + { + "order_by": 264, + "metric": "Waiver Net Fees", + "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", + }, + { + "order_by": 265, + "metric": "Check-In Hero Amount Paid by Guests", + "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", + }, { "order_by": 270, "metric": "Host Resolutions Amount Paid", diff --git a/models/intermediate/cross/int_mtd_vs_previous_year_metrics.sql b/models/intermediate/cross/int_mtd_vs_previous_year_metrics.sql index 2c80fce..f7e50a1 100644 --- a/models/intermediate/cross/int_mtd_vs_previous_year_metrics.sql +++ b/models/intermediate/cross/int_mtd_vs_previous_year_metrics.sql @@ -80,7 +80,6 @@ with invoicing.xero_listing_net_fees_in_gbp, invoicing.xero_verification_net_fees_in_gbp, invoicing.xero_operator_net_fees_in_gbp, - invoicing.xero_waiver_net_fees_in_gbp, -- APIs REVENUE -- invoicing.xero_apis_net_fees_in_gbp, @@ -94,19 +93,25 @@ with -- GUEST REVENUE AND PAYMENTS -- guest_payments.deposit_fees_in_gbp, guest_payments.waiver_payments_in_gbp, + invoicing.xero_waiver_paid_back_to_host_in_gbp, + nullif( + coalesce(guest_payments.waiver_payments_in_gbp, 0) + + coalesce(invoicing.xero_waiver_paid_back_to_host_in_gbp, 0), + 0 + ) as waiver_net_fees_in_gbp, guest_payments.checkin_cover_fees_in_gbp, guest_payments.total_guest_payments_in_gbp, guest_payments.total_guest_income_in_gbp, nullif( coalesce(guest_payments.total_guest_income_in_gbp, 0) - + coalesce(invoicing.xero_waiver_net_fees_in_gbp, 0), + + coalesce(invoicing.xero_waiver_paid_back_to_host_in_gbp, 0), 0 ) as total_guest_revenue_in_gbp, -- TOTAL REVENUE -- nullif( coalesce(guest_payments.total_guest_income_in_gbp, 0) - + coalesce(invoicing.xero_waiver_net_fees_in_gbp, 0) + + coalesce(invoicing.xero_waiver_paid_back_to_host_in_gbp, 0) + coalesce(invoicing.xero_operator_net_fees_in_gbp, 0) + coalesce(invoicing.xero_apis_net_fees_in_gbp, 0), 0 @@ -121,14 +126,14 @@ with ) as guest_payments_per_paid_guest_journey, nullif( coalesce(guest_payments.total_guest_income_in_gbp, 0) - + coalesce(invoicing.xero_waiver_net_fees_in_gbp, 0), + + coalesce(invoicing.xero_waiver_paid_back_to_host_in_gbp, 0), 0 ) / nullif( guest_journeys.completed_guest_journeys, 0 ) as guest_revenue_per_completed_guest_journey, nullif( coalesce(guest_payments.total_guest_income_in_gbp, 0) - + coalesce(invoicing.xero_waiver_net_fees_in_gbp, 0), + + coalesce(invoicing.xero_waiver_paid_back_to_host_in_gbp, 0), 0 ) / nullif( guest_journeys.paid_guest_journeys, 0 @@ -137,14 +142,14 @@ with -- TOTAL REVENUE WEIGHTED METRICS -- ( coalesce(guest_payments.total_guest_income_in_gbp, 0) - + coalesce(invoicing.xero_waiver_net_fees_in_gbp, 0) + + coalesce(invoicing.xero_waiver_paid_back_to_host_in_gbp, 0) + coalesce(invoicing.xero_operator_net_fees_in_gbp, 0) + coalesce(invoicing.xero_apis_net_fees_in_gbp, 0) ) / nullif(bookings.created_bookings, 0) as total_revenue_per_created_booking, ( coalesce(guest_payments.total_guest_income_in_gbp, 0) - + coalesce(invoicing.xero_waiver_net_fees_in_gbp, 0) + + coalesce(invoicing.xero_waiver_paid_back_to_host_in_gbp, 0) + coalesce(invoicing.xero_operator_net_fees_in_gbp, 0) + coalesce(invoicing.xero_apis_net_fees_in_gbp, 0) ) / nullif( @@ -152,7 +157,7 @@ with ) as total_revenue_per_created_guest_journey, ( coalesce(guest_payments.total_guest_income_in_gbp, 0) - + coalesce(invoicing.xero_waiver_net_fees_in_gbp, 0) + + coalesce(invoicing.xero_waiver_paid_back_to_host_in_gbp, 0) + coalesce(invoicing.xero_operator_net_fees_in_gbp, 0) + coalesce(invoicing.xero_apis_net_fees_in_gbp, 0) ) / nullif( @@ -160,7 +165,7 @@ with ) as total_revenue_per_deals_booked_in_month, ( coalesce(guest_payments.total_guest_income_in_gbp, 0) - + coalesce(invoicing.xero_waiver_net_fees_in_gbp, 0) + + coalesce(invoicing.xero_waiver_paid_back_to_host_in_gbp, 0) + coalesce(invoicing.xero_operator_net_fees_in_gbp, 0) + coalesce(invoicing.xero_apis_net_fees_in_gbp, 0) ) / nullif( @@ -235,7 +240,6 @@ select {{ calculate_safe_relative_increment("xero_listing_net_fees_in_gbp") }}, {{ calculate_safe_relative_increment("xero_verification_net_fees_in_gbp") }}, {{ calculate_safe_relative_increment("xero_operator_net_fees_in_gbp") }}, - {{ calculate_safe_relative_increment("xero_waiver_net_fees_in_gbp") }}, -- APIs REVENUE -- {{ calculate_safe_relative_increment("xero_apis_net_fees_in_gbp") }}, @@ -249,6 +253,8 @@ select -- GUEST REVENUE AND PAYMENTS -- {{ calculate_safe_relative_increment("deposit_fees_in_gbp") }}, {{ calculate_safe_relative_increment("waiver_payments_in_gbp") }}, + {{ calculate_safe_relative_increment("xero_waiver_paid_back_to_host_in_gbp") }}, + {{ calculate_safe_relative_increment("waiver_net_fees_in_gbp") }}, {{ calculate_safe_relative_increment("checkin_cover_fees_in_gbp") }}, {{ calculate_safe_relative_increment("total_guest_payments_in_gbp") }}, {{ calculate_safe_relative_increment("total_guest_income_in_gbp") }}, diff --git a/models/intermediate/xero/int_xero__monthly_invoicing_history_by_deal.sql b/models/intermediate/xero/int_xero__monthly_invoicing_history_by_deal.sql index 7c1db20..2232676 100644 --- a/models/intermediate/xero/int_xero__monthly_invoicing_history_by_deal.sql +++ b/models/intermediate/xero/int_xero__monthly_invoicing_history_by_deal.sql @@ -101,7 +101,7 @@ with then sdm.line_amount_wo_taxes_in_gbp else 0 end - ) as xero_waiver_net_fees_in_gbp + ) as xero_waiver_paid_back_to_host_in_gbp from int_xero__sales_denom_mart sdm where upper(sdm.document_status) in {{ relevant_document_statuses }} @@ -140,7 +140,7 @@ select 0 ) as xero_apis_net_fees_in_gbp, -- WAIVERS PAID BACK TO HOST -- - hnf.xero_waiver_net_fees_in_gbp, + hnf.xero_waiver_paid_back_to_host_in_gbp, -- HOST RESOLUTIONS -- rhp.xero_host_resolution_amount_paid_in_gbp, rhp.xero_host_resolution_payment_count diff --git a/models/intermediate/xero/int_xero__mtd_invoicing_metrics.sql b/models/intermediate/xero/int_xero__mtd_invoicing_metrics.sql index e85a9f5..e092b80 100644 --- a/models/intermediate/xero/int_xero__mtd_invoicing_metrics.sql +++ b/models/intermediate/xero/int_xero__mtd_invoicing_metrics.sql @@ -104,7 +104,7 @@ with then sdm.line_amount_wo_taxes_in_gbp else 0 end - ) as xero_waiver_net_fees_in_gbp + ) as xero_waiver_paid_back_to_host_in_gbp from int_dates_mtd d inner join int_xero__sales_denom_mart sdm @@ -148,7 +148,7 @@ select 0 ) as xero_apis_net_fees_in_gbp, -- WAIVERS PAID BACK TO HOST -- - hnf.xero_waiver_net_fees_in_gbp, + hnf.xero_waiver_paid_back_to_host_in_gbp, -- HOST RESOLUTIONS -- rhp.xero_host_resolution_amount_paid_in_gbp, rhp.xero_host_resolution_payment_count diff --git a/models/reporting/general/mtd_aggregated_metrics.sql b/models/reporting/general/mtd_aggregated_metrics.sql index fc5cbb3..fe1d00d 100644 --- a/models/reporting/general/mtd_aggregated_metrics.sql +++ b/models/reporting/general/mtd_aggregated_metrics.sql @@ -37,9 +37,22 @@ from int_mtd_aggregated_metrics */ where ( - -- Not show current + previous month if revenue metric or resolution - (lower(metric) like '%revenue%' or lower(metric) like '%resolutions%') + -- Not show current + previous month if the metric depends on invoicing cycle + ( + lower(metric) like '%revenue%' + or lower(metric) like '%resolutions%' + or lower(metric) like '%invoiced%' + or lower(metric) like '%back to host%' + or lower(metric) like '%waiver net fees%' + ) and {{ is_date_before_previous_month("date") }} ) -- Keep all history for the rest of metrics - or not (lower(metric) like '%revenue%' or lower(metric) like '%resolutions%') + or not + ( + lower(metric) like '%revenue%' + or lower(metric) like '%resolutions%' + or lower(metric) like '%invoiced%' + or lower(metric) like '%back to host%' + or lower(metric) like '%waiver net fees%' + )