Merged PR 3651: Adding billing_country as dimension and new aggregated model

# Description

Added billing_country as dimension to use in the Guest KPIs Report.
Also created a new model that pivots the metrics to leave them as a column and aggregates the values set for different timeframes (YTD, MTD, WTD). For the moment it only aggregates the values for the existing metrics on the existing models, it doesn't compute metrics like rates or averages (avg_csat_score, conversion_rate, etc..). I am not sure if it would be better to compute here in the model or just doing it in PBI, both are viable options not sure if the model is going to end up being too monstrous or it doesn't matter.
@<Oriol Roqué Paniagua> what do you think??

Imagen para ayudar a entender el modelo
![image (2).png](https://guardhog.visualstudio.com/4148d95f-4b6d-4205-bcff-e9c8e0d2ca65/_apis/git/repositories/54ac356f-aad7-46d2-b62c-e8c5b3bb8ebf/pullRequests/3651/attachments/image%20%282%29.png)

# 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.
- [ ] 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: #24604
This commit is contained in:
Joaquin Ossa 2024-11-26 13:01:58 +00:00
commit b7c5a526f7
5 changed files with 55 additions and 8 deletions

View file

@ -1,6 +1,6 @@
with with
unique_dimensions as ( unique_dimensions as (
select distinct has_payment, has_id_check select distinct has_payment, has_id_check, main_billing_country_iso_3_per_deal
from {{ ref("int_kpis__metric_daily_check_in_attributed_guest_journeys") }} from {{ ref("int_kpis__metric_daily_check_in_attributed_guest_journeys") }}
) )
select select
@ -11,7 +11,8 @@ select
else concat('Week-', d.iso_week_of_year) else concat('Week-', d.iso_week_of_year)
end as date_week, end as date_week,
ud.has_payment, ud.has_payment,
ud.has_id_check ud.has_id_check,
ud.main_billing_country_iso_3_per_deal
from {{ ref("int_dates") }} as d from {{ ref("int_dates") }} as d
cross join unique_dimensions as ud cross join unique_dimensions as ud
where d.date_day >= {{ var("start_date") }} where d.date_day >= {{ var("start_date") }}

View file

@ -6,6 +6,7 @@ with
gj.date, gj.date,
gj.has_payment, gj.has_payment,
gj.has_id_check, gj.has_id_check,
gj.main_billing_country_iso_3_per_deal,
sum( sum(
gj.created_guest_journeys_not_cancelled gj.created_guest_journeys_not_cancelled
) as created_guest_journeys_not_cancelled, ) as created_guest_journeys_not_cancelled,
@ -27,19 +28,24 @@ with
else null else null
end as average_csat_score end as average_csat_score
from {{ ref("int_kpis__metric_daily_check_in_attributed_guest_journeys") }} gj from {{ ref("int_kpis__metric_daily_check_in_attributed_guest_journeys") }} gj
group by gj.date, gj.has_payment, gj.has_id_check group by
gj.date,
gj.has_payment,
gj.has_id_check,
gj.main_billing_country_iso_3_per_deal
), ),
guest_payment_metrics as ( guest_payment_metrics as (
select select
gp.date, gp.date,
gp.has_id_check, gp.has_id_check,
gp.main_billing_country_iso_3_per_deal,
sum(gp.deposit_fees_in_gbp) as deposit_fees_in_gbp, sum(gp.deposit_fees_in_gbp) as deposit_fees_in_gbp,
sum(gp.waiver_payments_in_gbp) as waiver_payments_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.checkin_cover_fees_in_gbp) as checkin_cover_fees_in_gbp,
sum(gp.total_guest_payments_in_gbp) as total_guest_payments_in_gbp sum(gp.total_guest_payments_in_gbp) as total_guest_payments_in_gbp
from {{ ref("int_kpis__metric_daily_guest_payments") }} gp from {{ ref("int_kpis__metric_daily_guest_payments") }} gp
where gp.date < current_date where gp.date < current_date
group by gp.date, gp.has_id_check group by gp.date, gp.has_id_check, gp.main_billing_country_iso_3_per_deal
), ),
guest_kpis as ( guest_kpis as (
select select
@ -47,6 +53,7 @@ with
dd.date_week, dd.date_week,
dd.has_payment, dd.has_payment,
dd.has_id_check, dd.has_id_check,
dd.main_billing_country_iso_3_per_deal,
gj.created_guest_journeys_not_cancelled, gj.created_guest_journeys_not_cancelled,
gj.started_guest_journeys_not_cancelled, gj.started_guest_journeys_not_cancelled,
gj.completed_guest_journeys_not_cancelled, gj.completed_guest_journeys_not_cancelled,
@ -65,22 +72,26 @@ with
on gj.date = dd.date_day on gj.date = dd.date_day
and gj.has_payment = dd.has_payment and gj.has_payment = dd.has_payment
and gj.has_id_check = dd.has_id_check and gj.has_id_check = dd.has_id_check
and gj.main_billing_country_iso_3_per_deal
= dd.main_billing_country_iso_3_per_deal
left join left join
guest_payment_metrics gp guest_payment_metrics gp
on gp.date = dd.date_day on gp.date = dd.date_day
and gp.has_id_check = dd.has_id_check and gp.has_id_check = dd.has_id_check
and dd.has_payment = {{ has_payment_true }} and dd.has_payment = {{ has_payment_true }}
and gp.main_billing_country_iso_3_per_deal
= dd.main_billing_country_iso_3_per_deal
-- Restricts the records by date being in the past or in the next following 12 -- Restricts the records by date being in the past or in the next following 12
-- months -- months
where dd.date_day <= current_date + interval '1 year' where dd.date_day <= current_date + interval '1 year'
) )
select select
gk.date_day, gk.date_day,
gk.date_week, gk.date_week,
gk_py.date_day as py_date_day, gk_py.date_day as py_date_day,
gk.has_payment, gk.has_payment,
gk.has_id_check, gk.has_id_check,
gk.main_billing_country_iso_3_per_deal,
sum( sum(
gk.created_guest_journeys_not_cancelled gk.created_guest_journeys_not_cancelled
) as created_guest_journeys_not_cancelled, ) as created_guest_journeys_not_cancelled,
@ -133,6 +144,14 @@ left join
on gk.date_day = gk_py.date_day + interval '1 year' on gk.date_day = gk_py.date_day + interval '1 year'
and gk.has_payment = gk_py.has_payment and gk.has_payment = gk_py.has_payment
and gk.has_id_check = gk_py.has_id_check and gk.has_id_check = gk_py.has_id_check
and gk.main_billing_country_iso_3_per_deal
= gk_py.main_billing_country_iso_3_per_deal
-- Here we use a group by because of leap days that generate duplicity when being -- Here we use a group by because of leap days that generate duplicity when being
-- moved to another year -- moved to another year
group by gk.date_day, gk.date_week, gk_py.date_day, gk.has_payment, gk.has_id_check group by
gk.date_day,
gk.date_week,
gk_py.date_day,
gk.has_payment,
gk.has_id_check,
gk.main_billing_country_iso_3_per_deal

