diff --git a/models/build/edfi_3/courses/bld_ef3__section__wide_section_characteristics.sql b/models/build/edfi_3/courses/bld_ef3__section__wide_section_characteristics.sql new file mode 100644 index 00000000..29f9d5da --- /dev/null +++ b/models/build/edfi_3/courses/bld_ef3__section__wide_section_characteristics.sql @@ -0,0 +1,35 @@ +with sections as ( + select * from {{ ref('stg_ef3__sections') }} +), +xwalk_section_characteristics as ( + select * from {{ ref('xwalk_section_characteristics') }} +), +flattened as ( + select + k_course_section, + {{ edu_edfi_source.extract_descriptor('section_chars.value:sectionCharacteristicDescriptor::string') }} as section_characteristic + from sections + {{ edu_edfi_source.json_flatten('v_section_characteristics', 'section_chars', outer=true) }} +), +pivoted as ( + select + k_course_section, + {{ edu_edfi_source.json_array_agg( + 'section_characteristic', + order_by='section_characteristic', + is_terminal=True + ) }} as section_characteristics_array + {%- if not is_empty_model('xwalk_section_characteristics') -%}, + {{ ea_pivot( + column='indicator_name', + values=dbt_utils.get_column_values(ref('xwalk_section_characteristics'), 'indicator_name'), + cast='boolean', + ) }} + {%- endif %} + from flattened + left outer join xwalk_section_characteristics + on flattened.section_characteristic = xwalk_section_characteristics.section_characteristic_descriptor + group by all +) +select * +from pivoted \ No newline at end of file diff --git a/models/core_warehouse/dim_course_section.sql b/models/core_warehouse/dim_course_section.sql index 504ed590..f40b0e37 100644 --- a/models/core_warehouse/dim_course_section.sql +++ b/models/core_warehouse/dim_course_section.sql @@ -22,9 +22,12 @@ stg_ef3__sections as ( dim_course as ( select * from {{ ref('dim_course') }} ), -section_chars as ( +course_level_chars as ( select * from {{ ref('bld_ef3__course_char__combined_wide') }} ), +section_chars as ( + select * from {{ ref('bld_ef3__section__wide_section_characteristics') }} +), joined as ( select stg_ef3__sections.k_course_section, @@ -47,14 +50,23 @@ joined as ( stg_ef3__sections.is_official_attendance_period, stg_ef3__sections.sequence_of_course, - -- section characteristics + -- course level characteristics {{ accordion_columns( source_table='bld_ef3__course_char__combined_wide', exclude_columns=['tenant_code', 'api_year', 'k_course', 'k_course_offering', 'k_course_section', 'course_level_characteristics_array'], + source_alias='course_level_chars', + coalesce_value = 'FALSE' + ) }} + course_level_chars.course_level_characteristics_array, + + -- section characteristics + {{ accordion_columns( + source_table='bld_ef3__section__wide_section_characteristics', + exclude_columns=['k_course_section', 'section_characteristics_array'], source_alias='section_chars', coalesce_value = 'FALSE' ) }} - section_chars.course_level_characteristics_array, + section_chars.section_characteristics_array, stg_ef3__sections.educational_environment_type, stg_ef3__sections.instruction_language, @@ -79,6 +91,8 @@ joined as ( on stg_ef3__sections.k_course_offering = offering.k_course_offering join dim_course on offering.k_course = dim_course.k_course + left join course_level_chars + on stg_ef3__sections.k_course_section = course_level_chars.k_course_section left join section_chars on stg_ef3__sections.k_course_section = section_chars.k_course_section -- custom data sources