Merged PR 4757: Creates a Total Booking Fees metric (Old dash + New dash)

# Description

Main Changes:
* Computes the total booking fees in `int_kpis__metric_daily_invoiced_revenue`
* Propagates within KPIs, including schema and tests
* Propagates within cross in both "by deal" and "by dimension/global"
* Propagates to main kpis tests

Small fix:
* In `int_mtd_vs_previous_year_metrics`, manual formatting because sqlfmt is broken on this model...

# 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.
- [X] I have checked for DRY opportunities with other models and docs.
- [X] 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: #28560
This commit is contained in:
Oriol Roqué Paniagua 2025-03-20 13:45:44 +00:00
parent 93b31854f7
commit 098ab51439
12 changed files with 101 additions and 8 deletions

View file

@ -166,6 +166,7 @@ select
invoiced_revenue.xero_sex_offenders_check_net_fees_in_gbp, invoiced_revenue.xero_sex_offenders_check_net_fees_in_gbp,
invoiced_revenue.xero_protection_pro_net_fees_in_gbp, invoiced_revenue.xero_protection_pro_net_fees_in_gbp,
-- GLOBAL -- -- GLOBAL --
invoiced_revenue.xero_booking_net_fees_in_gbp,
invoiced_revenue.xero_operator_net_fees_in_gbp, invoiced_revenue.xero_operator_net_fees_in_gbp,
-- APIs REVENUE -- -- APIs REVENUE --

View file

