This commit is contained in:
Joaquin Ossa 2024-11-26 12:35:28 +01:00
parent 2251a45540
commit 961b5312b2

View file

@ -0,0 +1,391 @@
{% set yesterday = "(current_date - interval '1 day')" %}
{% set metric_names = (
"created_guest_journeys_not_cancelled",
"started_guest_journeys_not_cancelled",
"completed_guest_journeys_not_cancelled",
"created_guest_journeys",
"started_guest_journeys",
"completed_guest_journeys",
"total_csat_score_count",
"deposit_fees_in_gbp",
"waiver_payments_in_gbp",
"checkin_cover_fees_in_gbp",
"total_guest_payments_in_gbp",
) %}
with
int_kpis__product_guest_daily_metrics as (
select
date_day,
has_payment,
has_id_check,
main_billing_country_iso_3_per_deal,
{% for metric in metric_names %}
{{ metric }}{% if not loop.last %},{% endif %}
{% endfor %}
from {{ ref("int_kpis__product_guest_daily_metrics") }}
),
date_ranges as (
select
{{ yesterday }} as current_date,
date_trunc('month', {{ yesterday }}) as current_month_start,
date_trunc('week', {{ yesterday }}) as current_week_start, -- Start of the current week
date_trunc('week', {{ yesterday }} - interval '1 year') as py_week_start, -- Start of the same week last year
date_trunc('week', {{ yesterday }} - interval '1 year')
+ interval '1 day'
* extract(
dow from {{ yesterday }} - interval '1 day'
) as py_week_current_date,
date_trunc('week', {{ yesterday }} - interval '1 week') as pp_week_start, -- Start of the same week in the previous period
date_trunc('month', {{ yesterday }} - interval '1 year') as py_month_start,
date_trunc('year', {{ yesterday }}) as current_year_start,
date_trunc('year', {{ yesterday }} - interval '1 year') as py_year_start,
date_trunc('month', {{ yesterday }} - interval '1 month') as pp_month_start,
{{ yesterday }} - interval '1 year' as py_current_date,
{{ yesterday }} - interval '1 month' as pm_current_date,
{{ yesterday }} - interval '1 week' as pw_current_date,
extract(day from {{ yesterday }}) as current_day_of_month
),
aggregated_metrics as (
{% for metric in metric_names %}
select
'{{ metric }}' as metric,
has_payment,
has_id_check,
main_billing_country_iso_3_per_deal,
'YTD' as timeframe,
sum(
case
when date_day between dr.current_year_start and {{ yesterday }}
then dm.{{ metric }}
end
) as current_value,
sum(
case
when date_day between dr.py_year_start and dr.py_current_date
then dm.{{ metric }}
end
) as py_value,
sum(
case
when date_day between dr.py_year_start and dr.py_current_date
then dm.{{ metric }}
end
) as pp_value
from int_kpis__product_guest_daily_metrics dm, date_ranges dr
where extract(day from date_day) <= dr.current_day_of_month
group by
metric, has_payment, has_id_check, main_billing_country_iso_3_per_deal
union all
select
'{{ metric }}' as metric,
has_payment,
has_id_check,
main_billing_country_iso_3_per_deal,
'MTD' as timeframe,
sum(
case
when date_day between dr.current_month_start and {{ yesterday }}
then dm.{{ metric }}
end
) as current_value,
sum(
case
when date_day between dr.py_month_start and dr.py_current_date
then dm.{{ metric }}
end
) as py_value,
sum(
case
when date_day between dr.pp_month_start and dr.pm_current_date
then dm.{{ metric }}
end
) as pp_value
from int_kpis__product_guest_daily_metrics dm, date_ranges dr
where extract(day from date_day) <= dr.current_day_of_month
group by
metric, has_payment, has_id_check, main_billing_country_iso_3_per_deal
union all
select
'{{ metric }}' as metric,
has_payment,
has_id_check,
main_billing_country_iso_3_per_deal,
'WTD' as timeframe,
sum(
case
when date_day between dr.current_week_start and {{ yesterday }}
then dm.{{ metric }}
end
) as current_value,
sum(
case
when date_day between dr.py_week_start and py_week_current_date
then dm.{{ metric }}
end
) as py_value,
sum(
case
when date_day between dr.pp_week_start and dr.pw_current_date
then dm.{{ metric }}
end
) as pp_value
from int_kpis__product_guest_daily_metrics dm, date_ranges dr
group by
metric, has_payment, has_id_check, main_billing_country_iso_3_per_deal
{% if not loop.last %}
union all
{% endif %}
{% endfor %}
),
metric_values as (
select
date_day,
has_payment,
has_id_check,
main_billing_country_iso_3_per_deal,
created_guest_journeys_not_cancelled,
completed_guest_journeys_not_cancelled,
-- Calculate the relevant sums for different timeframes
sum(
case
when date_day between dr.current_year_start and {{ yesterday }}
then created_guest_journeys_not_cancelled
end
) as ytd_created,
sum(
case
when date_day between dr.current_year_start and {{ yesterday }}
then completed_guest_journeys_not_cancelled
end
) as ytd_completed,
sum(
case
when date_day between dr.py_year_start and dr.py_current_date
then created_guest_journeys_not_cancelled
end
) as py_created,
sum(
case
when date_day between dr.py_year_start and dr.py_current_date
then completed_guest_journeys_not_cancelled
end
) as py_completed,
sum(
case
when date_day between dr.py_year_start and dr.py_current_date
then created_guest_journeys_not_cancelled
end
) as pp_created,
sum(
case
when date_day between dr.py_year_start and dr.py_current_date
then completed_guest_journeys_not_cancelled
end
) as pp_completed
from int_kpis__product_guest_daily_metrics dm
cross join date_ranges dr
where extract(day from date_day) <= dr.current_day_of_month
group by
date_day, has_payment, has_id_check, main_billing_country_iso_3_per_deal
),
calculated_metrics as (
select
'guest_journey_conversion_rate' as metric,
has_payment,
has_id_check,
main_billing_country_iso_3_per_deal,
'YTD' as timeframe,
case
when ytd_created = 0 then null else ytd_completed / ytd_created
end as current_value,
case
when py_created = 0 then null else py_completed / py_created
end as py_value,
case
when pp_created = 0 then null else pp_completed / pp_created
end as pp_value
from metric_values
)
-- select
-- 'guest_journey_conversion_rate' as metric,
-- has_payment,
-- has_id_check,
-- main_billing_country_iso_3_per_deal,
-- 'YTD' as timeframe,
-- case
-- when
-- sum(
-- case
-- when
-- date_day
-- between dr.current_year_start and {{ yesterday }}
-- then created_guest_journeys_not_cancelled
-- end
-- )
-- = 0
-- then null
-- else
-- sum(
-- case
-- when
-- date_day
-- between dr.current_year_start and {{ yesterday }}
-- then completed_guest_journeys_not_cancelled
-- end
-- ) / sum(
-- case
-- when
-- date_day
-- between dr.current_year_start and {{ yesterday }}
-- then created_guest_journeys_not_cancelled
-- end
-- )
-- end as current_value,
-- case
-- when
-- sum(
-- case
-- when
-- date_day
-- between dr.py_year_start and dr.py_current_date
-- then created_guest_journeys_not_cancelled
-- end
-- )
-- = 0
-- then null
-- else
-- sum(
-- case
-- when
-- date_day
-- between dr.py_year_start and dr.py_current_date
-- then completed_guest_journeys_not_cancelled
-- end
-- ) / sum(
-- case
-- when
-- date_day
-- between dr.py_year_start and dr.py_current_date
-- then created_guest_journeys_not_cancelled
-- end
-- ) as py_value,
-- case
-- when
-- sum(
-- case
-- when
-- date_day
-- between dr.py_year_start and dr.py_current_date
-- then created_guest_journeys_not_cancelled
-- end
-- )
-- = 0
-- then null
-- else
-- sum(
-- case
-- when
-- date_day
-- between dr.py_year_start and dr.py_current_date
-- then completed_guest_journeys_not_cancelled
-- end
-- ) / sum(
-- case
-- when
-- date_day
-- between dr.py_year_start and dr.py_current_date
-- then created_guest_journeys_not_cancelled
-- end
-- ) as pp_value
-- from int_kpis__product_guest_daily_metrics dm, date_ranges dr
-- where extract(day from date_day) <= dr.current_day_of_month
-- group by metric, has_payment, has_id_check, main_billing_country_iso_3_per_deal
-- union all
-- select
-- 'guest_revenue_per_guest_journey_created' as metric,
-- has_payment,
-- has_id_check,
-- main_billing_country_iso_3_per_deal,
-- 'YTD' as timeframe,
-- sum(
-- case
-- when date_day between dr.current_year_start and {{ yesterday }}
-- then total_guest_payments_in_gbp
-- end
-- ) / sum(
-- case
-- when date_day between dr.current_year_start and {{ yesterday }}
-- then created_guest_journeys_not_cancelled
-- end
-- ) as current_value,
-- sum(
-- case
-- when date_day between dr.py_year_start and dr.py_current_date
-- then total_guest_payments_in_gbp
-- end
-- ) / sum(
-- case
-- when date_day between dr.py_year_start and dr.py_current_date
-- then completed_guest_journeys_not_cancelled
-- end
-- ) as py_value,
-- sum(
-- case
-- when date_day between dr.py_year_start and dr.py_current_date
-- then total_guest_payments_in_gbp
-- end
-- ) / sum(
-- case
-- when date_day between dr.py_year_start and dr.py_current_date
-- then completed_guest_journeys_not_cancelled
-- end
-- ) as pp_value
-- from int_kpis__product_guest_daily_metrics dm, date_ranges dr
-- where extract(day from date_day) <= dr.current_day_of_month
-- group by metric, has_payment, has_id_check, main_billing_country_iso_3_per_deal
-- union all
-- select
-- 'csat_score' as metric,
-- has_payment,
-- has_id_check,
-- main_billing_country_iso_3_per_deal,
-- 'YTD' as timeframe,
-- sum(
-- case
-- when date_day between dr.current_year_start and {{ yesterday }}
-- then total_csat_score_count * average_csat_score
-- end
-- ) / sum(
-- case
-- when date_day between dr.current_year_start and {{ yesterday }}
-- then total_csat_score_count
-- end
-- ) as current_value,
-- sum(
-- case
-- when date_day between dr.py_year_start and dr.py_current_date
-- then total_csat_score_count * average_csat_score
-- end
-- ) / sum(
-- case
-- when date_day between dr.py_year_start and dr.py_current_date
-- then total_csat_score_count
-- end
-- ) as py_value,
-- sum(
-- case
-- when date_day between dr.py_year_start and dr.py_current_date
-- then total_csat_score_count * average_csat_score
-- end
-- ) / sum(
-- case
-- when date_day between dr.py_year_start and dr.py_current_date
-- then total_csat_score_count
-- end
-- ) as pp_value
-- from int_kpis__product_guest_daily_metrics dm, date_ranges dr
-- where extract(day from date_day) <= dr.current_day_of_month
-- group by metric, has_payment, has_id_check, main_billing_country_iso_3_per_deal
-- )
select *
from aggregated_metrics