View file

@ -5050,6 +5050,7 @@ models:
- date_day - date_day
- has_payment - has_payment
- has_id_check - has_id_check
- main_billing_country_iso_3_per_deal
columns: columns:
- name: date_day - name: date_day
data_type: date data_type: date
@ -5084,6 +5085,13 @@ models:
- W/O Id Check - W/O Id Check
- With Id Check - With Id Check
- name: main_billing_country_iso_3_per_deal
data_type: string
description: |
Main billing country of the host.
tests:
- not_null
- name: int_kpis__product_guest_daily_metrics - name: int_kpis__product_guest_daily_metrics
description: | description: |
This model computes the Daily Guest Metrics at the deepest granularity. This model computes the Daily Guest Metrics at the deepest granularity.
@ -5095,7 +5103,8 @@ models:
- date_day, - date_day,
- py_date_day, - py_date_day,
- id_deal, - id_deal,
- has_id_check. - has_id_check,
- main_billing_country_iso_3_per_deal.
tests: tests:
- dbt_utils.unique_combination_of_columns: - dbt_utils.unique_combination_of_columns:
@ -5104,6 +5113,7 @@ models:
- py_date_day - py_date_day
- has_payment - has_payment
- has_id_check - has_id_check
- main_billing_country_iso_3_per_deal
columns: columns:
- name: date_day - name: date_day
data_type: date data_type: date
@ -5144,6 +5154,13 @@ models:
- W/O Id Check - W/O Id Check
- With Id Check - With Id Check
- name: main_billing_country_iso_3_per_deal
data_type: string
description: |
Main billing country of the host.
tests:
- not_null
- name: created_guest_journeys_not_cancelled - name: created_guest_journeys_not_cancelled
data_type: bigint data_type: bigint
description: | description: |

View file

@ -9,6 +9,7 @@ select
py_date_day as py_date_day, py_date_day as py_date_day,
has_payment as has_payment, has_payment as has_payment,
has_id_check as has_id_check, has_id_check as has_id_check,
main_billing_country_iso_3_per_deal as main_billing_country_iso_3_per_deal,
created_guest_journeys_not_cancelled as created_guest_journeys_not_cancelled, created_guest_journeys_not_cancelled as created_guest_journeys_not_cancelled,
started_guest_journeys_not_cancelled as started_guest_journeys_not_cancelled, started_guest_journeys_not_cancelled as started_guest_journeys_not_cancelled,
completed_guest_journeys_not_cancelled as completed_guest_journeys_not_cancelled, completed_guest_journeys_not_cancelled as completed_guest_journeys_not_cancelled,

View file

@ -12,7 +12,8 @@ models:
- date_day, - date_day,
- py_date_day, - py_date_day,
- id_deal, - id_deal,
- has_id_check. - has_id_check,
- main_billing_country_iso_3_per_deal.
tests: tests:
- dbt_utils.unique_combination_of_columns: - dbt_utils.unique_combination_of_columns:
@ -21,6 +22,7 @@ models:
- py_date_day - py_date_day
- has_payment - has_payment
- has_id_check - has_id_check
- main_billing_country_iso_3_per_deal
columns: columns:
- name: date_day - name: date_day
data_type: date data_type: date
@ -61,6 +63,13 @@ models:
- W/O Id Check - W/O Id Check
- With Id Check - With Id Check
- name: main_billing_country_iso_3_per_deal
data_type: string
description: |
Main billing country of the host.
tests:
- not_null
- name: created_guest_journeys_not_cancelled - name: created_guest_journeys_not_cancelled
data_type: bigint data_type: bigint
description: | description: |