New aggregated model in intermediate for e-deposit report

This commit is contained in:
Joaquin Ossa 2024-08-28 16:38:30 +02:00
parent 958dc97ac2
commit 0b6239e5c2
2 changed files with 106 additions and 0 deletions

View file

@ -0,0 +1,49 @@
{% set ok_status_fee_calculation = "case when verification_status = 'Approved' or verification_status = 'Flagged' then cast(nightly_fee_local as float) * number_nights else 0 end" %}
{% set rejected_fee_calculation = (
"case when verification_status = 'Rejected' then 0.25 else 0 end"
) %}
with
int_edeposit__verifications as (
select * from {{ ref("int_edeposit__verifications") }}
),
edeposit_records as (
select
id_booking,
is_cancelled,
channel,
cast(checkin_at_utc as date) as checkin_date_utc,
cast(checkout_at_utc as date) as checkout_date_utc,
creation_at_utc,
verification_status,
id_user_host,
{{ ok_status_fee_calculation }} as ok_status_fee,
{{ rejected_fee_calculation }} as rejected_fee,
to_char(creation_at_utc, 'YYYY-MM') as year_month_created,
to_char(checkout_at_utc, 'YYYY-MM') as year_month_checkout
from int_edeposit__verifications
where version = 'V2' -- This version V2 indicates records for e-deposit
)
select
year_month_created,
year_month_checkout,
id_user_host,
count(distinct id_booking) as bookings_per_month,
sum(cast(is_cancelled as integer)) as cancelled_per_month,
sum(cast(is_cancelled as integer))::decimal / count(*) as cancelled_ratio,
case
when sum(cast(is_cancelled as integer))::decimal / count(*) >= 0.05
then sum(cast(is_cancelled as integer)) * 0.25
else 0
end as sum_cancelled_fee,
sum(ok_status_fee) as ok_status_fee_sum,
sum(rejected_fee) as rejected_fee_sum,
case
when sum(cast(is_cancelled as integer))::decimal / count(*) >= 0.05
then sum(cast(is_cancelled as integer)) * 0.25
else 0
end
+ sum(ok_status_fee)
+ sum(rejected_fee) as total_revenue
from edeposit_records
group by year_month_created, year_month_checkout, id_user_host

View file

@ -2937,3 +2937,60 @@ models:
- name: created_at_utc
data_type: timestamp without time zone
description: ""
models:
- name: int_edeposit__agg_fee_per_user
description:
"This table holds detailed data on revenue generated through e-deposit verifications.
Each record provides insights into booking activities per user, including the number
of bookings, cancellations, and associated fees within specific months. Each record
captures data for bookings created in a particular month along with their corresponding
checkout month, allowing for a comprehensive view of the booking lifecycle and associated
revenues within those periods."
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- year_month_created
- year_month_checkout
- id_user
columns:
- name: year_month_created
data_type: text
description: "first day of month of created date"
- name: year_month_checkout
data_type: text
description: "first day of month of check-out date"
- name: id_user_host
data_type: text
description: "unique id value for user host"
- name: bookings_per_month
data_type: bigint
description: "total number of bookings"
- name: cancelled_per_month
data_type: bigint
description: "number of cancelled bookings"
- name: cancelled_ratio
data_type: numeric
description: "ratio of cancelled bookings over total bookings"
- name: sum_cancelled_fee
data_type: numeric
description: "sum of fees charged for cancelled bookings"
- name: ok_status_fee_sum
data_type: double precision
description: |
"sum of fees charged for bookings with status 'Approved' or 'Flagged'"
- name: rejected_fee_sum
data_type: numeric
description: "sum of fees charged for rejected bookings"
- name: total_revenue
data_type: double precision
description: "total sum of fees charged"