Merged PR 4425: Reworks Billable Bookings metrics

# Description

Changes:
* On Est. Billable Bookings, keeps previous logic for Old Dash while assuming the first billable service for New Dash
* Adds a Billable Check Out Bookings in Check Out bookings, as defined in the requirements.

# 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: #27619
This commit is contained in:
Oriol Roqué Paniagua 2025-02-17 15:59:21 +00:00
parent a3793121af
commit 9540f18562
11 changed files with 110 additions and 24 deletions

View file

@ -97,6 +97,7 @@ select
check_out_bookings.check_out_bookings,
check_out_bookings.cancelled_check_out_bookings,
check_out_bookings.not_cancelled_check_out_bookings,
check_out_bookings.billable_check_out_bookings,
check_out_bookings.cancelled_check_out_bookings_rate,
-- OTHER BOOKINGS --

View file

@ -53,6 +53,15 @@
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 8,
"metric": "Billable Check Out Bookings",
"value": "billable_check_out_bookings",
"previous_year_value": "previous_year_billable_check_out_bookings",
"relative_increment": "relative_increment_billable_check_out_bookings",
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 9,
"metric": "Est. Billable Bookings",

View file

@ -36,16 +36,12 @@ with
where
dimension in ('global', 'by_number_of_listings', 'by_billing_country', 'by_business_scope')
and dimension_value <> 'UNSET'
-- TEMPORARY EXCLUDE NEW DASH BILLABLE BOOKINGS
and dimension_value <> 'New Dash'
union all
select *
from {{ ref("int_kpis__agg_monthly_billable_bookings") }}
where
dimension in ('global', 'by_number_of_listings', 'by_billing_country', 'by_business_scope')
and dimension_value <> 'UNSET'
-- TEMPORARY EXCLUDE NEW DASH BILLABLE BOOKINGS
and dimension_value <> 'New Dash'
),
created_guest_journeys as (
select *
@ -193,6 +189,7 @@ with
check_out_bookings.check_out_bookings,
check_out_bookings.cancelled_check_out_bookings,
check_out_bookings.not_cancelled_check_out_bookings,
check_out_bookings.billable_check_out_bookings,
check_out_bookings.cancelled_check_out_bookings_rate,
-- OTHER BOOKINGS --
@ -480,6 +477,7 @@ select
{{ calculate_safe_relative_increment("check_out_bookings") }},
{{ calculate_safe_relative_increment("cancelled_check_out_bookings") }},
{{ calculate_safe_relative_increment("not_cancelled_check_out_bookings") }},
{{ calculate_safe_relative_increment("billable_check_out_bookings") }},
{{ calculate_safe_relative_increment("cancelled_check_out_bookings_rate") }},
-- OTHER BOOKINGS --

View file

@ -18,6 +18,7 @@
sum(check_out_bookings) as check_out_bookings,
sum(cancelled_check_out_bookings) as cancelled_check_out_bookings,
sum(not_cancelled_check_out_bookings) as not_cancelled_check_out_bookings,
sum(billable_check_out_bookings) as billable_check_out_bookings,
sum(cancelled_check_out_bookings)
/ sum(check_out_bookings) as cancelled_check_out_bookings_rate
from {{ ref("int_kpis__metric_monthly_check_out_bookings") }}

View file

@ -18,6 +18,7 @@
sum(check_out_bookings) as check_out_bookings,
sum(cancelled_check_out_bookings) as cancelled_check_out_bookings,
sum(not_cancelled_check_out_bookings) as not_cancelled_check_out_bookings,
sum(billable_check_out_bookings) as billable_check_out_bookings,
sum(cancelled_check_out_bookings)
/ sum(check_out_bookings) as cancelled_check_out_bookings_rate
from {{ ref("int_kpis__metric_mtd_check_out_bookings") }}

View file

@ -1,24 +1,10 @@
{{ config(materialized="table", unique_key=["date", "id_deal", "business_scope"]) }}
-- OLD DASH --
select
-- Unique Key --
icb.booking_fee_charge_date_utc as date,
coalesce(icuh.id_deal, 'UNSET') as id_deal,
-- ORP here: I'm expecting this to change according to the definition of Billable
-- Bookings expected for New Dash. This is just a temporary placeholder in the
-- same fashion as Booking metrics.
case
-- New Dash users with a booking and a deal
when
icbs.id_booking is not null
and icbs.is_user_in_new_dash = true
and icbs.is_missing_id_deal = false
then 'New Dash'
-- Old Dash users if there is no booking or the user is not in the new dash
when icbs.id_booking is null or icbs.is_user_in_new_dash = false
then 'Old Dash'
-- Rest of the cases, includes KYG Lite users
else 'UNSET'
end as business_scope,
'Old Dash' as business_scope,
-- Dimensions --
coalesce(
icd.main_billing_country_iso_3_per_deal, 'UNSET'
@ -38,5 +24,38 @@ left join
and icb.booking_fee_charge_date_utc = icmas.date
left join
{{ ref("int_core__booking_summary") }} as icbs on icb.id_booking = icbs.id_booking
where icb.is_duplicate_booking = false and icb.booking_fee_charge_date_utc is not null
where
icb.is_duplicate_booking = false
and icb.booking_fee_charge_date_utc is not null
-- Exclude any New Dash bookings
and (icbs.id_booking is null or icbs.is_user_in_new_dash = false)
group by 1, 2, 3, 4, 5
union all
-- NEW DASH --
select
-- Unique Key --
icbs.service_first_billable_date_utc as date,
icbs.id_deal,
'New Dash' as business_scope,
-- Dimensions --
coalesce(
icd.main_billing_country_iso_3_per_deal, 'UNSET'
) as main_billing_country_iso_3_per_deal,
coalesce(
icmas.active_accommodations_per_deal_segmentation, 'UNSET'
) as active_accommodations_per_deal_segmentation,
-- Metrics --
count(distinct icbs.id_booking) as billable_bookings
from {{ ref("int_core__booking_summary") }} icbs
left join {{ ref("int_core__deal") }} as icd on icbs.id_deal = icd.id_deal
left join
{{ ref("int_kpis__dimension_daily_accommodation") }} as icmas
on icbs.id_deal = icmas.id_deal
and icbs.service_first_billable_date_utc = icmas.date
where
icbs.is_user_in_new_dash = true
and icbs.is_missing_id_deal = false
and icbs.is_booking_billable = true
group by 1, 2, 3, 4, 5

View file

@ -38,7 +38,26 @@ select
then icb.id_booking
else null
end
) as not_cancelled_check_out_bookings
) as not_cancelled_check_out_bookings,
count(
distinct case
-- New Dash users with a billable booking and a deal
when
icbs.id_booking is not null
and icbs.is_user_in_new_dash = true
and icbs.is_missing_id_deal = false
and icbs.is_booking_billable = true
then icb.id_booking
-- Old Dash users if there is no booking or the user is not in the new
-- dash, that have a booking fee
when
(icbs.id_booking is null or icbs.is_user_in_new_dash = false)
and icb.booking_fee_charge_date_utc is not null
then icb.id_booking
-- Rest of the cases, includes KYG Lite users
else null
end
) as billable_check_out_bookings
from {{ ref("int_core__bookings") }} as icb
left join
{{ ref("int_core__user_host") }} as icuh on icb.id_user_host = icuh.id_user_host

