From 3136bced53a5d70e1b733ef5ecd28d56b830bfb9 Mon Sep 17 00:00:00 2001 From: gnguyen87 Date: Wed, 20 Aug 2025 10:41:55 -0500 Subject: [PATCH 1/7] first draft of bld_other_names model --- .../bld_ef3__students__other_names.sql | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 models/build/edfi_3/students/bld_ef3__students__other_names.sql diff --git a/models/build/edfi_3/students/bld_ef3__students__other_names.sql b/models/build/edfi_3/students/bld_ef3__students__other_names.sql new file mode 100644 index 00000000..9bf5a342 --- /dev/null +++ b/models/build/edfi_3/students/bld_ef3__students__other_names.sql @@ -0,0 +1,24 @@ +{%- set name_type_list = ['personalTitlePrefix', 'firstName', 'middleName', 'lastSurname', 'generationCodeSuffix']-%} + +with stg_other_names as ( + select * from {{ ref('stg_ef3__students__other_names') }} +), +widened as ( + select + * exclude (otherNameType, personalTitlePrefix, firstName, middleName, lastSurname, generationCodeSuffix), + {%- for name_type in name_type_list -%} + {{ ea_pivot( + column='otherNameType', + values=dbt_utils.get_column_values(ref('stg_ef3__students__other_names'),'otherNameType'), + agg='min', + suffix='_' ~ dbt_utils.slugify(name_type), + then_value=name_type, + else_value='null', + )}} + {%- if not loop.last -%},{%- endif-%} + {%- endfor-%} + from stg_other_names + group by all + +) +select * from widened \ No newline at end of file From 79dd0e784e9a1f9041190f61b2d407ee01917a69 Mon Sep 17 00:00:00 2001 From: gnguyen87 Date: Wed, 20 Aug 2025 11:07:38 -0500 Subject: [PATCH 2/7] update model with optional xwalk --- .../bld_ef3__students__other_names.sql | 36 ++++++++++++------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/models/build/edfi_3/students/bld_ef3__students__other_names.sql b/models/build/edfi_3/students/bld_ef3__students__other_names.sql index 9bf5a342..5a7d4b70 100644 --- a/models/build/edfi_3/students/bld_ef3__students__other_names.sql +++ b/models/build/edfi_3/students/bld_ef3__students__other_names.sql @@ -1,23 +1,33 @@ -{%- set name_type_list = ['personalTitlePrefix', 'firstName', 'middleName', 'lastSurname', 'generationCodeSuffix']-%} +{%- set name_type_list = ['personal_title_prefix', 'first_name', 'middle_name', 'last_surname', 'generation_code_suffix']-%} with stg_other_names as ( select * from {{ ref('stg_ef3__students__other_names') }} ), +xwalk_other_names as ( + select * from {{ ref('xwalk_student_other_names')}} +), widened as ( select - * exclude (otherNameType, personalTitlePrefix, firstName, middleName, lastSurname, generationCodeSuffix), - {%- for name_type in name_type_list -%} - {{ ea_pivot( - column='otherNameType', - values=dbt_utils.get_column_values(ref('stg_ef3__students__other_names'),'otherNameType'), - agg='min', - suffix='_' ~ dbt_utils.slugify(name_type), - then_value=name_type, - else_value='null', - )}} - {%- if not loop.last -%},{%- endif-%} - {%- endfor-%} + tenant_code, + api_year, + k_student, + k_student_xyear + {%- if not is_empty_model('xwalk_student_other_names') -%}, + {%- for name_type in name_type_list -%} + {{ ea_pivot( + column='dim_other_name', + values=dbt_utils.get_column_values(ref('xwalk_student_other_names'),'dim_other_name'), + agg='min', + suffix='_' ~ name_type, + then_value=name_type, + else_value='null', + )}} + {%- if not loop.last -%},{%- endif-%} + {%- endfor-%} + {%- endif-%} from stg_other_names + left join xwalk_other_names + on stg_other_names.other_name_type = xwalk_other_names.original_otherNameType group by all ) From 02cd08b190b1527ed10408762ccc753d4148df00 Mon Sep 17 00:00:00 2001 From: gnguyen87 Date: Wed, 20 Aug 2025 11:43:12 -0500 Subject: [PATCH 3/7] add documentation --- models/build/edfi_3/students/bld_ef3__students__other_names.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/models/build/edfi_3/students/bld_ef3__students__other_names.sql b/models/build/edfi_3/students/bld_ef3__students__other_names.sql index 5a7d4b70..c4c75e36 100644 --- a/models/build/edfi_3/students/bld_ef3__students__other_names.sql +++ b/models/build/edfi_3/students/bld_ef3__students__other_names.sql @@ -1,3 +1,5 @@ +-- otherName properties pulled from Ed-Fi Data Handbook (v5.0.0) +-- https://edfidocs.blob.core.windows.net/$web/handbook/v5.0/index.html#/OtherName82adcecf-8e39-4f24-a5a6-3c32964693c3 {%- set name_type_list = ['personal_title_prefix', 'first_name', 'middle_name', 'last_surname', 'generation_code_suffix']-%} with stg_other_names as ( From 6ed57df860e2747a8dbd741b9ecaaf46ed05ab58 Mon Sep 17 00:00:00 2001 From: gnguyen87 Date: Thu, 21 Aug 2025 11:51:46 -0500 Subject: [PATCH 4/7] update to match new xwalk format --- .../edfi_3/students/bld_ef3__students__other_names.sql | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/models/build/edfi_3/students/bld_ef3__students__other_names.sql b/models/build/edfi_3/students/bld_ef3__students__other_names.sql index c4c75e36..06978047 100644 --- a/models/build/edfi_3/students/bld_ef3__students__other_names.sql +++ b/models/build/edfi_3/students/bld_ef3__students__other_names.sql @@ -1,5 +1,5 @@ --- otherName properties pulled from Ed-Fi Data Handbook (v5.0.0) --- https://edfidocs.blob.core.windows.net/$web/handbook/v5.0/index.html#/OtherName82adcecf-8e39-4f24-a5a6-3c32964693c3 +{# otherName properties pulled from Ed-Fi Data Handbook (v5.0.0) +https://edfidocs.blob.core.windows.net/$web/handbook/v5.0/index.html#/OtherName82adcecf-8e39-4f24-a5a6-3c32964693c3 #} {%- set name_type_list = ['personal_title_prefix', 'first_name', 'middle_name', 'last_surname', 'generation_code_suffix']-%} with stg_other_names as ( @@ -17,8 +17,8 @@ widened as ( {%- if not is_empty_model('xwalk_student_other_names') -%}, {%- for name_type in name_type_list -%} {{ ea_pivot( - column='dim_other_name', - values=dbt_utils.get_column_values(ref('xwalk_student_other_names'),'dim_other_name'), + column='dim_stu_name', + values=dbt_utils.get_column_values(ref('xwalk_student_other_names'),'dim_stu_name'), agg='min', suffix='_' ~ name_type, then_value=name_type, @@ -29,7 +29,7 @@ widened as ( {%- endif-%} from stg_other_names left join xwalk_other_names - on stg_other_names.other_name_type = xwalk_other_names.original_otherNameType + on stg_other_names.other_name_type = xwalk_other_names.original_other_name_type group by all ) From 58689db27d710f3ff54a150a08071586967de344 Mon Sep 17 00:00:00 2001 From: gnguyen87 Date: Tue, 26 Aug 2025 13:35:34 -0500 Subject: [PATCH 5/7] update other_name models to be optional + bring into dim_student --- ...mes.sql => bld_ef3__student__other_names.sql} | 11 +++-------- models/core_warehouse/dim_student.sql | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 9 deletions(-) rename models/build/edfi_3/students/{bld_ef3__students__other_names.sql => bld_ef3__student__other_names.sql} (73%) diff --git a/models/build/edfi_3/students/bld_ef3__students__other_names.sql b/models/build/edfi_3/students/bld_ef3__student__other_names.sql similarity index 73% rename from models/build/edfi_3/students/bld_ef3__students__other_names.sql rename to models/build/edfi_3/students/bld_ef3__student__other_names.sql index 06978047..ad7c3fde 100644 --- a/models/build/edfi_3/students/bld_ef3__students__other_names.sql +++ b/models/build/edfi_3/students/bld_ef3__student__other_names.sql @@ -5,20 +5,17 @@ https://edfidocs.blob.core.windows.net/$web/handbook/v5.0/index.html#/OtherName8 with stg_other_names as ( select * from {{ ref('stg_ef3__students__other_names') }} ), -xwalk_other_names as ( - select * from {{ ref('xwalk_student_other_names')}} -), widened as ( select tenant_code, api_year, k_student, k_student_xyear - {%- if not is_empty_model('xwalk_student_other_names') -%}, + {%- if not is_empty_model('stg_ef3__students__other_names') -%}, {%- for name_type in name_type_list -%} {{ ea_pivot( - column='dim_stu_name', - values=dbt_utils.get_column_values(ref('xwalk_student_other_names'),'dim_stu_name'), + column='other_name_type', + values=dbt_utils.get_column_values(ref('stg_ef3__students__other_names'),'other_name_type'), agg='min', suffix='_' ~ name_type, then_value=name_type, @@ -28,8 +25,6 @@ widened as ( {%- endfor-%} {%- endif-%} from stg_other_names - left join xwalk_other_names - on stg_other_names.other_name_type = xwalk_other_names.original_other_name_type group by all ) diff --git a/models/core_warehouse/dim_student.sql b/models/core_warehouse/dim_student.sql index 510244f3..001fed20 100644 --- a/models/core_warehouse/dim_student.sql +++ b/models/core_warehouse/dim_student.sql @@ -24,7 +24,8 @@ {% set custom_homeless_program_agg_indicators = var('edu:homeless:custom_program_agg_indicators', None) %} {% set custom_language_instruction_program_agg_indicators = var('edu:language_instruction:custom_program_agg_indicators', None) %} {% set custom_title_i_program_agg_indicators = var('edu:title_i:custom_program_agg_indicators', None) %} - +{% set other_name_types = var('edu:stu_demos:other_names', None) %} +{%- set name_type_list = ['personal_title_prefix', 'first_name', 'middle_name', 'last_surname', 'generation_code_suffix']-%} with stg_student as ( select * from {{ ref('stg_ef3__students') }} @@ -53,6 +54,9 @@ stu_grade as ( stu_cohort_year as ( select * from {{ ref('bld_ef3__student_cohort_years')}} ), +stu_other_names as ( + select * from {{ ref('bld_ef3__student__other_names') }} +), -- student programs {% if var('src:program:special_ed:enabled', True) %} @@ -191,6 +195,14 @@ formatted as ( {%- endfor -%} {%- endif %} + -- other name types + {% if other_name_types is not none and other_name_types | length -%} + {%- for type in other_name_types -%} + {%- for name_type in name_type_list -%} + stu_other_names.{{dbt_utils.slugify(type)}}_{{name_type}}, + {%- endfor -%} + {%- endfor -%} + {%- endif -%} -- add indicator of most recent demographic entry stg_student.api_year = max(stg_student.api_year) over(partition by stg_student.k_student_xyear) as is_latest_record, @@ -222,6 +234,8 @@ formatted as ( and stg_student.api_year = stu_grade.school_year left join stu_cohort_year on stu_demos.k_student = stu_cohort_year.k_student + left join stu_other_names + on stu_demos.k_student = stu_other_names.k_student -- student programs {% if var('src:program:special_ed:enabled', True) %} From 9ed7277c5ec15e1fdc8cb6ad87995de4d3d25eee Mon Sep 17 00:00:00 2001 From: rlittle08 Date: Mon, 8 Sep 2025 13:59:37 -0500 Subject: [PATCH 6/7] fix whitespace for empty model case --- .../build/edfi_3/students/bld_ef3__student__other_names.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/models/build/edfi_3/students/bld_ef3__student__other_names.sql b/models/build/edfi_3/students/bld_ef3__student__other_names.sql index ad7c3fde..6bd3719c 100644 --- a/models/build/edfi_3/students/bld_ef3__student__other_names.sql +++ b/models/build/edfi_3/students/bld_ef3__student__other_names.sql @@ -23,9 +23,9 @@ widened as ( )}} {%- if not loop.last -%},{%- endif-%} {%- endfor-%} - {%- endif-%} + {%- endif %} from stg_other_names group by all ) -select * from widened \ No newline at end of file +select * from widened From 4b192406ebdde260505d6c335dd42103e4242bfd Mon Sep 17 00:00:00 2001 From: rlittle08 Date: Wed, 10 Sep 2025 11:17:24 -0500 Subject: [PATCH 7/7] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13897ccd..0aec9987 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # Unreleased ## New features +- Add `bld_ef3__student__other_names` and conditional code in `dim_student` to pull into columns, if configured in dbt var `'edu:stu_demos:other_names'`. ## Under the hood ## Fixes