# Description Changes: * 4 new models in the scope of KPIs for Billable Verifications from APIs. I believe it's more correct to say these are Billable Verifications than Billable Bookings since there's some cases in which a Booking can be duplicated and it's billed multiple times. These include: * A daily metric model - extremely simple. You will notice there's no Billing Country not Listing Segmentation. This is because for ALL API cases this is UNSET, thus, I just remove it. * An equivalent monthly metric model. * Two aggregated models per dimension, dimension value: on a daily and a monthly basis. Important change: the macro that handles the aggregations sets by default Billing Country and Listing Segmentation. I modified a bit the flow so the only required dimension is Global, and these are skipped for APIs models. This is needed for the changes intended on the Growth score. In there, I'll combine both Platform Billable Bookings with API Billable Verifications. Notice there's no MTD models. These could be added for sure; but since I'm not creating any metric in Main KPIs or similar, I opted to skip it for now. It can be done later on. # 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: #29374
216 lines
6.3 KiB
SQL
216 lines
6.3 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_main_kpis_dimensions_for_production() %}
|
|
{% set dimensions = [
|
|
{"dimension": "'global'", "dimension_display": "'Global'"},
|
|
{
|
|
"dimension": "'by_number_of_listings'",
|
|
"dimension_display": "'By # of Listings'",
|
|
},
|
|
{
|
|
"dimension": "'by_billing_country'",
|
|
"dimension_display": "'By Billing Country'",
|
|
},
|
|
{
|
|
"dimension": "'by_business_scope'",
|
|
"dimension_display": "'By Business Scope'",
|
|
},
|
|
] %}
|
|
{{ return(dimensions) }}
|
|
{% endmacro %}
|
|
|
|
{% macro capitalise_and_remove_underscores(field_name) %}
|
|
initcap(regexp_replace({{ field_name }}, '_', ' ', 'g'))
|
|
{% 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_business_scope() %}
|
|
{{
|
|
return(
|
|
{"dimension": "'by_business_scope'", "dimension_value": "business_scope"}
|
|
)
|
|
}}
|
|
{% 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_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_pricing_business_type() %}
|
|
{{
|
|
return(
|
|
{
|
|
"dimension": "'by_service_business_type'",
|
|
"dimension_value": "service_business_type",
|
|
}
|
|
)
|
|
}}
|
|
{% 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(),
|
|
] %}
|
|
|
|
{# Initialize a list to hold any model-specific dimensions #}
|
|
{% set additional_dimensions = [] %}
|
|
|
|
{# Adds Number of Listings and Billing Country dimension to all models except API models #}
|
|
{% if entity_name not in [
|
|
"API_BILLABLE_VERIFICATIONS",
|
|
] %}
|
|
{% set additional_dimensions = additional_dimensions + [
|
|
dim_number_of_listings(),
|
|
dim_billing_country,
|
|
] %}
|
|
{% endif %}
|
|
|
|
{# Adds Deal dimension to all models except DEAL metrics #}
|
|
{% if entity_name not in [
|
|
"DEALS",
|
|
"NEW_DASH_DEALS_OFFERED_SERVICES",
|
|
"ONBOARDING_MRR",
|
|
] %}
|
|
{% set additional_dimensions = additional_dimensions + [dim_deal()] %}
|
|
{% endif %}
|
|
|
|
{# Add entity-specific dimensions - General - Business Scope #}
|
|
{% if entity_name in [
|
|
"MAIN_KPIS_DATES",
|
|
"BILLABLE_BOOKINGS",
|
|
"CHECK_OUT_BOOKINGS",
|
|
"COMPLETED_GUEST_JOURNEYS",
|
|
"CREATED_BOOKINGS",
|
|
"CREATED_GUEST_JOURNEYS",
|
|
"DEALS",
|
|
"GUEST_JOURNEYS_WITH_PAYMENT",
|
|
"GUEST_PAYMENTS",
|
|
"HOST_RESOLUTIONS",
|
|
"INVOICED_REVENUE",
|
|
"LISTINGS",
|
|
"STARTED_GUEST_JOURNEYS",
|
|
"TOTAL_AND_RETAINED_REVENUE",
|
|
] %}
|
|
{% set additional_dimensions = additional_dimensions + [dim_business_scope()] %}
|
|
{% endif %}
|
|
|
|
{# Add entity-specific dimensions - Guests #}
|
|
{% 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 %}
|
|
|
|
{# Add entity-specific dimensions - APIs #}
|
|
{% if entity_name in [
|
|
"API_BILLABLE_VERIFICATIONS",
|
|
] %}
|
|
{% set additional_dimensions = additional_dimensions + [
|
|
dim_business_scope(),
|
|
dim_pricing_service(),
|
|
] %}
|
|
{% endif %}
|
|
|
|
{# Add entity-specific dimensions - New Dash #}
|
|
{% if entity_name in [
|
|
"NEW_DASH_CREATED_SERVICES",
|
|
"NEW_DASH_CHARGEABLE_SERVICES",
|
|
"NEW_DASH_ACCOMMODATION_OFFERED_SERVICES",
|
|
"NEW_DASH_CREATED_BOOKINGS",
|
|
"NEW_DASH_DEALS_OFFERED_SERVICES",
|
|
] %}
|
|
{% set additional_dimensions = additional_dimensions + [
|
|
dim_has_upgraded_service(),
|
|
dim_new_dash_version(),
|
|
dim_pricing_service(),
|
|
dim_pricing_business_type(),
|
|
] %}
|
|
{% endif %}
|
|
|
|
{# Combine base dimensions with additional dimensions for the specific model #}
|
|
{% set dimensions = base_dimensions + additional_dimensions %}
|
|
{{ return(dimensions) }}
|
|
{% endmacro %}
|