View file

@ -22,7 +22,8 @@ select
-- Metrics --
sum(b.check_out_bookings) as check_out_bookings,
sum(b.cancelled_check_out_bookings) as cancelled_check_out_bookings,
sum(b.not_cancelled_check_out_bookings) as not_cancelled_check_out_bookings
sum(b.not_cancelled_check_out_bookings) as not_cancelled_check_out_bookings,
sum(b.billable_check_out_bookings) as billable_check_out_bookings
from {{ ref("int_kpis__dimension_dates") }} d
left join
{{ ref("int_kpis__metric_daily_check_out_bookings") }} b

View file

@ -22,7 +22,8 @@ select
-- Metrics --
sum(b.check_out_bookings) as check_out_bookings,
sum(b.cancelled_check_out_bookings) as cancelled_check_out_bookings,
sum(b.not_cancelled_check_out_bookings) as not_cancelled_check_out_bookings
sum(b.not_cancelled_check_out_bookings) as not_cancelled_check_out_bookings,
sum(b.billable_check_out_bookings) as billable_check_out_bookings
from {{ ref("int_kpis__dimension_dates") }} d
left join
{{ ref("int_kpis__metric_daily_check_out_bookings") }} b

View file

@ -2960,6 +2960,13 @@ models:
Count of daily bookings checked-out in a given date and per specified dimension
that have not been cancelled.
- name: billable_check_out_bookings
data_type: bigint
description: |
Count of daily bookings checked-out in a given date and per specified dimension
that are billable. Note that the consideration for billable booking is different
depending on the business scope of the booking.
- name: int_kpis__metric_monthly_check_out_bookings
description: |
This model computes the Monthly Check-out Bookings at the
@ -3057,6 +3064,14 @@ models:
Count of accumulated bookings checked-out in a given month
and per specified dimension that have not been cancelled.
- name: billable_check_out_bookings
data_type: bigint
description: |
Count of accumulated bookings checked-out in a given month
and per specified dimension that are billable.
Note that the consideration for billable booking is different
depending on the business scope of the booking.
- name: int_kpis__metric_mtd_check_out_bookings
description: |
This model computes the Month-To-Date Check-out Bookings at the
@ -3154,6 +3169,14 @@ models:
Count of accumulated bookings checked-out in a given month up to the
given date and per specified dimension that have not been cancelled.
- name: billable_check_out_bookings
data_type: bigint
description: |
Count of accumulated bookings checked-out in a given month up to the
given date and per specified dimension that are billable.
Note that the consideration for billable booking is different
depending on the business scope of the booking.
- name: int_kpis__agg_monthly_check_out_bookings
description: |
This model computes the dimension aggregation for
@ -3193,6 +3216,7 @@ models:
- check_out_bookings
- cancelled_check_out_bookings
- not_cancelled_check_out_bookings
- billable_check_out_bookings
- accepted_values:
values:
- global
@ -3221,6 +3245,11 @@ models:
description: |
The monthly not cancelled checked-out bookings for a given date, dimension and value.
- name: billable_check_out_bookings
data_type: bigint
description: |
The monthly billable checked-out bookings for a given date, dimension and value.
- name: cancelled_check_out_bookings_rate
data_type: decimal
description: |
@ -3265,6 +3294,7 @@ models:
- check_out_bookings
- cancelled_check_out_bookings
- not_cancelled_check_out_bookings
- billable_check_out_bookings
- accepted_values:
values:
- global
@ -3293,6 +3323,11 @@ models:
description: |
The month-to-date not cancelled checked-out bookings for a given date, dimension and value.
- name: billable_check_out_bookings
data_type: bigint
description: |
The month-to-date billable checked-out bookings for a given date, dimension and value.
- name: cancelled_check_out_bookings_rate
data_type: decimal
description: |

View file

@ -19,6 +19,7 @@ select
check_out_bookings as check_out_bookings,
cancelled_check_out_bookings as cancelled_check_out_bookings,
not_cancelled_check_out_bookings as not_cancelled_check_out_bookings,
billable_check_out_bookings as billable_check_out_bookings,
cancelled_check_out_bookings_rate as cancelled_check_out_bookings_rate,
billable_bookings as billable_bookings,
created_guest_journeys as created_guest_journeys,