Merged PR 3454: Guest payments models for Guest KPIs
# Description Weekly, monthly and mtd agg for the guest payment models for guest KPIs # 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. - [ ] 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: #23371
This commit is contained in:
commit
dada9c289a
6 changed files with 298 additions and 5 deletions
|
|
@ -117,7 +117,6 @@ Provides a general assignemnt for the Dimensions available for each KPI
|
|||
{% set additional_dimensions = additional_dimensions + [dim_dash()] %}
|
||||
{% endif %}
|
||||
|
||||
{# Add entity-specific dimensions #}
|
||||
{% if entity_name == "CHECK_IN_ATTRIBUTED_GUEST_JOURNEYS" %}
|
||||
{% set additional_dimensions = additional_dimensions + [
|
||||
dim_has_payment(),
|
||||
|
|
@ -125,6 +124,12 @@ Provides a general assignemnt for the Dimensions available for each KPI
|
|||
] %}
|
||||
{% endif %}
|
||||
|
||||
{% if entity_name == "GUEST_PAYMENTS" %}
|
||||
{% set additional_dimensions = additional_dimensions + [
|
||||
dim_has_id_check(),
|
||||
] %}
|
||||
{% endif %}
|
||||
|
||||
{# Combine base dimensions with additional dimensions for the specific model #}
|
||||
{% set dimensions = base_dimensions + additional_dimensions %}
|
||||
{{ return(dimensions) }}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
{% set dimensions = get_kpi_dimensions_per_model("GUEST_PAYMENTS") %}
|
||||
|
||||
{{
|
||||
config(
|
||||
materialized="table", unique_key=["end_date", "dimension", "dimension_value"]
|
||||
)
|
||||
}}
|
||||
|
||||
|
||||
{% for dimension in dimensions %}
|
||||
select
|
||||
-- Unique Key --
|
||||
start_date,
|
||||
end_date,
|
||||
{{ dimension.dimension }} as dimension,
|
||||
{{ dimension.dimension_value }} as dimension_value,
|
||||
-- Metrics --
|
||||
sum(deposit_fees_in_gbp) as deposit_fees_in_gbp,
|
||||
sum(waiver_payments_in_gbp) as waiver_payments_in_gbp,
|
||||
sum(checkin_cover_fees_in_gbp) as checkin_cover_fees_in_gbp,
|
||||
sum(total_guest_payments_in_gbp) as total_guest_payments_in_gbp
|
||||
from {{ ref("int_kpis__metric_weekly_guest_payments") }}
|
||||
group by 1, 2, 3, 4
|
||||
{% if not loop.last %}
|
||||
union all
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
|
@ -4,6 +4,7 @@
|
|||
unique_key=[
|
||||
"end_date",
|
||||
"id_deal",
|
||||
"has_id_check",
|
||||
"active_accommodations_per_deal_segmentation",
|
||||
],
|
||||
)
|
||||
|
|
@ -14,6 +15,7 @@ select
|
|||
d.first_day_month as start_date,
|
||||
d.date as end_date,
|
||||
gp.id_deal,
|
||||
gp.has_id_check,
|
||||
gp.active_accommodations_per_deal_segmentation,
|
||||
-- Dimensions --
|
||||
gp.main_billing_country_iso_3_per_deal,
|
||||
|
|
@ -27,4 +29,4 @@ left join
|
|||
{{ ref("int_kpis__metric_daily_guest_payments") }} gp
|
||||
on date_trunc('month', gp.date)::date = d.first_day_month
|
||||
where d.is_end_of_month = true and gp.id_deal is not null
|
||||
group by 1, 2, 3, 4, 5
|
||||
group by 1, 2, 3, 4, 5, 6
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
unique_key=[
|
||||
"end_date",
|
||||
"id_deal",
|
||||
"has_id_check",
|
||||
"active_accommodations_per_deal_segmentation",
|
||||
],
|
||||
)
|
||||
|
|
@ -14,6 +15,7 @@ select
|
|||
d.first_day_month as start_date,
|
||||
d.date as end_date,
|
||||
gp.id_deal,
|
||||
gp.has_id_check,
|
||||
gp.active_accommodations_per_deal_segmentation,
|
||||
-- Dimensions --
|
||||
gp.main_billing_country_iso_3_per_deal,
|
||||
|
|
@ -28,4 +30,4 @@ left join
|
|||
on date_trunc('month', gp.date)::date = d.first_day_month
|
||||
and extract(day from gp.date) <= d.day
|
||||
where d.is_month_to_date = true and gp.id_deal is not null
|
||||
group by 1, 2, 3, 4, 5
|
||||
group by 1, 2, 3, 4, 5, 6
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
{{
|
||||
config(
|
||||
materialized="view",
|
||||
unique_key=[
|
||||
"end_date",
|
||||
"id_deal",
|
||||
"has_id_check",
|
||||
"active_accommodations_per_deal_segmentation",
|
||||
],
|
||||
)
|
||||
}}
|
||||
|
||||
select
|
||||
-- Unique Key --
|
||||
d.first_day_week as start_date,
|
||||
d.date as end_date,
|
||||
d.week,
|
||||
gp.id_deal,
|
||||
gp.has_id_check,
|
||||
gp.active_accommodations_per_deal_segmentation,
|
||||
-- Dimensions --
|
||||
gp.main_billing_country_iso_3_per_deal,
|
||||
-- Metrics --
|
||||
sum(gp.deposit_fees_in_gbp) as deposit_fees_in_gbp,
|
||||
sum(gp.waiver_payments_in_gbp) as waiver_payments_in_gbp,
|
||||
sum(gp.checkin_cover_fees_in_gbp) as checkin_cover_fees_in_gbp,
|
||||
sum(gp.total_guest_payments_in_gbp) as total_guest_payments_in_gbp
|
||||
from {{ ref("int_kpis__dimension_dates") }} d
|
||||
left join
|
||||
{{ ref("int_kpis__metric_daily_guest_payments") }} gp
|
||||
on date_trunc('week', gp.date)::date = d.first_day_week
|
||||
where d.is_end_of_week = true and gp.id_deal is not null
|
||||
group by 1, 2, 3, 4, 5, 6, 7
|
||||
|
|
@ -1957,6 +1957,17 @@ models:
|
|||
tests:
|
||||
- not_null
|
||||
|
||||
- name: has_id_check
|
||||
data_type: string
|
||||
description: Does the verification in the guest journey
|
||||
includes Government Id Check for the bookings.
|
||||
tests:
|
||||
- not_null
|
||||
- accepted_values:
|
||||
values:
|
||||
- W/O Id Check
|
||||
- With Id Check
|
||||
|
||||
- name: active_accommodations_per_deal_segmentation
|
||||
data_type: string
|
||||
description: |
|
||||
|
|
@ -2015,6 +2026,7 @@ models:
|
|||
The unique key corresponds to:
|
||||
- end_date,
|
||||
- id_deal,
|
||||
- has_id_check,
|
||||
- active_accommodations_per_deal_segmentation.
|
||||
|
||||
tests:
|
||||
|
|
@ -2022,6 +2034,7 @@ models:
|
|||
combination_of_columns:
|
||||
- end_date
|
||||
- id_deal
|
||||
- has_id_check
|
||||
- active_accommodations_per_deal_segmentation
|
||||
|
||||
columns:
|
||||
|
|
@ -2045,6 +2058,17 @@ models:
|
|||
tests:
|
||||
- not_null
|
||||
|
||||
- name: has_id_check
|
||||
data_type: string
|
||||
description: Does the verification in the guest journey
|
||||
includes Government Id Check for the bookings.
|
||||
tests:
|
||||
- not_null
|
||||
- accepted_values:
|
||||
values:
|
||||
- W/O Id Check
|
||||
- With Id Check
|
||||
|
||||
- name: active_accommodations_per_deal_segmentation
|
||||
data_type: string
|
||||
description: |
|
||||
|
|
@ -2103,6 +2127,7 @@ models:
|
|||
The unique key corresponds to:
|
||||
- end_date,
|
||||
- id_deal,
|
||||
- has_id_check,
|
||||
- active_accommodations_per_deal_segmentation.
|
||||
|
||||
tests:
|
||||
|
|
@ -2110,6 +2135,7 @@ models:
|
|||
combination_of_columns:
|
||||
- end_date
|
||||
- id_deal
|
||||
- has_id_check
|
||||
- active_accommodations_per_deal_segmentation
|
||||
|
||||
columns:
|
||||
|
|
@ -2133,6 +2159,17 @@ models:
|
|||
tests:
|
||||
- not_null
|
||||
|
||||
- name: has_id_check
|
||||
data_type: string
|
||||
description: Does the verification in the guest journey
|
||||
includes Government Id Check for the bookings.
|
||||
tests:
|
||||
- not_null
|
||||
- accepted_values:
|
||||
values:
|
||||
- W/O Id Check
|
||||
- With Id Check
|
||||
|
||||
- name: active_accommodations_per_deal_segmentation
|
||||
data_type: string
|
||||
description: |
|
||||
|
|
@ -2180,6 +2217,113 @@ models:
|
|||
Sum of accumulated total payments paid by guests, without taxes,
|
||||
in GBP in a given month up to the given date and per specified dimension.
|
||||
|
||||
- name: int_kpis__metric_weekly_guest_payments
|
||||
description: |
|
||||
This model computes the Weekly Guest Payments at the
|
||||
deepest granularity.
|
||||
Be aware that any dimension that can change over the monthly period,
|
||||
such as daily segmentations, are included in the primary key of the
|
||||
model.
|
||||
|
||||
The unique key corresponds to:
|
||||
- end_date,
|
||||
- id_deal,
|
||||
- has_id_check,
|
||||
- active_accommodations_per_deal_segmentation.
|
||||
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- end_date
|
||||
- id_deal
|
||||
- has_id_check
|
||||
- active_accommodations_per_deal_segmentation
|
||||
|
||||
columns:
|
||||
- name: start_date
|
||||
data_type: date
|
||||
description: |
|
||||
The start date of the time range considered for the metrics in this record.
|
||||
tests:
|
||||
- not_null
|
||||
|
||||
- name: end_date
|
||||
data_type: date
|
||||
description: |
|
||||
The end date of the time range considered for the metrics in this record.
|
||||
tests:
|
||||
- not_null
|
||||
|
||||
- name: week
|
||||
data_type: int
|
||||
description: ISO week number of the given date.
|
||||
tests:
|
||||
- not_null
|
||||
|
||||
- name: id_deal
|
||||
data_type: string
|
||||
description: Unique identifier of an account.
|
||||
tests:
|
||||
- not_null
|
||||
|
||||
- name: has_id_check
|
||||
data_type: string
|
||||
description: Does the verification in the guest journey
|
||||
includes Government Id Check for the bookings.
|
||||
tests:
|
||||
- not_null
|
||||
- accepted_values:
|
||||
values:
|
||||
- W/O Id Check
|
||||
- With Id Check
|
||||
|
||||
- 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.
|
||||
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.
|
||||
tests:
|
||||
- not_null
|
||||
|
||||
- name: deposit_fees_in_gbp
|
||||
data_type: decimal
|
||||
description: |
|
||||
Sum of accumulated deposit fees paid by guests, without taxes,
|
||||
in GBP in a given week up to the given date and per specified dimension.
|
||||
|
||||
- name: waiver_payments_in_gbp
|
||||
data_type: decimal
|
||||
description: |
|
||||
Sum of accumulated waiver payments paid by guests, without taxes,
|
||||
in GBP in a given week up to the given date and per specified dimension.
|
||||
|
||||
- name: checkin_cover_fees_in_gbp
|
||||
data_type: decimal
|
||||
description: |
|
||||
Sum of accumulated checkin cover fees by guests, without taxes,
|
||||
in GBP in a given week up to the given date and per specified dimension.
|
||||
|
||||
- name: total_guest_payments_in_gbp
|
||||
data_type: decimal
|
||||
description: |
|
||||
Sum of accumulated total payments paid by guests, without taxes,
|
||||
in GBP in a given week up to the given date and per specified dimension.
|
||||
|
||||
- name: int_kpis__agg_monthly_guest_payments
|
||||
description: |
|
||||
This model computes the dimension aggregation for
|
||||
|
|
@ -2226,6 +2370,7 @@ models:
|
|||
- by_number_of_listings
|
||||
- by_billing_country
|
||||
- by_deal
|
||||
- by_has_id_check
|
||||
|
||||
- name: dimension_value
|
||||
data_type: string
|
||||
|
|
@ -2303,6 +2448,7 @@ models:
|
|||
- by_number_of_listings
|
||||
- by_billing_country
|
||||
- by_deal
|
||||
- by_has_id_check
|
||||
|
||||
- name: dimension_value
|
||||
data_type: string
|
||||
|
|
@ -2334,6 +2480,84 @@ models:
|
|||
The month-to-date total payments paid by guests, without taxes, in GBP
|
||||
for a given range date, dimension and value.
|
||||
|
||||
- name: int_kpis__agg_weekly_guest_payments
|
||||
description: |
|
||||
This model computes the dimension aggregation for
|
||||
Weekly Guest Payments.
|
||||
|
||||
The primary key of this model is end_date, dimension
|
||||
and dimension_value.
|
||||
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- end_date
|
||||
- dimension
|
||||
- dimension_value
|
||||
|
||||
columns:
|
||||
- name: start_date
|
||||
data_type: date
|
||||
description: |
|
||||
The start date of the time range considered for the metrics in this record.
|
||||
tests:
|
||||
- not_null
|
||||
|
||||
- name: end_date
|
||||
data_type: date
|
||||
description: |
|
||||
The end date of the time range considered for the metrics in this record.
|
||||
tests:
|
||||
- not_null
|
||||
|
||||
- name: dimension
|
||||
data_type: string
|
||||
description: The dimension or granularity of the metrics.
|
||||
tests:
|
||||
- assert_dimension_completeness:
|
||||
metric_column_names:
|
||||
- deposit_fees_in_gbp
|
||||
- waiver_payments_in_gbp
|
||||
- checkin_cover_fees_in_gbp
|
||||
- total_guest_payments_in_gbp
|
||||
- accepted_values:
|
||||
values:
|
||||
- global
|
||||
- by_number_of_listings
|
||||
- by_billing_country
|
||||
- by_deal
|
||||
- by_has_id_check
|
||||
|
||||
- name: dimension_value
|
||||
data_type: string
|
||||
description: The value or segment available for the selected dimension.
|
||||
tests:
|
||||
- not_null
|
||||
|
||||
- name: deposit_fees_in_gbp
|
||||
data_type: decimal
|
||||
description: |
|
||||
The weekly deposit fees paid by guests, without taxes, in GBP
|
||||
for a given range date, dimension and value.
|
||||
|
||||
- name: waiver_payments_in_gbp
|
||||
data_type: decimal
|
||||
description: |
|
||||
The weekly waiver payments paid by guests, without taxes, in GBP
|
||||
for a given range date, dimension and value.
|
||||
|
||||
- name: checkin_cover_fees_in_gbp
|
||||
data_type: decimal
|
||||
description: |
|
||||
The weekly checkin cover fees paid by guests, without taxes, in GBP
|
||||
for a given range date, dimension and value.
|
||||
|
||||
- name: total_guest_payments_in_gbp
|
||||
data_type: decimal
|
||||
description: |
|
||||
The weekly total payments paid by guests, without taxes, in GBP
|
||||
for a given range date, dimension and value.
|
||||
|
||||
- name: int_kpis__metric_daily_check_out_bookings
|
||||
description: |
|
||||
This model computes the Daily Check-out Bookings at the deepest granularity.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue