data-dwh-dbt-project/macros/business_kpis_configuration.sql
Oriol Roqué Paniagua 86c81c1f21 Merged PR 3599: New Dash KPIs skeleton with Created Services
# Description

This PR handles the computation of KPIs for New Dash, focusing on Created Services.

New dimensions configured in `business_kpis_configuration` and applied in this new models for `NEW_DASH_CREATED_SERVICES`:
* `dim_host`,
* `dim_has_upgraded_service`,
* `dim_new_dash_version`,
* `dim_pricing_service`

New daily metric model `int_kpis__metric_daily_new_dash_created_services`
* Follows a similar pattern as for the rest of daily metric models. The only difference is that is aggregated to `id_booking` to ensure we can handle count distinct of bookings per different time granularities.
* Reads from the new pricing tables `int_core__booking_summary` and `int_core__booking_service_detail`. The main filters applied are selecting only new dash users and only services created after the user move timestamp to new dash.

An additional metric model at monthly level is created `int_kpis__metric_monthly_new_dash_created_services`

These finally go to a dimension aggregated model (`dimension`, `dimension_value`), respectively:
* Daily: `int_kpis__agg_daily_new_dash_created_services`
* Monthly: `int_kpis__agg_monthly_new_dash_created_services`

A final model aims to aggregate the different dimension aggregated metrics for New Dash: `int_kpis__product_new_dash_agg_metrics`
* It computes a `time_granularity` aggregation
* Here I will add additional metrics (such as revenue) once we have them.

A final model reading from the previous is exposed to reporting: `kpis__product_new_dash_agg_metrics`

# 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: #20809
2024-11-20 09:43:30 +00:00

152 lines
4.5 KiB
SQL

/*
Macro: get_kpi_dimensions_for_production
Provides the list of Dimensions that will be available in production for the Main KPIs.
It provides a proper display name for reporting purposes.
*/
{% macro get_kpi_dimensions_for_production() %}
{% set dimensions = [
{"dimension": "'global'", "dimension_display": "'Global'"},
{
"dimension": "'by_number_of_listings'",
"dimension_display": "'By # of Listings Booked in 12 Months'",
},
{
"dimension": "'by_billing_country'",
"dimension_display": "'By Billing Country'",
},
] %}
{{ return(dimensions) }}
{% endmacro %}
/*
The following lines specify for each dimension the field to be used in a
standalone macro.
Please note that strings should be encoded with " ' your_value_here ' ",
while fields from tables should be specified like " your_field_here "
*/
{% macro dim_global() %}
{{ return({"dimension": "'global'", "dimension_value": "'global'"}) }}
{% endmacro %}
{% macro dim_billing_country() %}
{{
return(
{
"dimension": "'by_billing_country'",
"dimension_value": "main_billing_country_iso_3_per_deal",
}
)
}}
{% endmacro %}
{% macro dim_number_of_listings() %}
{{
return(
{
"dimension": "'by_number_of_listings'",
"dimension_value": "active_accommodations_per_deal_segmentation",
}
)
}}
{% endmacro %}
{% macro dim_deal() %}
{{ return({"dimension": "'by_deal'", "dimension_value": "id_deal"}) }}
{% endmacro %}
{% macro dim_dash() %}
{{ return({"dimension": "'by_dash_source'", "dimension_value": "dash_source"}) }}
{% endmacro %}
{% macro dim_has_payment() %}
{{ return({"dimension": "'by_has_payment'", "dimension_value": "has_payment"}) }}
{% endmacro %}
{% macro dim_has_id_check() %}
{{ return({"dimension": "'by_has_id_check'", "dimension_value": "has_id_check"}) }}
{% endmacro %}
{% macro dim_host() %}
{{ return({"dimension": "'by_host'", "dimension_value": "id_user_host"}) }}
{% endmacro %}
{% macro dim_has_upgraded_service() %}
{{
return(
{
"dimension": "'by_has_upgraded_service'",
"dimension_value": "is_upgraded_service",
}
)
}}
{% endmacro %}
{% macro dim_pricing_service() %}
{{
return(
{
"dimension": "'by_service'",
"dimension_value": "service_name",
}
)
}}
{% endmacro %}
{% macro dim_new_dash_version() %}
{{
return(
{
"dimension": "'by_new_dash_version'",
"dimension_value": "new_dash_version",
}
)
}}
{% endmacro %}
/*
Macro: get_kpi_dimensions_per_model
Provides a general assignement for the Dimensions available for each KPI
model. Keep in mind that these assignations need to be previously
declared.
*/
{% macro get_kpi_dimensions_per_model(entity_name) %}
{# Base dimensions shared by all models #}
{% set base_dimensions = [
dim_global(),
dim_number_of_listings(),
dim_billing_country(),
] %}
{# Initialize a list to hold any model-specific dimensions #}
{% set additional_dimensions = [] %}
{# Adds Deal dimension to all models except DEAL metrics #}
{% if entity_name != "DEALS" %}
{% set additional_dimensions = additional_dimensions + [dim_deal()] %}
{% endif %}
{# Add entity-specific dimensions #}
{% if entity_name == "CREATED_BOOKINGS" %}
{% set additional_dimensions = additional_dimensions + [dim_dash()] %}
{% endif %}
{% if entity_name == "CHECK_IN_ATTRIBUTED_GUEST_JOURNEYS" %}
{% set additional_dimensions = additional_dimensions + [
dim_has_payment(),
dim_has_id_check(),
] %}
{% endif %}
{% if entity_name == "GUEST_PAYMENTS" %}
{% set additional_dimensions = additional_dimensions + [
dim_has_id_check(),
] %}
{% endif %}
{% if entity_name == "NEW_DASH_CREATED_SERVICES" %}
{% set additional_dimensions = additional_dimensions + [
dim_host(),
dim_has_upgraded_service(),
dim_new_dash_version(),
dim_pricing_service(),
] %}
{% endif %}
{# Combine base dimensions with additional dimensions for the specific model #}
{% set dimensions = base_dimensions + additional_dimensions %}
{{ return(dimensions) }}
{% endmacro %}