From 921e2f3de01809b31e3f56635efb71137a3207b4 Mon Sep 17 00:00:00 2001 From: ejoranlien Date: Fri, 5 Apr 2024 18:15:48 -0500 Subject: [PATCH] add calendar descriptives --- .../bld_ef3__calendar_event_summary.sql | 20 ++++++++++++++ models/core_warehouse/dim_calendar_date.sql | 20 +++----------- models/core_warehouse/dim_school_calendar.sql | 26 ++++++++++++++++++- 3 files changed, 48 insertions(+), 18 deletions(-) create mode 100644 models/build/edfi_3/bld_ef3__calendar_event_summary.sql diff --git a/models/build/edfi_3/bld_ef3__calendar_event_summary.sql b/models/build/edfi_3/bld_ef3__calendar_event_summary.sql new file mode 100644 index 00000000..17244e01 --- /dev/null +++ b/models/build/edfi_3/bld_ef3__calendar_event_summary.sql @@ -0,0 +1,20 @@ +with stg_calendar_events as ( + select * from {{ ref('stg_ef3__calendar_dates__calendar_events')}} +), +xwalk_calendar_events as ( + select * from {{ ref('xwalk_calendar_events') }} +), +summarize_calendar_events as ( + select + stg_calendar_events.tenant_code, + stg_calendar_events.k_calendar_date, + -- if there are multiple events on a day, having at least one + -- that counts as a school day applies to the whole day + sum(xwalk_calendar_events.is_school_day::integer) >= {{ var("edu:attendance:num_school_day_calendar_events", 1) }} as is_school_day, + array_agg(stg_calendar_events.calendar_event) as calendar_events_array + from stg_calendar_events + join xwalk_calendar_events + on stg_calendar_events.calendar_event = xwalk_calendar_events.calendar_event_descriptor + group by all +) +select * from summarize_calendar_events \ No newline at end of file diff --git a/models/core_warehouse/dim_calendar_date.sql b/models/core_warehouse/dim_calendar_date.sql index ad90fd51..7ccea387 100644 --- a/models/core_warehouse/dim_calendar_date.sql +++ b/models/core_warehouse/dim_calendar_date.sql @@ -11,27 +11,13 @@ with stg_calendar_date as ( select * from {{ ref('stg_ef3__calendar_dates') }} ), -stg_calendar_events as ( - select * from {{ ref('stg_ef3__calendar_dates__calendar_events')}} -), + dim_school_calendar as ( select * from {{ ref('dim_school_calendar') }} ), -xwalk_calendar_events as ( - select * from {{ ref('xwalk_calendar_events') }} -), summarize_calendar_events as ( - select - stg_calendar_events.k_calendar_date, - -- if there are multiple events on a day, having at least one - -- that counts as a school day applies to the whole day - sum(xwalk_calendar_events.is_school_day::integer) >= {{ var("edu:attendance:num_school_day_calendar_events", 1) }} as is_school_day, - array_agg(stg_calendar_events.calendar_event) as calendar_events_array - from stg_calendar_events - join xwalk_calendar_events - on stg_calendar_events.calendar_event = xwalk_calendar_events.calendar_event_descriptor - group by 1 -), + select * from {{ ref('bld_ef3__calendar_event_summary') }} +), formatted as ( select stg_calendar_date.k_calendar_date, diff --git a/models/core_warehouse/dim_school_calendar.sql b/models/core_warehouse/dim_school_calendar.sql index e9a84c03..cc414cd3 100644 --- a/models/core_warehouse/dim_school_calendar.sql +++ b/models/core_warehouse/dim_school_calendar.sql @@ -16,6 +16,24 @@ calendar_grades as ( dim_school as ( select * from {{ ref('dim_school') }} ), +calendar_event_summary as ( + select * from {{ ref('bld_ef3__calendar_event_summary') }} +), +stg_calendar_dates as ( + select* from {{ ref('stg_ef3__calendar_dates') }} +), +calendar_descriptives as ( + select + calendar_event_summary.k_school_calendar, + min(stg_calendar_dates.calendar_date) as min_calendar_date, + max(stg_calendar_dates.calendar_date) as max_calendar_date, + count(*) as total_school_days + from calendar_event_summary + join stg_calendar_dates + on calendar_event_summary.k_calendar_date = stg_calendar_dates.k_calendar_date + where is_school_day + group by all +) aggregated_grades as ( select k_school_calendar, @@ -31,12 +49,18 @@ formatted as ( stg_calendar.school_year, stg_calendar.calendar_code, stg_calendar.calendar_type, + calendar_descriptives.min_calendar_date, + calendar_descriptives.max_calendar_date, + calendar_descriptives.total_school_days + calendar_descriptives.total_school_days < {{ var('edu:calendar:nonstandard_threshold', 60) }} as is_nonstandard_calendar, aggregated_grades.applicable_grade_levels_array from stg_calendar join dim_school on stg_calendar.k_school = dim_school.k_school left join aggregated_grades on stg_calendar.k_school_calendar = aggregated_grades.k_school_calendar + left join calendar_descriptives + on stg_calendar.k_school_calendar = calendar_descriptives.k_school_calendar ) select * from formatted -order by tenant_code, k_school, k_school_calendar \ No newline at end of file +order by tenant_code, k_school, k_school_calendar