data-dwh-dbt-project/models/intermediate/cross/int_mtd_aggregated_metrics.sql
Oriol Roqué Paniagua 83d913f9fc Merged PR 2607: Propagates and exposes multiple dimension handling for KPIs
# Description

This PR ensures the propagation of the dimensions for KPIs across the key aggregating and exposing models. Additionally, provides these 2 new fields in reporting while **not affecting the current data display**, thus it's safe to work in the PBI report without needing to work in 2 PRs in parallel.

**Changes:**

**1 - Intermediate, `int_mtd_vs_previous_year_metrics`:**

* Removes the temporary filter on `where dimension in ({{ production_dimensions }})`. This will be applied directly to reporting later. This ensures that the new dimension on customer segmentation is fully available only within intermediate.
* Adds `dimension` and `dimension_value` granularity. This includes: 1) adding these fields, 2) joining by these fields with all the source CTEs containing the source models with metrics - which in turn needs the change of the dates model - and 3) joining by these fields in the self-join to compute the incremental vs. previous year.
* Changes on the schema file

**2 - Intermediate, `int_mtd_aggregated_metrics`:**

* Adds `dimension` and `dimension_value` granularity. This includes only adding these fields.
* Changes on the schema file

**3 - Reporting, `mtd_aggregated_metrics`:**

* Adds the filter removed on `int_mtd_vs_previous_year_metrics`. This ensures that only the Global dimension is available for the reporting, thus **no changes from user POV**.
* Adds `dimension` and `dimension_value` granularity. This includes only adding these fields
* Changes on the schema file

# 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: #19325
2024-08-20 15:42:27 +00:00

467 lines
18 KiB
SQL

