From 85131985d8aa1f794644229117506544d7d562ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oriol=20Roqu=C3=A9=20Paniagua?= Date: Wed, 21 Aug 2024 14:42:05 +0000 Subject: [PATCH] Merged PR 2615: Beautification of KPIs dimensions # Description Changes: * Separate 1) the internal naming of dimensions available within DWH vs. 2) the display of the dimensions in the reporting. Mainly it changes the "by_number_of_listings" to display "By # of Listings Booked in 12 Months". I edited the production macro since to me it's linked to when things are available for display. * Add preceding zeros on the segmentation so it's ordered correctly. Before, the segment 21-60 was displayed before the 6-20. * Also added some capital letters to the schema config of the reporting model :) I attach a screenshot of how it looks in PBI in my local development branch to exemplify why this is "Beautification". Be aware that merging this also puts in production the dimensions. ![image.png](https://guardhog.visualstudio.com/4148d95f-4b6d-4205-bcff-e9c8e0d2ca65/_apis/git/repositories/54ac356f-aad7-46d2-b62c-e8c5b3bb8ebf/pullRequests/2615/attachments/image.png) # 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 --- macros/business_kpis_configuration.sql | 9 ++-- ...t_core__mtd_accommodation_segmentation.sql | 4 +- models/intermediate/core/schema.yaml | 8 ++-- .../general/mtd_aggregated_metrics.sql | 20 +++++++-- models/reporting/general/schema.yaml | 42 ++++++++++--------- 5 files changed, 51 insertions(+), 32 deletions(-) diff --git a/macros/business_kpis_configuration.sql b/macros/business_kpis_configuration.sql index 9583455..80d5458 100644 --- a/macros/business_kpis_configuration.sql +++ b/macros/business_kpis_configuration.sql @@ -20,12 +20,15 @@ Macro: get_kpi_dimensions_for_production Provides the list of Dimensions that will be available in production for the KPIs. This configuration ensures that working with new dimensions won't affect the display - until all development work has been done. + until all development work has been done. +Additionally, it provides a proper display name for reporting purposes. -To be added: 'by_number_of_listings' + {"dimension": "'by_number_of_listings'", "dimension_display": "'By # of Listings Booked in 12 Months'"} */ {% macro get_kpi_dimensions_for_production() %} - {% set dimensions = "('global')" %} + {% set dimensions = [ + {"dimension": "'global'", "dimension_display": "'Global'"} + ] %} {{ return(dimensions) }} {% endmacro %} \ No newline at end of file diff --git a/models/intermediate/core/int_core__mtd_accommodation_segmentation.sql b/models/intermediate/core/int_core__mtd_accommodation_segmentation.sql index 68411b8..f5190d6 100644 --- a/models/intermediate/core/int_core__mtd_accommodation_segmentation.sql +++ b/models/intermediate/core/int_core__mtd_accommodation_segmentation.sql @@ -30,9 +30,9 @@ select when accommodations_booked_in_12_months = 0 then '0' when accommodations_booked_in_12_months between 1 and 5 - then '1-5' + then '01-05' when accommodations_booked_in_12_months between 6 and 20 - then '6-20' + then '06-20' when accommodations_booked_in_12_months between 21 and 60 then '21-60' when accommodations_booked_in_12_months >= 61 diff --git a/models/intermediate/core/schema.yaml b/models/intermediate/core/schema.yaml index db661e8..2ed900b 100644 --- a/models/intermediate/core/schema.yaml +++ b/models/intermediate/core/schema.yaml @@ -1133,8 +1133,8 @@ models: have been booked within the last 12 months. Thus, it means it only considers the lifecycle states of 03-First Time Booked, 04-Active and 07-Reactivated. The segments are the following: - '0' - - '1-5' - - '6-20' + - '01-05' + - '06-20' - '21-60' - '61+' These segments are inspired from the ones RevOps team uses, but the associated deals and listings volume will differ @@ -1167,8 +1167,8 @@ models: - accepted_values: values: - '0' - - '1-5' - - '6-20' + - '01-05' + - '06-20' - '21-60' - '61+' diff --git a/models/reporting/general/mtd_aggregated_metrics.sql b/models/reporting/general/mtd_aggregated_metrics.sql index 9066834..b55ebb3 100644 --- a/models/reporting/general/mtd_aggregated_metrics.sql +++ b/models/reporting/general/mtd_aggregated_metrics.sql @@ -1,12 +1,26 @@ {% set production_dimensions = get_kpi_dimensions_for_production() %} with + dimensions as ( + {% for dimension in production_dimensions %} + select + {{ dimension.dimension }} as dimension, + {{ dimension.dimension_display }} as dimension_display + {% if not loop.last %} + union all + {% endif %} + {% endfor %} + ), int_mtd_aggregated_metrics as ( - select * from {{ ref("int_mtd_aggregated_metrics") }} + select + m.*, + d.dimension_display + from {{ ref("int_mtd_aggregated_metrics") }} m -- The following clause limits the display execution -- to only include those dimensions configured to -- appear for production purposes - where dimension in ({{ production_dimensions }}) + inner join dimensions d + on m.dimension = d.dimension ) select @@ -17,7 +31,7 @@ select is_current_month as is_current_month, first_day_month as first_day_month, date as date, - dimension as dimension, + dimension_display as dimension, dimension_value as dimension_value, previous_year_date as previous_year_date, order_by as order_by, diff --git a/models/reporting/general/schema.yaml b/models/reporting/general/schema.yaml index 99bdb10..98e9533 100644 --- a/models/reporting/general/schema.yaml +++ b/models/reporting/general/schema.yaml @@ -317,32 +317,32 @@ models: columns: - name: year data_type: int - description: year number of the given date. + description: Year number of the given date. tests: - not_null - name: month data_type: int - description: month number of the given date. + description: Month number of the given date. tests: - not_null - name: day data_type: int - description: day monthly number of the given date. + description: Day monthly number of the given date. tests: - not_null - name: is_end_of_month data_type: boolean - description: is end of month, 1 for yes, 0 for no. + description: Is end of month, 1 for yes, 0 for no. tests: - not_null - name: is_current_month data_type: boolean description: | - checks if the date is within the current executed month, + Checks if the date is within the current executed month, 1 for yes, 0 for no. tests: - not_null @@ -350,7 +350,7 @@ models: - name: first_day_month data_type: date description: | - first day of the month correspoding to the date field. + First day of the month correspoding to the date field. It comes from int_dates_mtd logic. tests: - not_null @@ -358,19 +358,21 @@ models: - name: date data_type: date description: | - main date for the computation, that is used for filters. + Main date for the computation, that is used for filters. It comes from int_dates_mtd logic. tests: - not_null - name: dimension data_type: string - description: The dimension or granularity of the metrics. + description: | + The dimension or granularity of the metrics. Keep in mind that + in this reporting model this field corresponds to the + dimension_display; this is, the name of the dimension for + displaying purposes. + tests: - - accepted_values: - values: - - global - - by_number_of_listings + - not_null - name: dimension_value data_type: string @@ -381,25 +383,25 @@ models: - name: previous_year_date data_type: date description: | - corresponds to the date of the previous year, with respect to the field date. + Corresponds to the date of the previous year, with respect to the field date. It comes from int_dates_mtd logic. It's only displayed for information purposes, should not be needed for reporting. - name: metric data_type: text - description: name of the business metric. + description: Name of the business metric. tests: - not_null - name: order_by data_type: integer description: | - order for displaying purposes. Null values are accepted, but keep + Order for displaying purposes. Null values are accepted, but keep in mind that then there's no default controlled display order. - name: number_format data_type: text - description: allows for grouping and formatting for displaying purposes. + description: Allows for grouping and formatting for displaying purposes. tests: - accepted_values: values: ['integer', 'percentage', 'currency_gbp'] @@ -407,26 +409,26 @@ models: - name: value data_type: numeric description: | - numeric value (integer or decimal) that corresponds to the MTD computation of the metric + Numeric value (integer or decimal) that corresponds to the MTD computation of the metric at a given date. Note that if the month is not in progress, then this value corresponds to the monthly figure. - name: previous_year_value data_type: numeric description: | - numeric value (integer or decimal) that corresponds to the MTD computation of the metric + Numeric value (integer or decimal) that corresponds to the MTD computation of the metric on the previous year at a given date. - name: relative_increment data_type: numeric description: | - numeric value that corresponds to the relative increment between value and previous year value, + Numeric value that corresponds to the relative increment between value and previous year value, following the computation: value / previous_year_value - 1. - name: relative_increment_with_sign_format data_type: numeric description: | - relative_increment value multiplied by -1 in case this metric's growth doesn't have a + Relative_increment value multiplied by -1 in case this metric's growth doesn't have a positive impact for Superhog, otherwise is equal to relative_increment. This value is specially created for formatting in PBI