feat(dbt): fact_ks4_la_averages from DfE's LA rows (H2)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
dbb60acff3
commit
59dd20ab00
7 files changed
+81
-2
No files matched your search
@@ -61,6 +61,11 @@ history from the full DataFrame and supplementary data from marts. Comparisons
|
|||||||
batch supplementary queries across selected URNs. Async routes still contain
|
batch supplementary queries across selected URNs. Async routes still contain
|
||||||
synchronous dependency calls; a fully asynchronous database layer is not present.
|
synchronous dependency calls; a fully asynchronous database layer is not present.
|
||||||
|
|
||||||
|
Benchmarks are DfE's own figures, read from marts: `fact_ks2_national_averages`
|
||||||
|
and `fact_ks4_national_averages` for England, and `fact_ks4_la_averages` (all
|
||||||
|
state-funded schools) for the search rows' "vs LA avg". The API never averages
|
||||||
|
school rows to make a benchmark.
|
||||||
|
|
||||||
## Frontend boundaries
|
## Frontend boundaries
|
||||||
|
|
||||||
`app/(frontend)` owns the public root layout and pages. `app/(payload)` owns the
|
`app/(frontend)` owns the public root layout and pages. `app/(payload)` owns the
|
||||||
|
|||||||
@@ -193,7 +193,7 @@ with DAG(
|
|||||||
|
|
||||||
dbt_build_ees = BashOperator(
|
dbt_build_ees = BashOperator(
|
||||||
task_id="dbt_build",
|
task_id="dbt_build",
|
||||||
bash_command=f"cd {PIPELINE_DIR}/transform && {DBT_BIN} build --profiles-dir . --target production --select stg_ees_ks2+ stg_legacy_ks2+ stg_ees_ks4+ stg_legacy_ks4+ stg_ees_census+ stg_ees_admissions+ stg_ees_ks2_national+ stg_ees_ks4_national+ stg_ees_ks4_destinations+ stg_ees_ks5_destinations+ stg_ees_ks4_destinations_national+ stg_ees_ks5_destinations_national+",
|
bash_command=f"cd {PIPELINE_DIR}/transform && {DBT_BIN} build --profiles-dir . --target production --select stg_ees_ks2+ stg_legacy_ks2+ stg_ees_ks4+ stg_legacy_ks4+ stg_ees_census+ stg_ees_admissions+ stg_ees_ks2_national+ stg_ees_ks4_national+ stg_ees_ks4_la+ stg_ees_ks4_destinations+ stg_ees_ks5_destinations+ stg_ees_ks4_destinations_national+ stg_ees_ks5_destinations_national+",
|
||||||
)
|
)
|
||||||
|
|
||||||
sync_typesense_ees = BashOperator(
|
sync_typesense_ees = BashOperator(
|
||||||
|
|||||||
@@ -279,11 +279,24 @@ models:
|
|||||||
tests: [not_null, unique]
|
tests: [not_null, unique]
|
||||||
|
|
||||||
- name: fact_ks4_national_averages
|
- name: fact_ks4_national_averages
|
||||||
description: Computed national KS4 averages (means across state schools in our dataset — not official DfE figures) — one row per academic year
|
description: Official DfE KS4 national headline averages (England, all state-funded schools, all pupils) — one row per academic year
|
||||||
columns:
|
columns:
|
||||||
- name: year
|
- name: year
|
||||||
tests: [not_null, unique]
|
tests: [not_null, unique]
|
||||||
|
|
||||||
|
- name: fact_ks4_la_averages
|
||||||
|
description: Official DfE KS4 local-authority averages (all state-funded schools, all pupils) — one row per academic year and LA; la_code is the GIAS LA code
|
||||||
|
columns:
|
||||||
|
- name: year
|
||||||
|
tests: [not_null]
|
||||||
|
- name: la_code
|
||||||
|
tests: [not_null]
|
||||||
|
- name: la_name
|
||||||
|
tests: [not_null]
|
||||||
|
tests:
|
||||||
|
- unique:
|
||||||
|
column_name: "year || '-' || la_code"
|
||||||
|
|
||||||
- name: fact_deprivation
|
- name: fact_deprivation
|
||||||
description: IDACI deprivation index — one row per URN
|
description: IDACI deprivation index — one row per URN
|
||||||
columns:
|
columns:
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{{ config(materialized='table') }}
|
||||||
|
|
||||||
|
-- Mart: OFFICIAL DfE KS4 local-authority averages — one row per academic year
|
||||||
|
-- and LA (all state-funded schools, all pupils), from the same EES data set
|
||||||
|
-- as fact_ks4_national_averages. Feeds "vs LA avg" on search rows and map
|
||||||
|
-- cards, replacing a mean the API took over every school in the LA,
|
||||||
|
-- independent and special included (audit H2). la_code is the GIAS LA code.
|
||||||
|
|
||||||
|
select
|
||||||
|
year,
|
||||||
|
la_code,
|
||||||
|
la_name,
|
||||||
|
attainment_8_score,
|
||||||
|
progress_8_score,
|
||||||
|
english_maths_standard_pass_pct,
|
||||||
|
english_maths_strong_pass_pct,
|
||||||
|
ebacc_entry_pct,
|
||||||
|
ebacc_standard_pass_pct,
|
||||||
|
ebacc_strong_pass_pct,
|
||||||
|
ebacc_avg_score
|
||||||
|
from {{ ref('stg_ees_ks4_la') }}
|
||||||
|
order by year, la_code
|
||||||
@@ -79,6 +79,9 @@ sources:
|
|||||||
- name: ees_ks4_national
|
- name: ees_ks4_national
|
||||||
description: Official KS4 national headline averages from DfE EES data catalogue — one row per academic year
|
description: Official KS4 national headline averages from DfE EES data catalogue — one row per academic year
|
||||||
|
|
||||||
|
- name: ees_ks4_la
|
||||||
|
description: Official KS4 local-authority averages (all state-funded schools) from the same DfE EES data set as ees_ks4_national — one row per academic year and LA
|
||||||
|
|
||||||
# Phonics: no school-level data on EES (only national/LA level)
|
# Phonics: no school-level data on EES (only national/LA level)
|
||||||
|
|
||||||
- name: fbit_finance
|
- name: fbit_finance
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
-- Staging model: official DfE KS4 local-authority averages — one row per
|
||||||
|
-- academic year and LA (all state-funded schools, all pupils). Same EES data
|
||||||
|
-- set as stg_ees_ks4_national. la_code is the GIAS LA code
|
||||||
|
-- (dim_location.local_authority_code). Suppressed values ('z', 'x') are
|
||||||
|
-- coerced to NULL by safe_numeric.
|
||||||
|
|
||||||
|
select
|
||||||
|
cast(trim(time_period) as integer) as year,
|
||||||
|
cast(trim(old_la_code) as integer) as la_code,
|
||||||
|
trim(la_name) as la_name,
|
||||||
|
{{ safe_numeric('attainment_8_score') }} as attainment_8_score,
|
||||||
|
{{ safe_numeric('progress_8_score') }} as progress_8_score,
|
||||||
|
{{ safe_numeric('english_maths_standard_pass_pct') }} as english_maths_standard_pass_pct,
|
||||||
|
{{ safe_numeric('english_maths_strong_pass_pct') }} as english_maths_strong_pass_pct,
|
||||||
|
{{ safe_numeric('ebacc_entry_pct') }} as ebacc_entry_pct,
|
||||||
|
{{ safe_numeric('ebacc_standard_pass_pct') }} as ebacc_standard_pass_pct,
|
||||||
|
{{ safe_numeric('ebacc_strong_pass_pct') }} as ebacc_strong_pass_pct,
|
||||||
|
{{ safe_numeric('ebacc_avg_score') }} as ebacc_avg_score
|
||||||
|
from {{ source('raw', 'ees_ks4_la') }}
|
||||||
|
where time_period ~ '^[0-9]+$'
|
||||||
|
and old_la_code ~ '^[0-9]+$'
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
version: 2
|
||||||
|
|
||||||
|
unit_tests:
|
||||||
|
- name: stg_ees_ks4_la_casts_codes_years_and_measures
|
||||||
|
description: DfE's LA rows, keyed by the GIAS LA code. Suppressed values ('z') become null.
|
||||||
|
model: stg_ees_ks4_la
|
||||||
|
given:
|
||||||
|
- input: source('raw', 'ees_ks4_la')
|
||||||
|
rows:
|
||||||
|
- {time_period: '202425', old_la_code: '207', new_la_code: 'E09000020', la_name: 'Kensington and Chelsea', attainment_8_score: '54.5', progress_8_score: 'z', english_maths_standard_pass_pct: '77'}
|
||||||
|
- {time_period: '202324', old_la_code: '207', new_la_code: 'E09000020', la_name: 'Kensington and Chelsea', attainment_8_score: '54.5', progress_8_score: '0.29', english_maths_standard_pass_pct: '76'}
|
||||||
|
expect:
|
||||||
|
rows:
|
||||||
|
- {year: 202425, la_code: 207, la_name: 'Kensington and Chelsea', attainment_8_score: 54.5, progress_8_score: null, english_maths_standard_pass_pct: 77}
|
||||||
|
- {year: 202324, la_code: 207, la_name: 'Kensington and Chelsea', attainment_8_score: 54.5, progress_8_score: 0.29, english_maths_standard_pass_pct: 76}
|
||||||
Reference in new issue
Block a user