{% set metrics = [
{
"order_by": 1,
"metric": "Created Bookings",
"value": "created_bookings",
"previous_year_value": "previous_year_created_bookings",
"relative_increment": "relative_increment_created_bookings",
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 2,
"metric": "Cancelled Bookings",
"value": "cancelled_bookings",
"previous_year_value": "previous_year_cancelled_bookings",
"relative_increment": "relative_increment_cancelled_bookings",
"number_format": "integer",
"increment_sign_format": "negative",
},
{
"order_by": 3,
"metric": "Checkout Bookings",
"value": "check_out_bookings",
"previous_year_value": "previous_year_check_out_bookings",
"relative_increment": "relative_increment_check_out_bookings",
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 4,
"metric": "Guest Journey Created",
"value": "created_guest_journeys",
"previous_year_value": "previous_year_created_guest_journeys",
"relative_increment": "relative_increment_created_guest_journeys",
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 11,
"metric": "Guest Journey Started",
"value": "started_guest_journeys",
"previous_year_value": "previous_year_started_guest_journeys",
"relative_increment": "relative_increment_started_guest_journeys",
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 12,
"metric": "Guest Journey Completed",
"value": "completed_guest_journeys",
"previous_year_value": "previous_year_completed_guest_journeys",
"relative_increment": "relative_increment_completed_guest_journeys",
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 13,
"metric": "Guest Journey with Payment",
"value": "paid_guest_journeys",
"previous_year_value": "previous_year_paid_guest_journeys",
"relative_increment": "relative_increment_paid_guest_journeys",
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 20,
"metric": "New Deals",
"value": "new_deals",
"previous_year_value": "previous_year_new_deals",
"relative_increment": "relative_increment_new_deals",
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 21,
"metric": "First Time Booked Deals",
"value": "first_time_booked_deals",
"previous_year_value": "previous_year_first_time_booked_deals",
"relative_increment": "relative_increment_first_time_booked_deals",
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 22,
"metric": "Deals Booked in Month",
"value": "deals_booked_in_month",
"previous_year_value": "previous_year_deals_booked_in_month",
"relative_increment": "relative_increment_deals_booked_in_month",
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 23,
"metric": "Deals Booked in 6 Months",
"value": "deals_booked_in_6_months",
"previous_year_value": "previous_year_deals_booked_in_6_months",
"relative_increment": "relative_increment_deals_booked_in_6_months",
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 24,
"metric": "Deals Booked in 12 Months",
"value": "deals_booked_in_12_months",
"previous_year_value": "previous_year_deals_booked_in_12_months",
"relative_increment": "relative_increment_deals_booked_in_12_months",
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 25,
"metric": "Churning Deals",
"value": "churning_deals",
"previous_year_value": "previous_year_churning_deals",
"relative_increment": "relative_increment_churning_deals",
"number_format": "integer",
"increment_sign_format": "negative",
},
{
"order_by": 30,
"metric": "New Listings",
"value": "new_listings",
"previous_year_value": "previous_year_new_listings",
"relative_increment": "relative_increment_new_listings",
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 31,
"metric": "First Time Booked Listings",
"value": "first_time_booked_listings",
"previous_year_value": "previous_year_first_time_booked_listings",
"relative_increment": "relative_increment_first_time_booked_listings",
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 32,
"metric": "Listings Booked in Month",
"value": "listings_booked_in_month",
"previous_year_value": "previous_year_listings_booked_in_month",
"relative_increment": "relative_increment_listings_booked_in_month",
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 33,
"metric": "Listings Booked in 6 Months",
"value": "listings_booked_in_6_months",
"previous_year_value": "previous_year_listings_booked_in_6_months",
"relative_increment": "relative_increment_listings_booked_in_6_months",
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 34,
"metric": "Listings Booked in 12 Months",
"value": "listings_booked_in_12_months",
"previous_year_value": "previous_year_listings_booked_in_12_months",
"relative_increment": "relative_increment_listings_booked_in_12_months",
"number_format": "integer",
"increment_sign_format": "positive",
},
{
"order_by": 35,
"metric": "Churning Listings",
"value": "churning_listings",
"previous_year_value": "previous_year_churning_listings",
"relative_increment": "relative_increment_churning_listings",
"number_format": "integer",
"increment_sign_format": "negative",
},
{
"order_by": 40,
"metric": "Host Resolutions Payment Count",
"value": "xero_host_resolution_payment_count",
"previous_year_value": "previous_year_xero_host_resolution_payment_count",
"relative_increment": "relative_increment_xero_host_resolution_payment_count",
"number_format": "integer",
"increment_sign_format": "negative",
},
{
"order_by": 100,
"metric": "Guest Journey Start Rate",
"value": "start_rate_guest_journey",
"previous_year_value": "previous_year_start_rate_guest_journey",
"relative_increment": "relative_increment_start_rate_guest_journey",
"number_format": "percentage",
"increment_sign_format": "positive",
},
{
"order_by": 101,
"metric": "Guest Journey Completion Rate",
"value": "completion_rate_guest_journey",
"previous_year_value": "previous_year_completion_rate_guest_journey",
"relative_increment": "relative_increment_completion_rate_guest_journey",
"number_format": "percentage",
"increment_sign_format": "positive",
},
{
"order_by": 102,
"metric": "Guest Journey Incompletion Rate",
"value": "incompletion_rate_guest_journey",
"previous_year_value": "previous_year_incompletion_rate_guest_journey",
"relative_increment": "relative_increment_incompletion_rate_guest_journey",
"number_format": "percentage",
"increment_sign_format": "negative",
},
{
"order_by": 103,
"metric": "Guest Journey Payment Rate",
"value": "payment_rate_guest_journey",
"previous_year_value": "previous_year_payment_rate_guest_journey",
"relative_increment": "relative_increment_payment_rate_guest_journey",
"number_format": "percentage",
"increment_sign_format": "positive",
},
{
"order_by": 200,
"metric": "Total Revenue",
"value": "total_revenue_in_gbp",
"previous_year_value": "previous_year_total_revenue_in_gbp",
"relative_increment": "relative_increment_total_revenue_in_gbp",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 201,
"metric": "Total Revenue per Booking Created",
"value": "total_revenue_per_created_booking",
"previous_year_value": "previous_year_total_revenue_per_created_booking",
"relative_increment": "relative_increment_total_revenue_per_created_booking",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 202,
"metric": "Total Revenue per Guest Journey Created",
"value": "total_revenue_per_created_guest_journey",
"previous_year_value": "previous_year_total_revenue_per_created_guest_journey",
"relative_increment": "relative_increment_total_revenue_per_created_guest_journey",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 203,
"metric": "Total Revenue per Deals Booked in Month",
"value": "total_revenue_per_deals_booked_in_month",
"previous_year_value": "previous_year_total_revenue_per_deals_booked_in_month",
"relative_increment": "relative_increment_total_revenue_per_deals_booked_in_month",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 204,
"metric": "Total Revenue per Listings Booked in Month",
"value": "total_revenue_per_listings_booked_in_month",
"previous_year_value": "previous_year_total_revenue_per_listings_booked_in_month",
"relative_increment": "relative_increment_total_revenue_per_listings_booked_in_month",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 220,
"metric": "Invoiced Operator Revenue",
"value": "xero_operator_net_fees_in_gbp",
"previous_year_value": "previous_year_xero_operator_net_fees_in_gbp",
"relative_increment": "relative_increment_xero_operator_net_fees_in_gbp",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 225,
"metric": "Invoiced Booking Fees",
"value": "xero_booking_net_fees_in_gbp",
"previous_year_value": "previous_year_xero_booking_net_fees_in_gbp",
"relative_increment": "relative_increment_xero_booking_net_fees_in_gbp",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 226,
"metric": "Invoiced Listing Fees",
"value": "xero_listing_net_fees_in_gbp",
"previous_year_value": "previous_year_xero_listing_net_fees_in_gbp",
"relative_increment": "relative_increment_xero_listing_net_fees_in_gbp",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 227,
"metric": "Invoiced Verification Fees",
"value": "xero_verification_net_fees_in_gbp",
"previous_year_value": "previous_year_xero_verification_net_fees_in_gbp",
"relative_increment": "relative_increment_xero_verification_net_fees_in_gbp",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 230,
"metric": "Invoiced APIs Revenue",
"value": "xero_apis_net_fees_in_gbp",
"previous_year_value": "previous_year_xero_apis_net_fees_in_gbp",
"relative_increment": "relative_increment_xero_apis_net_fees_in_gbp",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 235,
"metric": "Invoiced Guesty Fees",
"value": "xero_guesty_net_fees_in_gbp",
"previous_year_value": "previous_year_xero_guesty_net_fees_in_gbp",
"relative_increment": "relative_increment_xero_guesty_net_fees_in_gbp",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 236,
"metric": "Invoiced E-Deposit Fees",
"value": "xero_e_deposit_net_fees_in_gbp",
"previous_year_value": "previous_year_xero_e_deposit_net_fees_in_gbp",
"relative_increment": "relative_increment_xero_e_deposit_net_fees_in_gbp",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 250,
"metric": "Guest Revenue",
"value": "total_guest_revenue_in_gbp",
"previous_year_value": "previous_year_total_guest_revenue_in_gbp",
"relative_increment": "relative_increment_total_guest_revenue_in_gbp",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 251,
"metric": "Guest Revenue per Guest Journey Completed",
"value": "guest_revenue_per_completed_guest_journey",
"previous_year_value": "previous_year_guest_revenue_per_completed_guest_journey",
"relative_increment": "relative_increment_guest_revenue_per_completed_guest_journey",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 252,
"metric": "Guest Revenue per Guest Journey with Payment",
"value": "guest_revenue_per_paid_guest_journey",
"previous_year_value": "previous_year_guest_revenue_per_paid_guest_journey",
"relative_increment": "relative_increment_guest_revenue_per_paid_guest_journey",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 260,
"metric": "Deposit Fees",
"value": "deposit_fees_in_gbp",
"previous_year_value": "previous_year_deposit_fees_in_gbp",
"relative_increment": "relative_increment_deposit_fees_in_gbp",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 262,
"metric": "Waiver Amount Paid by Guests",
"value": "waiver_payments_in_gbp",
"previous_year_value": "previous_year_waiver_payments_in_gbp",
"relative_increment": "relative_increment_waiver_payments_in_gbp",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 263,
"metric": "Waiver Amount Paid back to Hosts",
"value": "xero_waiver_paid_back_to_host_in_gbp",
"previous_year_value": "previous_year_xero_waiver_paid_back_to_host_in_gbp",
"relative_increment": "relative_increment_xero_waiver_paid_back_to_host_in_gbp",
"number_format": "currency_gbp",
"increment_sign_format": "negative",
},
{
"order_by": 264,
"metric": "Waiver Net Fees",
"value": "waiver_net_fees_in_gbp",
"previous_year_value": "previous_year_waiver_net_fees_in_gbp",
"relative_increment": "relative_increment_waiver_net_fees_in_gbp",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 265,
"metric": "Check-In Hero Amount Paid by Guests",
"value": "checkin_cover_fees_in_gbp",
"previous_year_value": "previous_year_checkin_cover_fees_in_gbp",
"relative_increment": "relative_increment_checkin_cover_fees_in_gbp",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 270,
"metric": "Host Resolutions Amount Paid",
"value": "xero_host_resolution_amount_paid_in_gbp",
"previous_year_value": "previous_year_xero_host_resolution_amount_paid_in_gbp",
"relative_increment": "relative_increment_xero_host_resolution_amount_paid_in_gbp",
"number_format": "currency_gbp",
"increment_sign_format": "negative",
},
{
"order_by": 290,
"metric": "Guest Payments",
"value": "total_guest_payments_in_gbp",
"previous_year_value": "previous_year_total_guest_payments_in_gbp",
"relative_increment": "relative_increment_total_guest_payments_in_gbp",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 291,
"metric": "Guest Payments per Guest Journey Completed",
"value": "guest_payments_per_completed_guest_journey",
"previous_year_value": "previous_year_guest_payments_per_completed_guest_journey",
"relative_increment": "relative_increment_guest_payments_per_completed_guest_journey",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
{
"order_by": 292,
"metric": "Guest Payments per Guest Journey with Payment",
"value": "guest_payments_per_paid_guest_journey",
"previous_year_value": "previous_year_guest_payments_per_paid_guest_journey",
"relative_increment": "relative_increment_guest_payments_per_paid_guest_journey",
"number_format": "currency_gbp",
"increment_sign_format": "positive",
},
] %}
with
int_mtd_vs_previous_year_metrics as (
select * from {{ ref("int_mtd_vs_previous_year_metrics") }}
)
{% for metric in metrics %}
select
year,
month,
day,
is_end_of_month,
is_current_month,
first_day_month,
date,
dimension,
dimension_value,
previous_year_date,
{{ metric.order_by }} as order_by,
-- quotation marks added because text format
'{{ metric.number_format }}' as number_format,
'{{ metric.metric }}' as metric,
{{ metric.value }} as value,
{{ metric.previous_year_value }} as previous_year_value,
{{ metric.relative_increment }} as relative_increment,
case
when '{{ metric.increment_sign_format }}' = 'negative'
then {{ metric.relative_increment }} * -1
else {{ metric.relative_increment }}
end as relative_increment_with_sign_format
from int_mtd_vs_previous_year_metrics
{% if not loop.last %}
union all
{% endif %}
{% endfor %}