Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 98 additions & 1 deletion src/ol_dbt/models/dimensional/tfact_enrollment.sql
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,74 @@ with mitxonline_enrollments as (
from {{ ref('int__bootcamps__courserunenrollments') }}
)

-- Emeritus/Global Alumni don't own course run records; their enrollments map onto
-- existing MITxPro course runs via courserun_external_readable_id, mirroring the join
-- logic in int__combined__courserun_enrollments. This lookup resolves that external id
-- to the MITxPro-platform courserun_readable_id used elsewhere in dim_course_run.
, mitxpro_external_readable_id_lookup as (
select courserun_external_readable_id, courserun_readable_id
from {{ ref('int__mitxpro__course_runs') }}
where courserun_external_readable_id is not null
)

, emeritus_enrollments as (
select
-- Stable surrogate key: source has no native enrollment_id
{{ dbt_utils.generate_surrogate_key(['cast(emeritus_enrollments.user_id as varchar)', 'emeritus_enrollments.courserun_external_readable_id']) }}
as enrollment_id
, emeritus_enrollments.user_id
, null as courserun_id
, coalesce(
mitxpro_external_readable_id_lookup.courserun_readable_id
, emeritus_enrollments.courserun_external_readable_id
) as courserun_readable_id
, null as program_id
, emeritus_enrollments.enrollment_created_on
, emeritus_enrollments.enrollment_updated_on
, emeritus_enrollments.is_enrolled as enrollment_is_active
, cast(null as varchar) as enrollment_mode
, emeritus_enrollments.enrollment_status
, 'emeritus' as platform
, 'emeritus' as platform_code
, cast(null as boolean) as enrollment_is_edx_enrolled
from {{ ref('stg__emeritus__api__bigquery__user_enrollments') }} as emeritus_enrollments
left join mitxpro_external_readable_id_lookup
on emeritus_enrollments.courserun_external_readable_id
= mitxpro_external_readable_id_lookup.courserun_external_readable_id
)

, global_alumni_enrollments as (
select
-- Stable surrogate key: source has no native enrollment_id
{{ dbt_utils.generate_surrogate_key(['cast(global_alumni_enrollments.user_id as varchar)', 'global_alumni_enrollments.courserun_external_readable_id']) }}
as enrollment_id
, global_alumni_enrollments.user_id
, null as courserun_id
, coalesce(
mitxpro_external_readable_id_lookup.courserun_readable_id
, global_alumni_enrollments.courserun_external_readable_id
) as courserun_readable_id
, null as program_id
-- source has no enrollment_created_on/enrollment_updated_on. Unlike edxorg/residential
-- (which have enrollment_created_on and use the 7-day lookback path), the unconditional
-- `or ewf.enrollment_created_on is null` branch in incremental_watermarks means every
-- Global Alumni row is reprocessed on every incremental run (volume is low, so this is
-- an acceptable tradeoff for now; revisit if an ingestion timestamp becomes available
-- upstream).
, cast(null as varchar) as enrollment_created_on
, cast(null as varchar) as enrollment_updated_on
, global_alumni_enrollments.is_enrolled as enrollment_is_active
, cast(null as varchar) as enrollment_mode
, global_alumni_enrollments.enrollment_status
, 'global_alumni' as platform
, 'global_alumni' as platform_code
, cast(null as boolean) as enrollment_is_edx_enrolled
from {{ ref('stg__global_alumni__api__bigquery__user_enrollments') }} as global_alumni_enrollments
left join mitxpro_external_readable_id_lookup
on global_alumni_enrollments.courserun_external_readable_id
= mitxpro_external_readable_id_lookup.courserun_external_readable_id
)

, combined_enrollments as (
select * from mitxonline_enrollments
union all
Expand All @@ -169,6 +237,10 @@ with mitxonline_enrollments as (
select * from program_enrollments
union all
select * from bootcamps_enrollments
union all
select * from emeritus_enrollments
union all
select * from global_alumni_enrollments
)

-- Join to dimensions for FKs
Expand All @@ -183,6 +255,8 @@ with mitxonline_enrollments as (
, micromasters_user_id
, residential_openedx_user_id
, bootcamps_application_user_id
, emeritus_user_id
, global_alumni_user_id
from {{ ref('dim_user') }}
where user_pk is not null
)
Expand All @@ -193,6 +267,14 @@ with mitxonline_enrollments as (
where is_current = true
)

-- Emeritus/Global Alumni enrollments resolve their course run FK against MITxPro-platform
-- dim_course_run rows (see mitxpro_external_readable_id_lookup above).
, dim_course_run_mitxpro as (
select courserun_pk, courserun_readable_id
from {{ ref('dim_course_run') }}
where is_current = true and platform = 'mitxpro'
)
Comment thread
quazi-h marked this conversation as resolved.

, dim_program as (
select program_pk, source_id, platform_code
from {{ ref('dim_program') }}
Expand Down Expand Up @@ -235,9 +317,15 @@ with mitxonline_enrollments as (
end,
case when combined_enrollments.platform = 'bootcamps'
then ul_bootcamps.user_pk
end,
case when combined_enrollments.platform = 'emeritus'
then ul_emeritus.user_pk
end,
case when combined_enrollments.platform = 'global_alumni'
then ul_global_alumni.user_pk
end
) as user_fk
, dim_course_run.courserun_pk as courserun_fk
, coalesce(dim_course_run.courserun_pk, dim_course_run_mitxpro.courserun_pk) as courserun_fk
, coalesce(dim_program.program_pk, micromasters_program_lookup.micromasters_program_pk) as program_fk
, dim_platform_lookup.platform_pk as platform_fk
, {{ iso8601_to_date_key('enrollment_created_on') }} as enrollment_date_key
Expand All @@ -257,9 +345,18 @@ with mitxonline_enrollments as (
left join user_lookup as ul_bootcamps
on combined_enrollments.platform = 'bootcamps'
and combined_enrollments.user_id = ul_bootcamps.bootcamps_application_user_id
left join user_lookup as ul_emeritus
on combined_enrollments.platform = 'emeritus'
and combined_enrollments.user_id = ul_emeritus.emeritus_user_id
left join user_lookup as ul_global_alumni
on combined_enrollments.platform = 'global_alumni'
and combined_enrollments.user_id = ul_global_alumni.global_alumni_user_id
left join dim_course_run
on combined_enrollments.courserun_readable_id = dim_course_run.courserun_readable_id
and combined_enrollments.platform = dim_course_run.platform
left join dim_course_run_mitxpro
on combined_enrollments.platform in ('emeritus', 'global_alumni')
and combined_enrollments.courserun_readable_id = dim_course_run_mitxpro.courserun_readable_id
left join dim_program
on cast(combined_enrollments.program_id as varchar) = dim_program.source_id
and combined_enrollments.platform_code = dim_program.platform_code
Expand Down
Loading