Merged PR 4819: New Dash Listings Services model
# Description New Dash Listings Services model There was 1 slight issue that was causing me a lot of problems, the fact that during the same day they could change the bundle multiple times was generating duplications for several accommodations. I removed those duplicates only keeping the most recent one for each day # 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: #28627
This commit is contained in:
commit
f7504393c4
2 changed files with 160 additions and 0 deletions
|
|
@ -0,0 +1,60 @@
|
||||||
|
{{
|
||||||
|
config(
|
||||||
|
materialized="table",
|
||||||
|
unique_key=[
|
||||||
|
"date",
|
||||||
|
"id_accommodation",
|
||||||
|
"id_user_product_bundle",
|
||||||
|
"service_name",
|
||||||
|
"service_business_type",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
with
|
||||||
|
-- Order by the most recent product bundle per accommodation per day
|
||||||
|
latest_daily_bundle as (
|
||||||
|
select
|
||||||
|
*,
|
||||||
|
row_number() over (
|
||||||
|
partition by id_accommodation, effective_start_date_utc
|
||||||
|
order by
|
||||||
|
effective_start_date_utc desc, -- Prefers the latest effective start date
|
||||||
|
original_starts_at_utc desc, -- In case of ties, prefers the most recent original start
|
||||||
|
coalesce(original_ends_at_utc, {{ var("end_of_time") }}) desc
|
||||||
|
) as rn
|
||||||
|
from {{ ref("int_core__accommodation_to_product_bundle") }}
|
||||||
|
)
|
||||||
|
select
|
||||||
|
-- Unique Key --
|
||||||
|
dd.date,
|
||||||
|
ldb.id_accommodation,
|
||||||
|
bs.id_user_product_bundle,
|
||||||
|
bs.service_name,
|
||||||
|
bs.service_business_type,
|
||||||
|
-- Dimensions --
|
||||||
|
coalesce(uh.id_deal, 'UNSET') as id_deal,
|
||||||
|
case when bs.is_default_service then 'NO' else 'YES' end as is_upgraded_service,
|
||||||
|
coalesce(uh.new_dash_version, 'UNSET') as new_dash_version,
|
||||||
|
coalesce(
|
||||||
|
uh.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
|
||||||
|
from {{ ref("int_kpis__dimension_dates") }} as dd
|
||||||
|
inner join
|
||||||
|
{{ ref("int_core__user_host") }} as uh
|
||||||
|
on dd.date >= uh.user_in_new_dash_since_date_utc
|
||||||
|
inner join
|
||||||
|
{{ ref("int_core__user_product_bundle_contains_services") }} as bs
|
||||||
|
on uh.id_user_host = bs.id_user_host
|
||||||
|
inner join
|
||||||
|
latest_daily_bundle as ldb
|
||||||
|
on bs.id_user_product_bundle = ldb.id_user_product_bundle
|
||||||
|
and date >= ldb.effective_start_date_utc
|
||||||
|
and date < coalesce(ldb.effective_end_date_utc, {{ var("end_of_time") }})
|
||||||
|
and ldb.rn = 1
|
||||||
|
left join
|
||||||
|
{{ ref("int_kpis__dimension_daily_accommodation") }} as icmas
|
||||||
|
on uh.id_deal = icmas.id_deal
|
||||||
|
and dd.date = icmas.date
|
||||||
|
|
@ -7488,3 +7488,103 @@ models:
|
||||||
Main billing country of the host aggregated at Deal level.
|
Main billing country of the host aggregated at Deal level.
|
||||||
data_tests:
|
data_tests:
|
||||||
- not_null
|
- not_null
|
||||||
|
|
||||||
|
- name: int_kpis__metric_daily_new_dash_accommodation_offered_services
|
||||||
|
description: |
|
||||||
|
This model computes the Daily Offered Services by Listings at the deepest granularity.
|
||||||
|
It only retrieves services that come from users that are in New Dash, as well
|
||||||
|
as it only considers services created after the user has moved to New Dash.
|
||||||
|
The unique key corresponds to the deepest granularity of the model,
|
||||||
|
in this case:
|
||||||
|
- date,
|
||||||
|
- id_accommodation,
|
||||||
|
- id_user_product_bundle,
|
||||||
|
- service_name,
|
||||||
|
- service_business_type
|
||||||
|
data_tests:
|
||||||
|
- dbt_utils.unique_combination_of_columns:
|
||||||
|
combination_of_columns:
|
||||||
|
- date
|
||||||
|
- id_accommodation
|
||||||
|
- id_user_product_bundle
|
||||||
|
- service_name
|
||||||
|
- service_business_type
|
||||||
|
columns:
|
||||||
|
- name: date
|
||||||
|
data_type: date
|
||||||
|
description: Date of when user has a bundle with service active.
|
||||||
|
data_tests:
|
||||||
|
- not_null
|
||||||
|
- name: id_accommodation
|
||||||
|
data_type: bigint
|
||||||
|
description: Unique identifier of an accommodation, or listing.
|
||||||
|
data_tests:
|
||||||
|
- not_null
|
||||||
|
- name: id_user_product_bundle
|
||||||
|
data_type: bigint
|
||||||
|
description: Unique identifier of the User Product Bundle.
|
||||||
|
data_tests:
|
||||||
|
- not_null
|
||||||
|
- name: service_name
|
||||||
|
data_type: string
|
||||||
|
description: Name of the created service.
|
||||||
|
data_tests:
|
||||||
|
- not_null
|
||||||
|
- name: service_business_type
|
||||||
|
data_type: string
|
||||||
|
description: |
|
||||||
|
Identifies the service type (Screening, Deposit Management, Protection
|
||||||
|
or Guest Agreement) according to New Pricing documentation.
|
||||||
|
Cannot be null.
|
||||||
|
data_tests:
|
||||||
|
- not_null
|
||||||
|
- accepted_values:
|
||||||
|
values:
|
||||||
|
- "SCREENING"
|
||||||
|
- "PROTECTION"
|
||||||
|
- "DEPOSIT_MANAGEMENT"
|
||||||
|
- "GUEST_AGREEMENT"
|
||||||
|
- name: id_deal
|
||||||
|
data_type: string
|
||||||
|
description: Unique identifier of an account.
|
||||||
|
data_tests:
|
||||||
|
- not_null
|
||||||
|
- name: is_upgraded_service
|
||||||
|
data_type: string
|
||||||
|
description: |
|
||||||
|
Whether the service is an upgraded version of the
|
||||||
|
default. In other words, if it's not Basic Screening.
|
||||||
|
data_tests:
|
||||||
|
- not_null
|
||||||
|
- accepted_values:
|
||||||
|
values:
|
||||||
|
- "YES"
|
||||||
|
- "NO"
|
||||||
|
- name: new_dash_version
|
||||||
|
data_type: string
|
||||||
|
description: |
|
||||||
|
The version of the New Dash. It corresponds to the
|
||||||
|
release or migration phase from user point of view.
|
||||||
|
data_tests:
|
||||||
|
- not_null
|
||||||
|
- name: active_accommodations_per_deal_segmentation
|
||||||
|
data_type: string
|
||||||
|
description: |
|
||||||
|
Segment value based on the number of listings booked in 12 months
|
||||||
|
for a given deal and date.
|
||||||
|
data_tests:
|
||||||
|
- not_null
|
||||||
|
- accepted_values:
|
||||||
|
values:
|
||||||
|
- "0"
|
||||||
|
- "01-05"
|
||||||
|
- "06-20"
|
||||||
|
- "21-60"
|
||||||
|
- "61+"
|
||||||
|
- "UNSET"
|
||||||
|
- name: main_billing_country_iso_3_per_deal
|
||||||
|
data_type: string
|
||||||
|
description: |
|
||||||
|
Main billing country of the host aggregated at Deal level.
|
||||||
|
data_tests:
|
||||||
|
- not_null
|
||||||
Loading…
Add table
Add a link
Reference in a new issue