@ -422,6 +422,15 @@
"number_format": "currency_gbp", "number_format": "currency_gbp",
"increment_sign_format": "positive", "increment_sign_format": "positive",
}, },
{
"order_by": 224,
"metric": "Invoiced Total 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": 225, "order_by": 225,
"metric": "Invoiced Old Dashboard Booking Fees Revenue", "metric": "Invoiced Old Dashboard Booking Fees Revenue",

View file

@ -252,6 +252,7 @@ with
invoiced_revenue.xero_sex_offenders_check_net_fees_in_gbp, invoiced_revenue.xero_sex_offenders_check_net_fees_in_gbp,
invoiced_revenue.xero_protection_pro_net_fees_in_gbp, invoiced_revenue.xero_protection_pro_net_fees_in_gbp,
-- GLOBAL -- -- GLOBAL --
invoiced_revenue.xero_booking_net_fees_in_gbp,
invoiced_revenue.xero_operator_net_fees_in_gbp, invoiced_revenue.xero_operator_net_fees_in_gbp,
-- APIs REVENUE -- -- APIs REVENUE --
@ -267,7 +268,8 @@ with
as host_resolution_amount_paid_per_created_booking, as host_resolution_amount_paid_per_created_booking,
{{ {{
return_capped_value( return_capped_value(
"cast(host_resolutions.xero_host_resolution_payment_count as decimal) / created_bookings.created_bookings", "cast(host_resolutions.xero_host_resolution_payment_count as decimal)
/ created_bookings.created_bookings",
-1, -1,
1, 1,
) )
@ -349,7 +351,17 @@ with
) as revenue_retained_in_gbp, ) as revenue_retained_in_gbp,
{{ {{
return_capped_value( return_capped_value(
"nullif( coalesce(guest_payments.total_guest_payments_in_gbp, 0) + coalesce(invoiced_revenue.xero_operator_net_fees_in_gbp, 0) + coalesce(invoiced_revenue.xero_apis_net_fees_in_gbp, 0) + coalesce(invoiced_revenue.xero_waiver_paid_back_to_host_in_gbp, 0), 0 ) / nullif( coalesce(guest_payments.total_guest_payments_in_gbp, 0) + coalesce(invoiced_revenue.xero_operator_net_fees_in_gbp, 0) + coalesce(invoiced_revenue.xero_apis_net_fees_in_gbp, 0), 0 )", "nullif(
coalesce(guest_payments.total_guest_payments_in_gbp, 0)
+ coalesce(invoiced_revenue.xero_operator_net_fees_in_gbp, 0)
+ coalesce(invoiced_revenue.xero_apis_net_fees_in_gbp, 0)
+ coalesce(invoiced_revenue.xero_waiver_paid_back_to_host_in_gbp, 0)
,0)
/ nullif(
coalesce(guest_payments.total_guest_payments_in_gbp, 0)
+ coalesce(invoiced_revenue.xero_operator_net_fees_in_gbp, 0)
+ coalesce(invoiced_revenue.xero_apis_net_fees_in_gbp, 0)
,0)",
-1, -1,
1, 1,
) )
@ -367,7 +379,18 @@ with
) as revenue_retained_post_resolutions_in_gbp, ) as revenue_retained_post_resolutions_in_gbp,
{{ {{
return_capped_value( return_capped_value(
"nullif( coalesce(guest_payments.total_guest_payments_in_gbp, 0) + coalesce(invoiced_revenue.xero_operator_net_fees_in_gbp, 0) + coalesce(invoiced_revenue.xero_apis_net_fees_in_gbp, 0) + coalesce(invoiced_revenue.xero_waiver_paid_back_to_host_in_gbp, 0) + coalesce(host_resolutions.xero_host_resolution_amount_paid_in_gbp, 0), 0 ) / nullif( coalesce(guest_payments.total_guest_payments_in_gbp, 0) + coalesce(invoiced_revenue.xero_operator_net_fees_in_gbp, 0) + coalesce(invoiced_revenue.xero_apis_net_fees_in_gbp, 0), 0 )", "nullif(
coalesce(guest_payments.total_guest_payments_in_gbp, 0)
+ coalesce(invoiced_revenue.xero_operator_net_fees_in_gbp, 0)
+ coalesce(invoiced_revenue.xero_apis_net_fees_in_gbp, 0)
+ coalesce(invoiced_revenue.xero_waiver_paid_back_to_host_in_gbp, 0)
+ coalesce(host_resolutions.xero_host_resolution_amount_paid_in_gbp, 0)
,0)
/ nullif(
coalesce(guest_payments.total_guest_payments_in_gbp, 0)
+ coalesce(invoiced_revenue.xero_operator_net_fees_in_gbp, 0)
+ coalesce(invoiced_revenue.xero_apis_net_fees_in_gbp, 0),
0)",
-1, -1,
1, 1,
) )
@ -533,6 +556,7 @@ select
{{ calculate_safe_relative_increment("xero_sex_offenders_check_net_fees_in_gbp") }}, {{ calculate_safe_relative_increment("xero_sex_offenders_check_net_fees_in_gbp") }},
{{ calculate_safe_relative_increment("xero_protection_pro_net_fees_in_gbp") }}, {{ calculate_safe_relative_increment("xero_protection_pro_net_fees_in_gbp") }},
-- GLOBAL -- -- GLOBAL --
{{ calculate_safe_relative_increment("xero_booking_net_fees_in_gbp") }},
{{ calculate_safe_relative_increment("xero_operator_net_fees_in_gbp") }}, {{ calculate_safe_relative_increment("xero_operator_net_fees_in_gbp") }},
-- APIs REVENUE -- -- APIs REVENUE --

View file

@ -36,6 +36,7 @@
sum( sum(
xero_old_dashboard_booking_net_fees_in_gbp xero_old_dashboard_booking_net_fees_in_gbp
) as xero_old_dashboard_booking_net_fees_in_gbp, ) as xero_old_dashboard_booking_net_fees_in_gbp,
sum(xero_booking_net_fees_in_gbp) as xero_booking_net_fees_in_gbp,
sum(xero_listing_net_fees_in_gbp) as xero_listing_net_fees_in_gbp, sum(xero_listing_net_fees_in_gbp) as xero_listing_net_fees_in_gbp,
sum(xero_verification_net_fees_in_gbp) as xero_verification_net_fees_in_gbp, sum(xero_verification_net_fees_in_gbp) as xero_verification_net_fees_in_gbp,
sum(xero_operator_net_fees_in_gbp) as xero_operator_net_fees_in_gbp, sum(xero_operator_net_fees_in_gbp) as xero_operator_net_fees_in_gbp,

View file

@ -36,6 +36,7 @@
sum( sum(
xero_old_dashboard_booking_net_fees_in_gbp xero_old_dashboard_booking_net_fees_in_gbp
) as xero_old_dashboard_booking_net_fees_in_gbp, ) as xero_old_dashboard_booking_net_fees_in_gbp,
sum(xero_booking_net_fees_in_gbp) as xero_booking_net_fees_in_gbp,
sum(xero_listing_net_fees_in_gbp) as xero_listing_net_fees_in_gbp, sum(xero_listing_net_fees_in_gbp) as xero_listing_net_fees_in_gbp,
sum(xero_verification_net_fees_in_gbp) as xero_verification_net_fees_in_gbp, sum(xero_verification_net_fees_in_gbp) as xero_verification_net_fees_in_gbp,
sum(xero_operator_net_fees_in_gbp) as xero_operator_net_fees_in_gbp, sum(xero_operator_net_fees_in_gbp) as xero_operator_net_fees_in_gbp,

View file

@ -101,6 +101,26 @@ select
else 0 else 0
end end
) as xero_old_dashboard_booking_net_fees_in_gbp, ) as xero_old_dashboard_booking_net_fees_in_gbp,
sum(
case
when
-- Computes total bookings fees from both Old Dash and New Dash
-- This needs to be properly handled in the aggregation logic once
-- the alignment with Finance is done.
ixsdm.accounting_root_aggregation in (
'Old Dashboard Booking Fees',
'Basic Protection',
'Protection Plus',
'Protection Pro',
'Basic Screening',
'Screening Plus',
'Id Verification',
'Sex Offenders Check'
)
then ixsdm.line_amount_wo_taxes_in_gbp
else 0
end
) as xero_booking_net_fees_in_gbp,
sum( sum(
case case
when ixsdm.accounting_root_aggregation = 'Listing Fees' when ixsdm.accounting_root_aggregation = 'Listing Fees'
@ -118,7 +138,6 @@ select
sum( sum(
case case
when when
-- New Dash
ixsdm.accounting_kpis_aggregation = 'Invoiced Operator Revenue' ixsdm.accounting_kpis_aggregation = 'Invoiced Operator Revenue'
-- Prior to 1st January 2023 we didn't have the split of Booking -- Prior to 1st January 2023 we didn't have the split of Booking
-- Fees, Listing Fees and Verification Fees. Everything is -- Fees, Listing Fees and Verification Fees. Everything is

View file

@ -41,6 +41,7 @@ select
sum( sum(
ir.xero_old_dashboard_booking_net_fees_in_gbp ir.xero_old_dashboard_booking_net_fees_in_gbp
) as xero_old_dashboard_booking_net_fees_in_gbp, ) as xero_old_dashboard_booking_net_fees_in_gbp,
sum(ir.xero_booking_net_fees_in_gbp) as xero_booking_net_fees_in_gbp,
sum(ir.xero_listing_net_fees_in_gbp) as xero_listing_net_fees_in_gbp, sum(ir.xero_listing_net_fees_in_gbp) as xero_listing_net_fees_in_gbp,
sum(ir.xero_verification_net_fees_in_gbp) as xero_verification_net_fees_in_gbp, sum(ir.xero_verification_net_fees_in_gbp) as xero_verification_net_fees_in_gbp,
sum(ir.xero_operator_net_fees_in_gbp) as xero_operator_net_fees_in_gbp, sum(ir.xero_operator_net_fees_in_gbp) as xero_operator_net_fees_in_gbp,

View file

@ -41,6 +41,7 @@ select
sum( sum(
ir.xero_old_dashboard_booking_net_fees_in_gbp ir.xero_old_dashboard_booking_net_fees_in_gbp
) as xero_old_dashboard_booking_net_fees_in_gbp, ) as xero_old_dashboard_booking_net_fees_in_gbp,
sum(ir.xero_booking_net_fees_in_gbp) as xero_booking_net_fees_in_gbp,
sum(ir.xero_listing_net_fees_in_gbp) as xero_listing_net_fees_in_gbp, sum(ir.xero_listing_net_fees_in_gbp) as xero_listing_net_fees_in_gbp,
sum(ir.xero_verification_net_fees_in_gbp) as xero_verification_net_fees_in_gbp, sum(ir.xero_verification_net_fees_in_gbp) as xero_verification_net_fees_in_gbp,
sum(ir.xero_operator_net_fees_in_gbp) as xero_operator_net_fees_in_gbp, sum(ir.xero_operator_net_fees_in_gbp) as xero_operator_net_fees_in_gbp,

View file

@ -4407,6 +4407,13 @@ models:
Sum of daily Old Dashboard Booking Net Fees, in GBP, without taxes Sum of daily Old Dashboard Booking Net Fees, in GBP, without taxes
in a given date and per specified dimension. in a given date and per specified dimension.
- name: xero_booking_net_fees_in_gbp
data_type: decimal
description: |
Sum of daily Total Booking Net Fees, in GBP, without taxes
in a given date and per specified dimension. This takes into
account both Old Dashboard and New Dashboard.
- name: xero_listing_net_fees_in_gbp - name: xero_listing_net_fees_in_gbp
data_type: decimal data_type: decimal
description: | description: |
@ -4609,6 +4616,13 @@ models:
Sum of accumulated Old Dashboard Booking Net Fees, in GBP, without taxes Sum of accumulated Old Dashboard Booking Net Fees, in GBP, without taxes
in a given month and per specified dimension. in a given month and per specified dimension.
- name: xero_booking_net_fees_in_gbp
data_type: decimal
description: |
Sum of accumulated Total Booking Net Fees, in GBP, without taxes
in a given month and per specified dimension. This takes into
account both Old Dashboard and New Dashboard.
- name: xero_listing_net_fees_in_gbp - name: xero_listing_net_fees_in_gbp
data_type: decimal data_type: decimal
description: | description: |
@ -4804,6 +4818,13 @@ models:
Sum of accumulated Old Dashboard Booking Net Fees, in GBP, without taxes Sum of accumulated Old Dashboard Booking Net Fees, in GBP, without taxes
in a given month up to the given date and per specified dimension. in a given month up to the given date and per specified dimension.
- name: xero_booking_net_fees_in_gbp
data_type: decimal
description: |
Sum of accumulated Total Booking Net Fees, in GBP, without taxes
in a given month up to the given date and per specified dimension.
This takes into account both Old Dashboard and New Dashboard.
- name: xero_listing_net_fees_in_gbp - name: xero_listing_net_fees_in_gbp
data_type: decimal data_type: decimal
description: | description: |
@ -4905,6 +4926,7 @@ models:
- xero_protection_pro_net_fees_in_gbp - xero_protection_pro_net_fees_in_gbp
- xero_basic_screening_net_fees_in_gbp - xero_basic_screening_net_fees_in_gbp
- xero_old_dashboard_booking_net_fees_in_gbp - xero_old_dashboard_booking_net_fees_in_gbp
- xero_booking_net_fees_in_gbp
- xero_listing_net_fees_in_gbp - xero_listing_net_fees_in_gbp
- xero_verification_net_fees_in_gbp - xero_verification_net_fees_in_gbp
- xero_operator_net_fees_in_gbp - xero_operator_net_fees_in_gbp
@ -4984,6 +5006,13 @@ models:
The monthly Old Dashboard Booking Net Fees, in GBP, without taxes The monthly Old Dashboard Booking Net Fees, in GBP, without taxes
for a given date, dimension and value. for a given date, dimension and value.
- name: xero_booking_net_fees_in_gbp
data_type: decimal
description: |
The monthly Total Booking Net Fees, in GBP, without taxes
for a given date, dimension and value.
This takes into account both Old Dashboard and New Dashboard.
- name: xero_listing_net_fees_in_gbp - name: xero_listing_net_fees_in_gbp
data_type: decimal data_type: decimal
description: | description: |
@ -5082,6 +5111,7 @@ models:
- xero_protection_pro_net_fees_in_gbp - xero_protection_pro_net_fees_in_gbp
- xero_basic_screening_net_fees_in_gbp - xero_basic_screening_net_fees_in_gbp
- xero_old_dashboard_booking_net_fees_in_gbp - xero_old_dashboard_booking_net_fees_in_gbp
- xero_booking_net_fees_in_gbp
- xero_listing_net_fees_in_gbp - xero_listing_net_fees_in_gbp
- xero_verification_net_fees_in_gbp - xero_verification_net_fees_in_gbp
- xero_operator_net_fees_in_gbp - xero_operator_net_fees_in_gbp
@ -5162,6 +5192,13 @@ models:
The month-to-date Old Dashboard Booking Net Fees, in GBP, without taxes The month-to-date Old Dashboard Booking Net Fees, in GBP, without taxes
for a given date, dimension and value. for a given date, dimension and value.
- name: xero_booking_net_fees_in_gbp
data_type: decimal
description: |
The month-to-date Total Booking Net Fees, in GBP, without taxes
for a given date, dimension and value.
This takes into account both Old Dashboard and New Dashboard.
- name: xero_listing_net_fees_in_gbp - name: xero_listing_net_fees_in_gbp
data_type: decimal data_type: decimal
description: | description: |

View file

@ -98,12 +98,9 @@ select
then xero_old_dashboard_booking_net_fees_in_gbp then xero_old_dashboard_booking_net_fees_in_gbp
else null else null
end as xero_old_dashboard_booking_net_fees_in_gbp, end as xero_old_dashboard_booking_net_fees_in_gbp,
-- Following line is a temporary handler to not break reporting.
-- We will need this line anyway for the combination of Old and New
-- Dash.
case case
when {{ is_date_before_20th_of_previous_month("date") }} when {{ is_date_before_20th_of_previous_month("date") }}
then xero_old_dashboard_booking_net_fees_in_gbp then xero_booking_net_fees_in_gbp
else null else null
end as xero_booking_net_fees_in_gbp, end as xero_booking_net_fees_in_gbp,
case case

View file

@ -41,6 +41,7 @@ than the value reported in the Global dimension.
"Invoiced APIs Revenue", "Invoiced APIs Revenue",
"Invoiced Athena Revenue", "Invoiced Athena Revenue",
"Invoiced Old Dashboard Booking Fees Revenue", "Invoiced Old Dashboard Booking Fees Revenue",
"Invoiced Total Booking Fees Revenue",
"Invoiced E-Deposit Revenue", "Invoiced E-Deposit Revenue",
"Invoiced Listing Fees Revenue", "Invoiced Listing Fees Revenue",
"Invoiced Operator Revenue", "Invoiced Operator Revenue",

View file

@ -32,6 +32,7 @@ point it becomes too sensitive, just adapt the following parameters.
"Invoiced APIs Revenue", "Invoiced APIs Revenue",
"Invoiced Athena Revenue", "Invoiced Athena Revenue",
"Invoiced Old Dashboard Booking Fees Revenue", "Invoiced Old Dashboard Booking Fees Revenue",
"Invoiced Total Booking Fees Revenue",
"Invoiced E-Deposit Revenue", "Invoiced E-Deposit Revenue",
"Invoiced Listing Fees Revenue", "Invoiced Listing Fees Revenue",
"Invoiced Operator Revenue", "Invoiced Operator Revenue",