Addressed comments

This commit is contained in:
Joaquin Ossa 2025-02-07 15:15:17 +01:00
parent 1c6f23f269
commit 25a89208c4
7 changed files with 148 additions and 36 deletions

View file

@ -69,6 +69,18 @@ vars:
# States should be strings in capital letters. Models need to force an upper() # States should be strings in capital letters. Models need to force an upper()
"cancelled_booking_state": "'CANCELLED'" "cancelled_booking_state": "'CANCELLED'"
# Booking state variables
# States should be strings in capital letters. Models need to force an upper()
"approved_booking_state": "'APPROVED'"
# Booking state variables
# States should be strings in capital letters. Models need to force an upper()
"flagged_booking_state": "'FLAGGED'"
# Payment state variables # Payment state variables
# States should be strings in capital letters. Models need to force an upper() # States should be strings in capital letters. Models need to force an upper()
"paid_payment_state": "'PAID'" "paid_payment_state": "'PAID'"
# Protection service state variables
# States should be strings in capital letters. Models need to force an upper()
"default_service": "'BASIC SCREENING'"

View file

@ -9,36 +9,38 @@ with
int_core__accommodation_to_product_bundle as ( int_core__accommodation_to_product_bundle as (
select * from {{ ref("int_core__accommodation_to_product_bundle") }} select * from {{ ref("int_core__accommodation_to_product_bundle") }}
), ),
int_core__new_dash_users as (select * from {{ ref("int_core__new_dash_users") }}),
int_core__accommodation as (select * from {{ ref("int_core__accommodation") }}), int_core__accommodation as (select * from {{ ref("int_core__accommodation") }}),
int_core__booking_to_product_bundle as ( int_core__booking_to_product_bundle as (
select * from {{ ref("int_core__booking_to_product_bundle") }} select * from {{ ref("int_core__booking_to_product_bundle") }}
), ),
int_core__bookings as (select * from {{ ref("int_core__bookings") }}), int_core__bookings as (select * from {{ ref("int_core__bookings") }}),
bundle_services as ( bundle_services as (
select id_user_product_bundle, id_user_host, product_service_name select id_user_product_bundle, id_user_host, product_service_display_name
from int_core__user_product_bundle_contains_services from int_core__user_product_bundle_contains_services
-- Union of all product services with all protection plan services.
-- This is because there are basically two types of services: product services
-- and protection plan services and they are stored in different tables.
union all union all
select select
id_user_product_bundle, id_user_product_bundle,
id_user_host, id_user_host,
coalesce( coalesce(
replace(protection_display_name, ' ', ''), 'BASICSCREENING' protection_display_name, {{ var("default_service") }}
) as product_service_name ) as product_service_display_name
from int_core__user_product_bundle from int_core__user_product_bundle
), ),
users as ( users as (
select distinct select distinct
(bs.product_service_name), count(distinct bs.id_user_host) as number_users (bs.product_service_display_name),
count(distinct bs.id_user_host) as number_users
from bundle_services bs from bundle_services bs
inner join inner join int_core__user_host uh on bs.id_user_host = uh.id_user_host
int_core__user_host uh
on bs.id_user_host = uh.id_user_host
and uh.is_test_account is false
group by 1 group by 1
), ),
accommodations as ( accommodations as (
select distinct select distinct
(bs.product_service_name), (bs.product_service_display_name),
count(distinct apb.id_accommodation) as number_accommodations, count(distinct apb.id_accommodation) as number_accommodations,
count( count(
distinct case when a.is_active then apb.id_accommodation else null end distinct case when a.is_active then apb.id_accommodation else null end
@ -56,29 +58,30 @@ with
apb.original_ends_at_utc, '2050-12-31' apb.original_ends_at_utc, '2050-12-31'
) )
left join int_core__accommodation a on apb.id_accommodation = a.id_accommodation left join int_core__accommodation a on apb.id_accommodation = a.id_accommodation
inner join int_core__new_dash_users ndu on bs.id_user_host = ndu.id_user_host
group by 1 group by 1
), ),
bookings as ( bookings as (
select distinct select distinct
(bs.product_service_name), (bs.product_service_display_name),
count(distinct bpb.id_booking) as number_bookings, count(distinct bpb.id_booking) as number_bookings,
count( count(
distinct case distinct case
when upper(b.booking_state) = 'APPROVED' when upper(b.booking_state) = {{ var("approved_booking_state") }}
then bpb.id_booking then bpb.id_booking
else null else null
end end
) as number_approved_bookings, ) as number_approved_bookings,
count( count(
distinct case distinct case
when upper(b.booking_state) = 'CANCELLED' when upper(b.booking_state) = {{ var("cancelled_booking_state") }}
then bpb.id_booking then bpb.id_booking
else null else null
end end
) as number_cancelled_bookings, ) as number_cancelled_bookings,
count( count(
distinct case distinct case
when upper(b.booking_state) = 'FLAGGED' when upper(b.booking_state) = {{ var("flagged_booking_state") }}
then bpb.id_booking then bpb.id_booking
else null else null
end end
@ -91,10 +94,11 @@ with
int_core__bookings b int_core__bookings b
on b.id_booking = bpb.id_booking on b.id_booking = bpb.id_booking
and b.is_duplicate_booking is false and b.is_duplicate_booking is false
inner join int_core__new_dash_users ndu on bs.id_user_host = ndu.id_user_host
group by 1 group by 1
) )
select select
u.product_service_name, u.product_service_display_name,
u.number_users, u.number_users,
a.number_accommodations, a.number_accommodations,
a.number_active_accommodations, a.number_active_accommodations,
@ -104,5 +108,6 @@ select
b.number_cancelled_bookings, b.number_cancelled_bookings,
b.number_flagged_bookings b.number_flagged_bookings
from users u from users u
left join accommodations a on u.product_service_name = a.product_service_name left join
left join bookings b on u.product_service_name = b.product_service_name accommodations a on u.product_service_display_name = a.product_service_display_name
left join bookings b on u.product_service_display_name = b.product_service_display_name

View file

@ -1,4 +1,3 @@
{% set product_bundles_without_paid_service = "('BASIC SCREENING')" %}
with with
int_core__user_product_bundle as ( int_core__user_product_bundle as (
select * from {{ ref("int_core__user_product_bundle") }} select * from {{ ref("int_core__user_product_bundle") }}
@ -43,7 +42,7 @@ with
distinct case distinct case
when when
atpb.user_product_bundle_name atpb.user_product_bundle_name
not in {{ product_bundles_without_paid_service }} not in ({{ var("default_service") }})
then atpb.id_accommodation then atpb.id_accommodation
else null else null
end end
@ -52,7 +51,7 @@ with
distinct case distinct case
when when
atpb.user_product_bundle_name atpb.user_product_bundle_name
not in {{ product_bundles_without_paid_service }} not in ({{ var("default_service") }})
and atpb.has_no_end_date = true and atpb.has_no_end_date = true
then atpb.id_accommodation then atpb.id_accommodation
else null else null
@ -72,7 +71,7 @@ with
distinct case distinct case
when when
btpb.user_product_bundle_name btpb.user_product_bundle_name
not in {{ product_bundles_without_paid_service }} not in ({{ var("default_service") }})
then btpb.id_booking then btpb.id_booking
else null else null
end end

View file

@ -11,7 +11,8 @@ select
pb.id_product_bundle, pb.id_product_bundle,
ps.id_product_service, ps.id_product_service,
pb.product_bundle_name, pb.product_bundle_name,
ps.product_service_name ps.product_service_name,
ps.product_service_display_name
from stg_core__user_product_bundle pb from stg_core__user_product_bundle pb
cross join stg_core__product_service ps cross join stg_core__product_service ps
where where

View file

@ -3023,6 +3023,13 @@ models:
data_tests: data_tests:
- not_null - not_null
- name: product_service_display_name
data_type: string
description: |
The display name of the product service.
data_tests:
- not_null
- name: int_core__product_service_to_price - name: int_core__product_service_to_price
description: | description: |
This model provides the information related to the prices of the different This model provides the information related to the prices of the different
@ -5166,30 +5173,30 @@ models:
data_type: boolean data_type: boolean
description: "Boolean value indicating if the guest chose CheckIn Cover." description: "Boolean value indicating if the guest chose CheckIn Cover."
- name: int_core__new_dash_services_usage - name: int_core__new_dash_services_offered
description: "This model contains the usage of the services in New Dash. description: "This model contains the the services offered in New Dash.
This usage is displayed by different levels, such as the number of users, This offers are displayed by different levels, such as the number of users,
accommodations and bookings." accommodations and bookings."
columns: columns:
- name: product_service_name - name: product_service_display_name
data_type: text data_type: text
description: "The name of the product service." description: "The name of the product service."
data_tests: data_tests:
- not_null - not_null
- accepted_values: - accepted_values:
values: values:
- "BASICSCREENING" - "BASIC SCREENING"
- "SCREENINGPLUS" - "SCREENING PLUS"
- "IDVERIFICATION" - "ID VERIFICATION"
- "SEXOFFENDERSCHECK" - "SEX OFFENDERS CHECK"
- "BASICDAMAGEDEPOSIT" - "BASIC DAMAGE DEPOSIT"
- "BASICWAIVER" - "BASIC WAIVER"
- "WAIVERPLUS" - "WAIVER PLUS"
- "WAIVERPRO" - "WAIVER PRO"
- "BASICPROTECTION" - "BASIC PROTECTION"
- "PROTECTIONPLUS" - "PROTECTION PLUS"
- "PROTECTIONPRO" - "PROTECTION PRO"
- name: number_users - name: number_users
data_type: bigint data_type: bigint

View file

@ -0,0 +1,15 @@
with
int_core__new_dash_services_offered as (
select * from {{ ref("int_core__new_dash_services_offered") }}
)
select
product_service_display_name as product_service_display_name,
number_users as number_users,
number_accommodations as number_accommodations,
number_active_accommodations as number_active_accommodations,
number_inactive_accommodations as number_inactive_accommodations,
number_bookings as number_bookings,
number_approved_bookings as number_approved_bookings,
number_cancelled_bookings as number_cancelled_bookings,
number_flagged_bookings as number_flagged_bookings
from int_core__new_dash_services_offered

View file

@ -1567,3 +1567,76 @@ models:
- name: chose_checkin_cover - name: chose_checkin_cover
data_type: boolean data_type: boolean
description: "Boolean value indicating if the guest chose CheckIn Cover." description: "Boolean value indicating if the guest chose CheckIn Cover."
- name: core__new_dash_services_offered
description: "This model contains the the services offered in New Dash.
This offers are displayed by different levels, such as the number of users,
accommodations and bookings."
columns:
- name: product_service_display_name
data_type: text
description: "The name of the product service."
data_tests:
- not_null
- accepted_values:
values:
- "BASIC SCREENING"
- "SCREENING PLUS"
- "ID VERIFICATION"
- "SEX OFFENDERS CHECK"
- "BASIC DAMAGE DEPOSIT"
- "BASIC WAIVER"
- "WAIVER PLUS"
- "WAIVER PRO"
- "BASIC PROTECTION"
- "PROTECTION PLUS"
- "PROTECTION PRO"
- name: number_users
data_type: bigint
description:
"Number of user accounts that have a bundle that considers this service.
The fact that a user has a bundle with the service included does not mean
that the service is active or used. Each user can associate any of their
bundles with any of their accommodations."
- name: number_accommodations
data_type: bigint
description:
"Number of accommodations or listings that have a bundle that considers
this service."
- name: number_active_accommodations
data_type: bigint
description:
"Number of accommodations or listings that have a bundle that considers
this service and are active."
- name: number_inactive_accommodations
data_type: bigint
description:
"Number of accommodations or listings that have a bundle that considers
this service and are inactive."
- name: number_bookings
data_type: bigint
description: "Number of bookings that have a bundle that considers this service."
- name: number_approved_bookings
data_type: bigint
description:
"Number of bookings that have a bundle that considers this service and
are approved."
- name: number_cancelled_bookings
data_type: bigint
description:
"Number of bookings that have a bundle that considers this service and
are cancelled."
- name: number_flagged_bookings
data_type: bigint
description:
"Number of bookings that have a bundle that considers this service and
are flagged."