data-dwh-dbt-project/models/intermediate/kpis/int_kpis__agg_dates_main_kpis.sql
Oriol Roqué Paniagua d26e08bffd Merged PR 3909: Fixes created_date_utc and updated_date_utc in SH User and its dependencies
# Description

The model `stg_core__superhog_user` contained the fields `created_date_utc` and `updated_date_utc`, which were actually timestamps, not dates. This created issues a while ago in KPIs that were fixed by forcing a date conversion at `int_kpis` level, but the source issue remained unfixed.

This PR just creates the proper fields in staging, meaning:
* `created_at_utc` and `created_date_utc`
* `updated_at_utc` and `updated_date_utc`

And propagates the changes through all dependencies. On KPIs, it also removes the hardcoded date conversion since it's no longer needed. It also adds the different schema entries on which these fields were already defined. Note I didn't update the staging entry since there's no entry for the rest of the fields.

I recommend checking this PR in the commits order.

What I've tested:
* Unified User and User Host have plenty of dependencies that I've checked one by one, at each dependency layer by using dbt docs.
* Run `core__unified_user` and the full execution of +`mtd_aggregated_metrics`

What clearly will fail:
* There's the famous `Users_dashboard` PBI report that shouldn't exist that has a dependency with `core__unified_user`. This report will fail. But it does not exist. I'd like to drop it once and forever

# Checklist

- [X] The edited models and dependants run properly with production data. **See above**
- [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

- [X] Check if a full-refresh is required after this PR is merged. **The staging model is incremental!**

Related work items: #23703
2024-12-31 08:04:03 +00:00

57 lines
1.9 KiB
SQL

{% set dimensions = get_kpi_dimensions_per_model("") %}
{{ config(materialized="table", unique_key=["date", "dimension", "dimension_value"]) }}
with
daily_dim as (
select distinct
ikdd.year,
ikdd.month,
ikdd.day,
ikdd.date,
-- Dimensions --
coalesce(icuh.id_deal, 'UNSET') as id_deal,
coalesce(
icd.main_billing_country_iso_3_per_deal, 'UNSET'
) as main_billing_country_iso_3_per_deal,
coalesce(
icmas.active_accommodations_per_deal_segmentation, 'UNSET'
) as active_accommodations_per_deal_segmentation,
ikdd.first_day_month,
ikdd.last_day_month,
ikdd.is_end_of_month,
ikdd.is_current_month,
case
when ikdd.is_yesterday or ikdd.is_end_of_month then true else false
end as is_end_of_month_or_yesterday
from {{ ref("int_kpis__dimension_dates") }} as ikdd
left join
{{ ref("int_core__user_host") }} as icuh
on ikdd.date >= icuh.created_date_utc
left join {{ ref("int_core__deal") }} as icd on icuh.id_deal = icd.id_deal
left join
{{ ref("int_kpis__dimension_daily_accommodation") }} as icmas
on icuh.id_deal = icmas.id_deal
and ikdd.date = icmas.date
where (ikdd.is_month_to_date = true or ikdd.is_end_of_month)
)
{% for dimension in dimensions %}
select distinct
year,
month,
day,
date,
{{ dimension.dimension }} as dimension,
{{ dimension.dimension_value }} as dimension_value,
first_day_month,
last_day_month,
is_end_of_month,
is_current_month,
is_end_of_month_or_yesterday
from daily_dim
where {{ dimension.dimension_value }} <> 'UNSET'
{% if not loop.last %}
union all
{% endif %}
{% endfor %}