Skip to content

Commit 20dc38c

Browse files
authored
Merge pull request code-dot-org#24875 from code-dot-org/rp_redshift_updates
Rp redshift updates
2 parents 7ab48e9 + 9b3b34e commit 20dc38c

File tree

2 files changed

+44
-48
lines changed

2 files changed

+44
-48
lines changed

aws/redshift/tables/csf_workshop_attendance.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ UNION ALL
140140
0 as not_attended
141141
FROM dashboard_production.followers f
142142
JOIN dashboard_production.sections se
143-
ON se.id = f.section_id AND se.section_type = 'csf_workshop'
143+
ON se.id = f.section_id
144144
JOIN analysis.training_school_years sy ON se.created_at BETWEEN sy.started_at AND sy.ended_at
145145
JOIN section_state_zip ssz
146146
ON ssz.id = se.id

aws/redshift/tables/regional_partner_stats_csf.sql

Lines changed: 43 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
-- PLAN for adding CSF data
2+
-- add data on the facilitator, district sponsorship, workshop size, day of week, time of year
3+
-- create separate csf_facilitator csf_workshops table to connect to this one?
4+
15
--CHANGES
26
-- addition of school years beyond 2017 -- includes teaching data from the same year they were trained and any subsequent years
37
-- removed 'location'
@@ -17,42 +21,6 @@ drop table if exists analysis_pii.regional_partner_stats_csf;
1721
create table analysis_pii.regional_partner_stats_csf AS
1822

1923
with
20-
csf_teachers_trained_temp as
21-
(
22-
select distinct
23-
user_id, -- multiple entries per person (if they attended multiple workshops)
24-
u.studio_p erson_id,
25-
'CS Fundamentals'::varchar as course,
26-
school_year as school_year,
27-
regional_partner as regional_partner,
28-
regional_partner_id as regional_partner_id,
29-
trained_at as trained_at, -- this is the 'min' date from the teachers trained at table (the first time they were trained)
30-
workshop_date as workshop_date -- this is the date of the workshop (and the source of multiple entries per person)
31-
from
32-
(
33-
SELECT
34-
ctt.user_id,
35-
ctt.trained_at,
36-
pds.start as workshop_date,
37-
regional_partner_id::int,
38-
rp.name::varchar as regional_partner
39-
FROM
40-
analysis.csf_teachers_trained ctt
41-
LEFT JOIN dashboard_production_pii.pd_enrollments pde
42-
ON pde.user_id = ctt.user_id
43-
LEFT JOIN dashboard_production_pii.pd_attendances pda
44-
ON pda.pd_enrollment_id = pde.id
45-
LEFT JOIN dashboard_production_pii.pd_workshops pdw
46-
ON pdw.id = pde.pd_workshop_id
47-
AND course = 'CS Fundamentals'
48-
LEFT JOIN dashboard_production_pii.pd_sessions pds
49-
ON pds.pd_workshop_id = pdw.id
50-
LEFT JOIN dashboard_production_pii.regional_partners rp
51-
ON pdw.regional_partner_id = rp.id
52-
) csf_train
53-
JOIN analysis.training_school_years sy on csf_train.trained_at between sy.started_at and sy.ended_at
54-
JOIN dashboard_production.users u on u.id = csf_train.user_id
55-
),
5624
completed as
5725
(
5826
select
@@ -71,6 +39,24 @@ select
7139
script_name
7240
from analysis.csf_started_teachers
7341
),
42+
implementation_365 as
43+
(select
44+
tt.user_id,
45+
date_part(month, trained_at) month_trained,
46+
date_part(dayofweek, trained_at) day_of_week,
47+
min(datediff(day, tt.trained_at, st.started_at)) as days_to_start,
48+
min(datediff(day, tt.trained_at, ct.completed_at)) as days_to_complete,
49+
CASE WHEN days_to_start < 0 then 1 else 0 end as started_before_training,
50+
CASE WHEN days_to_complete < 0 then 1 else 0 end as completed_before_training,
51+
CASE WHEN days_to_start <= 365 and started_before_training = 0 then 1 else 0 end as started_365,
52+
CASE WHEN days_to_complete <= 365 and completed_before_training = 0 then 1 else 0 end as completed_365,
53+
CASE WHEN days_to_start <= 365 then 1 else 0 end as started_365_or_before,
54+
CASE WHEN days_to_complete <= 365 then 1 else 0 end as completed_365_or_before
55+
from csf_teachers_trained tt
56+
left join csf_started_teachers st on st.user_id = tt.user_id
57+
left join csf_completed_teachers ct on ct.user_id = tt.user_id
58+
group by 1, 2, 3
59+
),
7460
pd_enrollments_with_year as
7561
(
7662
select pd_workshop_id, first_name, last_name, email, user_id, school_year
@@ -90,16 +76,25 @@ pd_facilitators as
9076
JOIN dashboard_production_pii.users u2
9177
ON pwf.user_id = u2.id
9278
group by 1
93-
9479
)
9580
SELECT distinct
9681
d.user_id,
97-
d.studio_person_id,
82+
u.studio_person_id,
9883
FIRST_VALUE(pde.first_name) OVER (PARTITION BY d.user_id ORDER BY (CASE WHEN pde.first_name IS NULL THEN 1 ELSE 2 END), pde.pd_workshop_id DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) as first_name,
9984
FIRST_VALUE(pde.last_name) OVER (PARTITION BY d.user_id ORDER BY (CASE WHEN pde.last_name IS NULL THEN 1 ELSE 2 END), pde.pd_workshop_id DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) as last_name,
10085
FIRST_VALUE(pde.email) OVER (PARTITION BY d.user_id ORDER BY (CASE WHEN pde.email IS NULL THEN 1 ELSE 2 END), pde.pd_workshop_id DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) as email,
101-
d.course,
102-
d.school_year as school_year_trained,
86+
'CS Fundamentals'::varchar as course,
87+
sy.school_year as school_year_trained,
88+
month_trained,
89+
day_of_week,
90+
days_to_start,
91+
days_to_complete,
92+
started_before_training,
93+
completed_before_training,
94+
started_365,
95+
completed_365,
96+
started_365_or_before,
97+
completed_365_or_before,
10398
s.school_year as school_year_taught,
10499
s.script_name,
105100
CASE WHEN rp.name is null THEN 'No Partner' ELSE rp.name END as regional_partner_name,
@@ -117,7 +112,7 @@ pd_facilitators as
117112
CASE WHEN csfa.subject is null THEN 'Intro Workshop' else csfa.subject END as subject,
118113
CASE WHEN csfa.trained_by_regional_partner is null then 0 else csfa.trained_by_regional_partner END as trained_by_regional_partner,
119114
d.trained_at as trained_at,
120-
coalesce(d.workshop_date, csfa.workshop_date, d.trained_at) as workshop_date,
115+
coalesce(csfa.workshop_date, d.trained_at) as workshop_date,
121116
extract(month from csfa.workshop_date)::varchar(16) || '/'::varchar(2) || extract(day from csfa.workshop_date)::varchar(16) || '/'::varchar(2) || extract(year from csfa.workshop_date)::varchar(16) || ', id:'::varchar(2) || csfa.workshop_id::varchar(16) as workshop_id_year,
122117
pwf.facilitator_names,
123118
-- started and completed
@@ -134,7 +129,8 @@ pd_facilitators as
134129
-- student gender
135130
sa.students_female as students_female_total,
136131
sa.students_gender as students_gender_total
137-
FROM csf_teachers_trained_temp d
132+
FROM csf_teachers_trained d
133+
JOIN training_school_years sy on d.trained_at between sy.started_at and sy.ended_at
138134
-- school info
139135
LEFT JOIN dashboard_production_pii.users u -- users needed to get school_info_id
140136
ON d.user_id = u.id
@@ -146,9 +142,7 @@ pd_facilitators as
146142
-- LEFT JOIN analysis.csf_workshop_attendance csfa -- functions mostly to get the regional partner's location info and to decide whether the person was 'trained_by_partner'
147143
LEFT JOIN analysis.csf_workshop_attendance csfa
148144
ON csfa.user_id = d.user_id
149-
AND csfa.course = d.course
150-
AND csfa.school_year = d.school_year
151-
-- AND trunc(csfa.workshop_date) = d.trained_at -- this must be the PROBLEM!! investigat it
145+
AND csfa.school_year = sy.school_year
152146
AND csfa.not_attended = 0
153147
--pii tables (regional partner names, person names, emails, locations)
154148
LEFT JOIN pd_facilitators pwf
@@ -157,15 +151,17 @@ pd_facilitators as
157151
ON csfa.regional_partner_id = rp.id
158152
LEFT JOIN pd_enrollments_with_year pde -- only join pde if they are are trained by regional partner
159153
ON pde.user_id = d.user_id
160-
AND pde.school_year = d.school_year
154+
AND pde.school_year = sy.school_year
161155
-- analysis tables
162156
LEFT JOIN started s
163157
ON s.user_id = d.user_id
164-
AND s.school_year >= d.school_year
158+
AND s.school_year >= sy.school_year
165159
LEFT JOIN completed c
166160
ON c.user_id = d.user_id
167161
AND c.script_name = s.script_name
168162
AND c.school_year = s.school_year
163+
LEFT JOIN implementation_365 i
164+
ON i.user_id = d.user_id
169165
LEFT JOIN analysis.teacher_most_progress_csf tmp
170166
ON tmp.user_id = d.user_id
171167
and tmp.script_name = s.script_name

0 commit comments

Comments
 (0)