diff --git a/tutoraspects/plugin.py b/tutoraspects/plugin.py
index d3668f492..c435a1fb4 100644
--- a/tutoraspects/plugin.py
+++ b/tutoraspects/plugin.py
@@ -129,6 +129,12 @@
"uuid": "abae8a25-1ba4-4653-81bd-d3937a162a11",
"allow_translations": True,
},
+ {
+ "name": "Course Comparison Dashboard",
+ "slug": "course-comparison",
+ "uuid": "c6c7062d-dd90-4292-b9cf-84f7b9f38e73",
+ "allow_translations": True,
+ },
],
),
# The following settings are used to configure the Superset dashboards
@@ -140,6 +146,7 @@
"course-dashboard": "c0e64194-33d1-4d5a-8c10-4f51530c5ee9",
"learner-groups": "8661d20c-cee6-4245-9fcc-610daea5fd24",
"individual-learner": "abae8a25-1ba4-4653-81bd-d3937a162a11",
+ "course-comparison": "c6c7062d-dd90-4292-b9cf-84f7b9f38e73",
},
),
# ClickHouse xAPI settings
@@ -376,7 +383,7 @@
# For now we are pulling this from github, which should allow maximum
# flexibility for forking, running branches, specific versions, etc.
("DBT_REPOSITORY", "https://github.com/openedx/aspects-dbt"),
- ("DBT_BRANCH", "v3.31.0"),
+ ("DBT_BRANCH", "v3.33.0"),
("DBT_SSH_KEY", ""),
("DBT_STATE_DIR", "/app/aspects-dbt/state"),
("DBT_PROFILES_DIR", "/app/aspects/dbt/"),
diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_a433e3.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_a433e3.yaml
new file mode 100644
index 000000000..aa934e024
--- /dev/null
+++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_a433e3.yaml
@@ -0,0 +1,133 @@
+_file_name: Course_Info_a433e3.yaml
+cache_timeout: null
+certification_details: null
+certified_by: null
+dataset_uuid: 27a4476b-5a9a-4fc4-ac75-da520b522341
+description: null
+params:
+ adhoc_filters:
+ - clause: WHERE
+ comparator: No filter
+ expressionType: SIMPLE
+ operator: TEMPORAL_RANGE
+ subject: emission_time
+ all_columns: []
+ annotation_layers: []
+ color_pn: false
+ column_config:
+ active_count:
+ columnWidth: 200
+ course_name:
+ columnWidth: 300
+ enrollees:
+ columnWidth: 150
+ org:
+ columnWidth: 200
+ tag_list:
+ truncateLongCells: true
+ conditional_formatting: []
+ extra_form_data: {}
+ groupby:
+ - course_name
+ - org
+ metrics:
+ - enrollees
+ - active_count
+ - tag_list
+ order_by_cols: []
+ order_desc: false
+ percent_metrics: []
+ query_mode: aggregate
+ row_limit: 50000
+ server_page_length: 10
+ show_cell_bars: false
+ table_timestamp_format: smart_date
+ temporal_columns_lookup: {}
+ time_grain_sqla: P1M
+ viz_type: table
+query_context:
+ datasource:
+ id: 645
+ type: table
+ force: false
+ form_data:
+ adhoc_filters:
+ - clause: WHERE
+ comparator: No filter
+ expressionType: SIMPLE
+ operator: TEMPORAL_RANGE
+ subject: emission_time
+ all_columns: []
+ color_pn: false
+ column_config:
+ active_count:
+ columnWidth: 200
+ course_name:
+ columnWidth: 300
+ enrollees:
+ columnWidth: 150
+ org:
+ columnWidth: 200
+ tag_list:
+ truncateLongCells: true
+ conditional_formatting: []
+ dashboards:
+ - 161
+ datasource: 645__table
+ extra_form_data: {}
+ force: false
+ groupby:
+ - course_name
+ - org
+ metrics:
+ - enrollees
+ - active_count
+ - tag_list
+ order_by_cols: []
+ order_desc: false
+ percent_metrics: []
+ query_mode: aggregate
+ result_format: json
+ result_type: full
+ row_limit: 50000
+ server_page_length: 10
+ show_cell_bars: false
+ slice_id: 1273
+ table_timestamp_format: smart_date
+ temporal_columns_lookup: {}
+ time_grain_sqla: P1M
+ viz_type: table
+ queries:
+ - annotation_layers: []
+ applied_time_extras: {}
+ columns:
+ - course_name
+ - org
+ custom_form_data: {}
+ custom_params: {}
+ extras:
+ having: ''
+ time_grain_sqla: P1M
+ where: ''
+ filters:
+ - col: emission_time
+ op: TEMPORAL_RANGE
+ val: No filter
+ metrics:
+ - enrollees
+ - active_count
+ - tag_list
+ order_desc: false
+ orderby:
+ - - enrollees
+ - false
+ post_processing: []
+ row_limit: 50000
+ series_limit: 0
+ url_params: {}
+ result_format: json
+ result_type: full
+slice_name: Course Info
+uuid: a433e3cc-8ed5-454a-8b17-5dd75cfc84e4
+version: 1.0.0
+viz_type: table
diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_e0098c.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_e0098c.yaml
new file mode 100644
index 000000000..19d329f2a
--- /dev/null
+++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_e0098c.yaml
@@ -0,0 +1,133 @@
+_file_name: Course_Info_e0098c.yaml
+cache_timeout: null
+certification_details: null
+certified_by: null
+dataset_uuid: 27a4476b-5a9a-4fc4-ac75-da520b522341
+description: null
+params:
+ adhoc_filters:
+ - clause: WHERE
+ comparator: No filter
+ expressionType: SIMPLE
+ operator: TEMPORAL_RANGE
+ subject: emission_time
+ all_columns: []
+ annotation_layers: []
+ color_pn: false
+ column_config:
+ Current Enrollees:
+ columnWidth: 150
+ active_count:
+ columnWidth: 200
+ course_name:
+ columnWidth: 200
+ course_run:
+ columnWidth: 300
+ tag_list:
+ truncateLongCells: true
+ conditional_formatting: []
+ extra_form_data: {}
+ groupby:
+ - course_run
+ - course_name
+ metrics:
+ - active_count
+ - tag_list
+ - enrollees
+ order_by_cols: []
+ order_desc: false
+ percent_metrics: []
+ query_mode: aggregate
+ row_limit: 50000
+ server_page_length: 10
+ show_cell_bars: false
+ table_timestamp_format: smart_date
+ temporal_columns_lookup: {}
+ time_grain_sqla: P1M
+ viz_type: table
+query_context:
+ datasource:
+ id: 645
+ type: table
+ force: false
+ form_data:
+ adhoc_filters:
+ - clause: WHERE
+ comparator: No filter
+ expressionType: SIMPLE
+ operator: TEMPORAL_RANGE
+ subject: emission_time
+ all_columns: []
+ color_pn: false
+ column_config:
+ Current Enrollees:
+ columnWidth: 150
+ active_count:
+ columnWidth: 200
+ course_name:
+ columnWidth: 200
+ course_run:
+ columnWidth: 300
+ tag_list:
+ truncateLongCells: true
+ conditional_formatting: []
+ dashboards:
+ - 161
+ datasource: 645__table
+ extra_form_data: {}
+ force: false
+ groupby:
+ - course_run
+ - course_name
+ metrics:
+ - active_count
+ - tag_list
+ - enrollees
+ order_by_cols: []
+ order_desc: false
+ percent_metrics: []
+ query_mode: aggregate
+ result_format: json
+ result_type: full
+ row_limit: 50000
+ server_page_length: 10
+ show_cell_bars: false
+ slice_id: 1274
+ table_timestamp_format: smart_date
+ temporal_columns_lookup: {}
+ time_grain_sqla: P1M
+ viz_type: table
+ queries:
+ - annotation_layers: []
+ applied_time_extras: {}
+ columns:
+ - course_run
+ - course_name
+ custom_form_data: {}
+ custom_params: {}
+ extras:
+ having: ''
+ time_grain_sqla: P1M
+ where: ''
+ filters:
+ - col: emission_time
+ op: TEMPORAL_RANGE
+ val: No filter
+ metrics:
+ - active_count
+ - tag_list
+ - enrollees
+ order_desc: false
+ orderby:
+ - - active_count
+ - false
+ post_processing: []
+ row_limit: 50000
+ series_limit: 0
+ url_params: {}
+ result_format: json
+ result_type: full
+slice_name: Course Info
+uuid: e0098cfe-a312-4c49-8efd-7e74256b6ea4
+version: 1.0.0
+viz_type: table
diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_2f2af8.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_2f2af8.yaml
new file mode 100644
index 000000000..115e7abdf
--- /dev/null
+++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_2f2af8.yaml
@@ -0,0 +1,104 @@
+_file_name: Enrollment_Counts_2f2af8.yaml
+cache_timeout: null
+certification_details: null
+certified_by: null
+dataset_uuid: 27a4476b-5a9a-4fc4-ac75-da520b522341
+description: null
+params:
+ adhoc_filters:
+ - clause: WHERE
+ comparator: No filter
+ expressionType: SIMPLE
+ operator: TEMPORAL_RANGE
+ subject: emission_time
+ aggregateFunction: Sum
+ annotation_layers: []
+ colOrder: key_a_to_z
+ colSubTotals: false
+ conditional_formatting: []
+ date_format: smart_date
+ extra_form_data: {}
+ groupbyColumns:
+ - enrollment_mode
+ groupbyRows:
+ - course_name
+ metrics:
+ - enrollees
+ metricsLayout: COLUMNS
+ order_desc: true
+ rowOrder: key_a_to_z
+ row_limit: 10000
+ temporal_columns_lookup: {}
+ time_grain_sqla: P1D
+ valueFormat: SMART_NUMBER
+ viz_type: pivot_table_v2
+query_context:
+ datasource:
+ id: 645
+ type: table
+ force: false
+ form_data:
+ adhoc_filters:
+ - clause: WHERE
+ comparator: No filter
+ expressionType: SIMPLE
+ operator: TEMPORAL_RANGE
+ subject: emission_time
+ aggregateFunction: Sum
+ colOrder: key_a_to_z
+ colSubTotals: false
+ conditional_formatting: []
+ dashboards:
+ - 161
+ datasource: 645__table
+ date_format: smart_date
+ extra_form_data: {}
+ force: false
+ groupbyColumns:
+ - enrollment_mode
+ groupbyRows:
+ - course_name
+ metrics:
+ - enrollees
+ metricsLayout: COLUMNS
+ order_desc: true
+ result_format: json
+ result_type: full
+ rowOrder: key_a_to_z
+ row_limit: 10000
+ slice_id: 1294
+ temporal_columns_lookup: {}
+ time_grain_sqla: P1D
+ valueFormat: SMART_NUMBER
+ viz_type: pivot_table_v2
+ queries:
+ - annotation_layers: []
+ applied_time_extras: {}
+ columns:
+ - enrollment_mode
+ - course_name
+ custom_form_data: {}
+ custom_params: {}
+ extras:
+ having: ''
+ time_grain_sqla: P1D
+ where: ''
+ filters:
+ - col: emission_time
+ op: TEMPORAL_RANGE
+ val: No filter
+ metrics:
+ - enrollees
+ order_desc: true
+ orderby:
+ - - enrollees
+ - false
+ row_limit: 10000
+ series_limit: 0
+ url_params: {}
+ result_format: json
+ result_type: full
+slice_name: Enrollment Counts
+uuid: 2f2af8b0-94ae-4300-b71f-3bd7f9fc127c
+version: 1.0.0
+viz_type: pivot_table_v2
diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_bd37be.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_bd37be.yaml
new file mode 100644
index 000000000..093153981
--- /dev/null
+++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_bd37be.yaml
@@ -0,0 +1,104 @@
+_file_name: Enrollment_Counts_bd37be.yaml
+cache_timeout: null
+certification_details: null
+certified_by: null
+dataset_uuid: 27a4476b-5a9a-4fc4-ac75-da520b522341
+description: null
+params:
+ adhoc_filters:
+ - clause: WHERE
+ comparator: No filter
+ expressionType: SIMPLE
+ operator: TEMPORAL_RANGE
+ subject: emission_time
+ aggregateFunction: Sum
+ annotation_layers: []
+ colOrder: key_a_to_z
+ colSubTotals: false
+ conditional_formatting: []
+ date_format: smart_date
+ extra_form_data: {}
+ groupbyColumns:
+ - enrollment_mode
+ groupbyRows:
+ - course_run
+ metrics:
+ - enrollees
+ metricsLayout: COLUMNS
+ order_desc: false
+ rowOrder: key_a_to_z
+ row_limit: 50000
+ temporal_columns_lookup: {}
+ time_grain_sqla: P1D
+ valueFormat: SMART_NUMBER
+ viz_type: pivot_table_v2
+query_context:
+ datasource:
+ id: 645
+ type: table
+ force: false
+ form_data:
+ adhoc_filters:
+ - clause: WHERE
+ comparator: No filter
+ expressionType: SIMPLE
+ operator: TEMPORAL_RANGE
+ subject: emission_time
+ aggregateFunction: Sum
+ colOrder: key_a_to_z
+ colSubTotals: false
+ conditional_formatting: []
+ dashboards:
+ - 161
+ datasource: 645__table
+ date_format: smart_date
+ extra_form_data: {}
+ force: false
+ groupbyColumns:
+ - enrollment_mode
+ groupbyRows:
+ - course_run
+ metrics:
+ - enrollees
+ metricsLayout: COLUMNS
+ order_desc: false
+ result_format: json
+ result_type: full
+ rowOrder: key_a_to_z
+ row_limit: 50000
+ slice_id: 1295
+ temporal_columns_lookup: {}
+ time_grain_sqla: P1D
+ valueFormat: SMART_NUMBER
+ viz_type: pivot_table_v2
+ queries:
+ - annotation_layers: []
+ applied_time_extras: {}
+ columns:
+ - enrollment_mode
+ - course_run
+ custom_form_data: {}
+ custom_params: {}
+ extras:
+ having: ''
+ time_grain_sqla: P1D
+ where: ''
+ filters:
+ - col: emission_time
+ op: TEMPORAL_RANGE
+ val: No filter
+ metrics:
+ - enrollees
+ order_desc: false
+ orderby:
+ - - enrollees
+ - true
+ row_limit: 50000
+ series_limit: 0
+ url_params: {}
+ result_format: json
+ result_type: full
+slice_name: Enrollment Counts
+uuid: bd37be7f-6672-4dca-80ae-a54f69d169da
+version: 1.0.0
+viz_type: pivot_table_v2
diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_4e48b8.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_4e48b8.yaml
new file mode 100644
index 000000000..3516c157f
--- /dev/null
+++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_4e48b8.yaml
@@ -0,0 +1,123 @@
+_file_name: Learner_Performance_4e48b8.yaml
+cache_timeout: null
+certification_details: null
+certified_by: null
+dataset_uuid: ffc33796-bcd4-4e8b-a4e4-ab6517b72116
+description: |-
+
+ - Avg % Correct on 1st Attempt
+ - The average percentage of correct answers on the first attempt
+
+params:
+ adhoc_filters: []
+ all_columns:
+ - success
+ annotation_layers: []
+ color_pn: true
+ column_config:
+ avg_course_grade:
+ d3NumberFormat: ',.1%'
+ first_try_correct:
+ d3NumberFormat: ',.1%'
+ showCellBars: false
+ med_course_grade:
+ d3NumberFormat: ',.1%'
+ conditional_formatting: []
+ extra_form_data: {}
+ groupby:
+ - course_name
+ - org
+ metrics:
+ - first_try_correct
+ - count_passing
+ - avg_course_grade
+ - med_course_grade
+ order_by_cols: []
+ order_desc: true
+ percent_metrics: []
+ query_mode: aggregate
+ row_limit: 50000
+ server_page_length: 10
+ show_cell_bars: false
+ table_timestamp_format: smart_date
+ temporal_columns_lookup: {}
+ time_grain_sqla: P1M
+ viz_type: table
+query_context:
+ datasource:
+ id: 648
+ type: table
+ force: false
+ form_data:
+ adhoc_filters: []
+ all_columns:
+ - success
+ color_pn: true
+ column_config:
+ avg_course_grade:
+ d3NumberFormat: ',.1%'
+ first_try_correct:
+ d3NumberFormat: ',.1%'
+ showCellBars: false
+ med_course_grade:
+ d3NumberFormat: ',.1%'
+ conditional_formatting: []
+ dashboards:
+ - 161
+ datasource: 648__table
+ extra_form_data: {}
+ force: false
+ groupby:
+ - course_name
+ - org
+ metrics:
+ - first_try_correct
+ - count_passing
+ - avg_course_grade
+ - med_course_grade
+ order_by_cols: []
+ order_desc: true
+ percent_metrics: []
+ query_mode: aggregate
+ result_format: json
+ result_type: full
+ row_limit: 50000
+ server_page_length: 10
+ show_cell_bars: false
+ slice_id: 1279
+ table_timestamp_format: smart_date
+ temporal_columns_lookup: {}
+ time_grain_sqla: P1M
+ viz_type: table
+ queries:
+ - annotation_layers: []
+ applied_time_extras: {}
+ columns:
+ - course_name
+ - org
+ custom_form_data: {}
+ custom_params: {}
+ extras:
+ having: ''
+ time_grain_sqla: P1M
+ where: ''
+ filters: []
+ metrics:
+ - first_try_correct
+ - count_passing
+ - avg_course_grade
+ - med_course_grade
+ order_desc: true
+ orderby:
+ - - first_try_correct
+ - false
+ post_processing: []
+ row_limit: 50000
+ series_limit: 0
+ url_params: {}
+ result_format: json
+ result_type: full
+slice_name: Learner Performance
+uuid: 4e48b8f9-e757-4263-a9d7-d18018620a24
+version: 1.0.0
+viz_type: table
diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_Breakdown_4250c9.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_Breakdown_4250c9.yaml
new file mode 100644
index 000000000..a210e3399
--- /dev/null
+++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_Breakdown_4250c9.yaml
@@ -0,0 +1,192 @@
+_file_name: Learner_Performance_Breakdown_4250c9.yaml
+cache_timeout: null
+certification_details: null
+certified_by: null
+dataset_uuid: 1970f934-cffb-4c5a-8a13-69dab22755c7
+description: |-
+ Displays the top 10 highest enrollment courses.
+ Selecting different courses in the filter will display those courses.
+params:
+ adhoc_filters:
+ - clause: WHERE
+ comparator: No filter
+ expressionType: SIMPLE
+ operator: TEMPORAL_RANGE
+ subject: enrolled_at
+ annotation_layers: []
+ color_scheme: supersetColors
+ comparison_type: values
+ contributionMode: null
+ extra_form_data: {}
+ forecastInterval: 0.8
+ forecastPeriods: 10
+ groupby: []
+ legendMargin: null
+ legendOrientation: bottom
+ legendType: scroll
+ logAxis: false
+ metrics:
+ - count
+ - passed
+ - active
+ - at_risk
+ minorSplitLine: false
+ minorTicks: false
+ only_total: true
+ order_desc: true
+ orientation: horizontal
+ rich_tooltip: false
+ row_limit: 10
+ show_empty_columns: false
+ show_legend: true
+ show_value: false
+ sort_series_ascending: true
+ sort_series_type: name
+ stack: null
+ tooltipSortByMetric: false
+ tooltipTimeFormat: smart_date
+ truncateXAxis: false
+ truncateYAxis: false
+ truncate_metric: false
+ viz_type: echarts_timeseries_bar
+ xAxisLabelRotation: 0
+ x_axis: course_name
+ x_axis_sort_asc: true
+ x_axis_sort_series: sum
+ x_axis_sort_series_ascending: false
+ x_axis_time_format: smart_date
+ x_axis_title: ''
+ x_axis_title_margin: 15
+ y_axis_bounds:
+ - null
+ - null
+ y_axis_format: SMART_NUMBER
+ y_axis_title: ''
+ y_axis_title_margin: 15
+ y_axis_title_position: Left
+ zoomable: false
+query_context:
+ datasource:
+ id: 646
+ type: table
+ force: false
+ form_data:
+ adhoc_filters:
+ - clause: WHERE
+ comparator: No filter
+ expressionType: SIMPLE
+ operator: TEMPORAL_RANGE
+ subject: enrolled_at
+ annotation_layers: []
+ color_scheme: supersetColors
+ comparison_type: values
+ contributionMode: null
+ dashboards:
+ - 161
+ datasource: 646__table
+ extra_form_data: {}
+ force: false
+ forecastInterval: 0.8
+ forecastPeriods: 10
+ groupby: []
+ legendMargin: null
+ legendOrientation: bottom
+ legendType: scroll
+ logAxis: false
+ metrics:
+ - count
+ - passed
+ - active
+ - at_risk
+ minorSplitLine: false
+ minorTicks: false
+ only_total: true
+ order_desc: true
+ orientation: horizontal
+ result_format: json
+ result_type: full
+ rich_tooltip: false
+ row_limit: 10
+ show_empty_columns: false
+ show_legend: true
+ show_value: false
+ slice_id: 1275
+ sort_series_ascending: true
+ sort_series_type: name
+ stack: null
+ tooltipSortByMetric: false
+ tooltipTimeFormat: smart_date
+ truncateXAxis: false
+ truncateYAxis: false
+ truncate_metric: false
+ viz_type: echarts_timeseries_bar
+ xAxisLabelRotation: 0
+ x_axis: course_name
+ x_axis_sort_asc: true
+ x_axis_sort_series: sum
+ x_axis_sort_series_ascending: false
+ x_axis_time_format: smart_date
+ x_axis_title: ''
+ x_axis_title_margin: 15
+ y_axis_bounds:
+ - null
+ - null
+ y_axis_format: SMART_NUMBER
+ y_axis_title: ''
+ y_axis_title_margin: 15
+ y_axis_title_position: Left
+ zoomable: false
+ queries:
+ - annotation_layers: []
+ applied_time_extras: {}
+ columns:
+ - columnType: BASE_AXIS
+ expressionType: SQL
+ label: course_name
+ sqlExpression: course_name
+ custom_form_data: {}
+ custom_params: {}
+ extras:
+ having: ''
+ where: ''
+ filters:
+ - col: enrolled_at
+ op: TEMPORAL_RANGE
+ val: No filter
+ metrics:
+ - count
+ - passed
+ - active
+ - at_risk
+ order_desc: true
+ orderby:
+ - - count
+ - false
+ post_processing:
+ - operation: pivot
+ options:
+ aggregates:
+ active:
+ operator: mean
+ at_risk:
+ operator: mean
+ count:
+ operator: mean
+ passed:
+ operator: mean
+ columns: []
+ drop_missing_columns: true
+ index:
+ - course_name
+ - operation: flatten
+ row_limit: 10
+ series_columns: []
+ series_limit: 0
+ time_offsets: []
+ url_params: {}
+ result_format: json
+ result_type: full
+slice_name: Learner Performance Breakdown
+uuid: 4250c976-a9b7-43ff-b5ad-8dd00a5acef7
+version: 1.0.0
+viz_type: echarts_timeseries_bar
diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_Breakdown_9c3f72.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_Breakdown_9c3f72.yaml
new file mode 100644
index 000000000..53b346008
--- /dev/null
+++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_Breakdown_9c3f72.yaml
@@ -0,0 +1,203 @@
+_file_name: Learner_Performance_Breakdown_9c3f72.yaml
+cache_timeout: null
+certification_details: null
+certified_by: null
+dataset_uuid: 1970f934-cffb-4c5a-8a13-69dab22755c7
+description: Displays the top 10 highest enrollment courses. Selecting different courses
+ in the filter will display those courses.
+params:
+ adhoc_filters:
+ - clause: WHERE
+ comparator: No filter
+ datasourceWarning: false
+ expressionType: SIMPLE
+ filterOptionName: filter_noj2mkjbumn_edkgbebkld8
+ isExtra: false
+ isNew: false
+ operator: TEMPORAL_RANGE
+ sqlExpression: null
+ subject: enrolled_at
+ annotation_layers: []
+ color_scheme: supersetColors
+ comparison_type: values
+ contributionMode: null
+ extra_form_data: {}
+ forecastInterval: 0.8
+ forecastPeriods: 10
+ groupby: []
+ legendMargin: 0
+ legendOrientation: bottom
+ legendType: scroll
+ logAxis: false
+ metrics:
+ - passed
+ - count
+ - at_risk
+ - active
+ minorSplitLine: false
+ minorTicks: false
+ only_total: true
+ order_desc: true
+ orientation: horizontal
+ rich_tooltip: false
+ row_limit: 10
+ show_empty_columns: false
+ show_legend: true
+ show_value: false
+ sort_series_ascending: true
+ sort_series_type: name
+ stack: null
+ timeseries_limit_metric: null
+ tooltipSortByMetric: false
+ tooltipTimeFormat: smart_date
+ truncateXAxis: false
+ truncateYAxis: false
+ truncate_metric: true
+ viz_type: echarts_timeseries_bar
+ xAxisLabelRotation: 0
+ x_axis: course_run
+ x_axis_sort_asc: true
+ x_axis_sort_series: name
+ x_axis_sort_series_ascending: true
+ x_axis_time_format: smart_date
+ x_axis_title: ''
+ x_axis_title_margin: 15
+ y_axis_bounds:
+ - null
+ - null
+ y_axis_format: SMART_NUMBER
+ y_axis_title: ''
+ y_axis_title_margin: 15
+ y_axis_title_position: Left
+ zoomable: false
+query_context:
+ datasource:
+ id: 646
+ type: table
+ force: false
+ form_data:
+ adhoc_filters:
+ - clause: WHERE
+ comparator: No filter
+ datasourceWarning: false
+ expressionType: SIMPLE
+ filterOptionName: filter_noj2mkjbumn_edkgbebkld8
+ isExtra: false
+ isNew: false
+ operator: TEMPORAL_RANGE
+ sqlExpression: null
+ subject: enrolled_at
+ annotation_layers: []
+ color_scheme: supersetColors
+ comparison_type: values
+ contributionMode: null
+ dashboards:
+ - 161
+ datasource: 646__table
+ extra_form_data: {}
+ force: false
+ forecastInterval: 0.8
+ forecastPeriods: 10
+ groupby: []
+ legendMargin: 0
+ legendOrientation: bottom
+ legendType: scroll
+ logAxis: false
+ metrics:
+ - passed
+ - count
+ - at_risk
+ - active
+ minorSplitLine: false
+ minorTicks: false
+ only_total: true
+ order_desc: true
+ orientation: horizontal
+ result_format: json
+ result_type: full
+ rich_tooltip: false
+ row_limit: 10
+ show_empty_columns: false
+ show_legend: true
+ show_value: false
+ slice_id: 1276
+ sort_series_ascending: true
+ sort_series_type: name
+ stack: null
+ timeseries_limit_metric: null
+ tooltipSortByMetric: false
+ tooltipTimeFormat: smart_date
+ truncateXAxis: false
+ truncateYAxis: false
+ truncate_metric: true
+ viz_type: echarts_timeseries_bar
+ xAxisLabelRotation: 0
+ x_axis: course_run
+ x_axis_sort_asc: true
+ x_axis_sort_series: name
+ x_axis_sort_series_ascending: true
+ x_axis_time_format: smart_date
+ x_axis_title: ''
+ x_axis_title_margin: 15
+ y_axis_bounds:
+ - null
+ - null
+ y_axis_format: SMART_NUMBER
+ y_axis_title: ''
+ y_axis_title_margin: 15
+ y_axis_title_position: Left
+ zoomable: false
+ queries:
+ - annotation_layers: []
+ applied_time_extras: {}
+ columns:
+ - columnType: BASE_AXIS
+ expressionType: SQL
+ label: course_run
+ sqlExpression: course_run
+ custom_form_data: {}
+ custom_params: {}
+ extras:
+ having: ''
+ where: ''
+ filters:
+ - col: enrolled_at
+ op: TEMPORAL_RANGE
+ val: No filter
+ metrics:
+ - passed
+ - count
+ - at_risk
+ - active
+ order_desc: true
+ orderby:
+ - - passed
+ - false
+ post_processing:
+ - operation: pivot
+ options:
+ aggregates:
+ active:
+ operator: mean
+ at_risk:
+ operator: mean
+ count:
+ operator: mean
+ passed:
+ operator: mean
+ columns: []
+ drop_missing_columns: true
+ index:
+ - course_run
+ - operation: flatten
+ row_limit: 10
+ series_columns: []
+ series_limit: 0
+ time_offsets: []
+ url_params: {}
+ result_format: json
+ result_type: full
+slice_name: Learner Performance Breakdown
+uuid: 9c3f7291-1bd9-4b2f-abc0-472aad3aff06
+version: 1.0.0
+viz_type: echarts_timeseries_bar
diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_dde44a.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_dde44a.yaml
new file mode 100644
index 000000000..13f3d55bc
--- /dev/null
+++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_dde44a.yaml
@@ -0,0 +1,146 @@
+_file_name: Learner_Performance_dde44a.yaml
+cache_timeout: null
+certification_details: null
+certified_by: null
+dataset_uuid: ffc33796-bcd4-4e8b-a4e4-ab6517b72116
+description: |-
+
+ - Avg % Correct on 1st Attempt
+ - The average percentage of correct answers on the first attempt
+
+params:
+ adhoc_filters:
+ - clause: WHERE
+ comparator: No filter
+ datasourceWarning: false
+ expressionType: SIMPLE
+ filterOptionName: filter_qqnzi3klvaa_mtbj67olly
+ isExtra: false
+ isNew: false
+ operator: TEMPORAL_RANGE
+ sqlExpression: null
+ subject: emission_time
+ all_columns:
+ - success
+ annotation_layers: []
+ color_pn: true
+ column_config:
+ avg_course_grade:
+ d3NumberFormat: ',.1%'
+ first_try_correct:
+ d3NumberFormat: ',.1%'
+ showCellBars: false
+ med_course_grade:
+ d3NumberFormat: ',.1%'
+ conditional_formatting: []
+ extra_form_data: {}
+ groupby:
+ - course_run
+ - course_name
+ metrics:
+ - first_try_correct
+ - count_passing
+ - avg_course_grade
+ - med_course_grade
+ order_by_cols: []
+ order_desc: false
+ percent_metrics: []
+ query_mode: aggregate
+ row_limit: 50000
+ server_page_length: 10
+ show_cell_bars: false
+ table_timestamp_format: smart_date
+ temporal_columns_lookup: {}
+ time_grain_sqla: P1M
+ viz_type: table
+query_context:
+ datasource:
+ id: 648
+ type: table
+ force: false
+ form_data:
+ adhoc_filters:
+ - clause: WHERE
+ comparator: No filter
+ datasourceWarning: false
+ expressionType: SIMPLE
+ filterOptionName: filter_qqnzi3klvaa_mtbj67olly
+ isExtra: false
+ isNew: false
+ operator: TEMPORAL_RANGE
+ sqlExpression: null
+ subject: emission_time
+ all_columns:
+ - success
+ color_pn: true
+ column_config:
+ avg_course_grade:
+ d3NumberFormat: ',.1%'
+ first_try_correct:
+ d3NumberFormat: ',.1%'
+ showCellBars: false
+ med_course_grade:
+ d3NumberFormat: ',.1%'
+ conditional_formatting: []
+ dashboards:
+ - 161
+ datasource: 648__table
+ extra_form_data: {}
+ force: false
+ groupby:
+ - course_run
+ - course_name
+ metrics:
+ - first_try_correct
+ - count_passing
+ - avg_course_grade
+ - med_course_grade
+ order_by_cols: []
+ order_desc: false
+ percent_metrics: []
+ query_mode: aggregate
+ result_format: json
+ result_type: full
+ row_limit: 50000
+ server_page_length: 10
+ show_cell_bars: false
+ slice_id: 1292
+ table_timestamp_format: smart_date
+ temporal_columns_lookup: {}
+ time_grain_sqla: P1M
+ viz_type: table
+ queries:
+ - annotation_layers: []
+ applied_time_extras: {}
+ columns:
+ - course_run
+ - course_name
+ custom_form_data: {}
+ custom_params: {}
+ extras:
+ having: ''
+ time_grain_sqla: P1M
+ where: ''
+ filters:
+ - col: emission_time
+ op: TEMPORAL_RANGE
+ val: No filter
+ metrics:
+ - first_try_correct
+ - count_passing
+ - avg_course_grade
+ - med_course_grade
+ order_desc: false
+ orderby:
+ - - first_try_correct
+ - false
+ post_processing: []
+ row_limit: 50000
+ series_limit: 0
+ url_params: {}
+ result_format: json
+ result_type: full
+slice_name: Learner Performance
+uuid: dde44a03-649f-4d77-990b-a95be204e1ba
+version: 1.0.0
+viz_type: table
diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_123e1a.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_123e1a.yaml
new file mode 100644
index 000000000..e9d23ad7b
--- /dev/null
+++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_123e1a.yaml
@@ -0,0 +1,107 @@
+_file_name: Video_Engagement_123e1a.yaml
+cache_timeout: null
+certification_details: null
+certified_by: null
+dataset_uuid: 82cb6b56-c713-4933-93a0-9de15c266c4b
+description: null
+params:
+ adhoc_filters: []
+ all_columns: []
+ color_pn: true
+ column_config:
+ rewatched_percent:
+ d3NumberFormat: ',.1%'
+ watched_percent:
+ d3NumberFormat: ',.1%'
+ conditional_formatting: []
+ extra_form_data: {}
+ groupby:
+ - course_run
+ - course_name
+ metrics:
+ - watched_percent
+ - rewatched_percent
+ - video_count
+ - avg_video_length
+ order_by_cols: []
+ order_desc: true
+ percent_metrics: []
+ query_mode: aggregate
+ row_limit: 50000
+ server_page_length: 10
+ show_cell_bars: false
+ table_timestamp_format: smart_date
+ temporal_columns_lookup: {}
+ viz_type: table
+query_context:
+ datasource:
+ id: 121
+ type: table
+ force: false
+ form_data:
+ adhoc_filters: []
+ all_columns: []
+ color_pn: true
+ column_config:
+ rewatched_percent:
+ d3NumberFormat: ',.1%'
+ watched_percent:
+ d3NumberFormat: ',.1%'
+ conditional_formatting: []
+ dashboards:
+ - 2441
+ datasource: 121__table
+ extra_form_data: {}
+ force: false
+ groupby:
+ - course_run
+ - course_name
+ metrics:
+ - watched_percent
+ - rewatched_percent
+ - video_count
+ - avg_video_length
+ order_by_cols: []
+ order_desc: true
+ percent_metrics: []
+ query_mode: aggregate
+ result_format: json
+ result_type: full
+ row_limit: 50000
+ server_page_length: 10
+ show_cell_bars: false
+ slice_id: 1465
+ table_timestamp_format: smart_date
+ temporal_columns_lookup: {}
+ viz_type: table
+ queries:
+ - annotation_layers: []
+ applied_time_extras: {}
+ columns:
+ - course_run
+ - course_name
+ custom_form_data: {}
+ custom_params: {}
+ extras:
+ having: ''
+ where: ''
+ filters: []
+ metrics:
+ - watched_percent
+ - rewatched_percent
+ - video_count
+ - avg_video_length
+ order_desc: true
+ orderby:
+ - - watched_percent
+ - false
+ post_processing: []
+ row_limit: 50000
+ series_limit: 0
+ url_params: {}
+ result_format: json
+ result_type: full
+slice_name: Video Engagement
+uuid: 123e1a89-585b-4104-872c-ef4f972f42a7
+version: 1.0.0
+viz_type: table
diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_1cf14f.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_1cf14f.yaml
new file mode 100644
index 000000000..5bf6bb483
--- /dev/null
+++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_1cf14f.yaml
@@ -0,0 +1,107 @@
+_file_name: Video_Engagement_1cf14f.yaml
+cache_timeout: null
+certification_details: null
+certified_by: null
+dataset_uuid: 82cb6b56-c713-4933-93a0-9de15c266c4b
+description: null
+params:
+ adhoc_filters: []
+ all_columns: []
+ color_pn: true
+ column_config:
+ rewatched_percent:
+ d3NumberFormat: ',.1%'
+ watched_percent:
+ d3NumberFormat: ',.1%'
+ conditional_formatting: []
+ extra_form_data: {}
+ groupby:
+ - course_name
+ - org
+ metrics:
+ - watched_percent
+ - rewatched_percent
+ - video_count
+ - avg_video_length
+ order_by_cols: []
+ order_desc: true
+ percent_metrics: []
+ query_mode: aggregate
+ row_limit: 50000
+ server_page_length: 10
+ show_cell_bars: false
+ table_timestamp_format: smart_date
+ temporal_columns_lookup: {}
+ viz_type: table
+query_context:
+ datasource:
+ id: 121
+ type: table
+ force: false
+ form_data:
+ adhoc_filters: []
+ all_columns: []
+ color_pn: true
+ column_config:
+ rewatched_percent:
+ d3NumberFormat: ',.1%'
+ watched_percent:
+ d3NumberFormat: ',.1%'
+ conditional_formatting: []
+ dashboards:
+ - 2441
+ datasource: 121__table
+ extra_form_data: {}
+ force: false
+ groupby:
+ - course_name
+ - org
+ metrics:
+ - watched_percent
+ - rewatched_percent
+ - video_count
+ - avg_video_length
+ order_by_cols: []
+ order_desc: true
+ percent_metrics: []
+ query_mode: aggregate
+ result_format: json
+ result_type: full
+ row_limit: 50000
+ server_page_length: 10
+ show_cell_bars: false
+ slice_id: 1361
+ table_timestamp_format: smart_date
+ temporal_columns_lookup: {}
+ viz_type: table
+ queries:
+ - annotation_layers: []
+ applied_time_extras: {}
+ columns:
+ - course_name
+ - org
+ custom_form_data: {}
+ custom_params: {}
+ extras:
+ having: ''
+ where: ''
+ filters: []
+ metrics:
+ - watched_percent
+ - rewatched_percent
+ - video_count
+ - avg_video_length
+ order_desc: true
+ orderby:
+ - - watched_percent
+ - false
+ post_processing: []
+ row_limit: 50000
+ series_limit: 0
+ url_params: {}
+ result_format: json
+ result_type: full
+slice_name: Video Engagement
+uuid: 1cf14f26-6957-482c-9dde-649c2c65ec13
+version: 1.0.0
+viz_type: table
diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/dashboards/Course_Comparison_Dashboard.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/dashboards/Course_Comparison_Dashboard.yaml
new file mode 100644
index 000000000..69972d060
--- /dev/null
+++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/dashboards/Course_Comparison_Dashboard.yaml
@@ -0,0 +1,672 @@
+_file_name: Course_Comparison_Dashboard.yaml
+_roles:
+- '{{ SUPERSET_ROLES_MAPPING.instructor }}'
+certification_details: ''
+certified_by: ''
+css: ''
+dashboard_title: Course Comparison Dashboard
+description: null
+metadata:
+ chart_configuration:
+ '1081':
+ crossFilters:
+ chartsInScope:
+ - 121
+ - 161
+ - 221
+ - 421
+ - 801
+ - 1181
+ - 1381
+ - 1465
+ - 1466
+ scope: global
+ id: 1081
+ '1181':
+ crossFilters:
+ chartsInScope:
+ - 121
+ - 161
+ - 221
+ - 421
+ - 801
+ - 1081
+ - 1381
+ - 1465
+ - 1466
+ scope: global
+ id: 1181
+ '121':
+ crossFilters:
+ chartsInScope:
+ - 161
+ - 221
+ - 421
+ - 801
+ - 1081
+ - 1181
+ - 1381
+ - 1465
+ - 1466
+ scope: global
+ id: 121
+ '1381':
+ crossFilters:
+ chartsInScope:
+ - 121
+ - 161
+ - 221
+ - 421
+ - 801
+ - 1081
+ - 1181
+ - 1465
+ - 1466
+ scope: global
+ id: 1381
+ '1465':
+ crossFilters:
+ chartsInScope:
+ - 121
+ - 161
+ - 221
+ - 421
+ - 801
+ - 1081
+ - 1181
+ - 1381
+ - 1466
+ scope: global
+ id: 1465
+ '1466':
+ crossFilters:
+ chartsInScope:
+ - 121
+ - 161
+ - 221
+ - 421
+ - 801
+ - 1081
+ - 1181
+ - 1381
+ - 1465
+ scope: global
+ id: 1466
+ '161':
+ crossFilters:
+ chartsInScope:
+ - 121
+ - 221
+ - 421
+ - 801
+ - 1081
+ - 1181
+ - 1381
+ - 1465
+ - 1466
+ scope: global
+ id: 161
+ '221':
+ crossFilters:
+ chartsInScope:
+ - 121
+ - 161
+ - 421
+ - 801
+ - 1081
+ - 1181
+ - 1381
+ - 1465
+ - 1466
+ scope: global
+ id: 221
+ '421':
+ crossFilters:
+ chartsInScope:
+ - 121
+ - 161
+ - 221
+ - 801
+ - 1081
+ - 1181
+ - 1381
+ - 1465
+ - 1466
+ scope: global
+ id: 421
+ '801':
+ crossFilters:
+ chartsInScope:
+ - 121
+ - 161
+ - 221
+ - 421
+ - 1081
+ - 1181
+ - 1381
+ - 1465
+ - 1466
+ scope: global
+ id: 801
+ color_scheme: supersetColors
+ color_scheme_domain:
+ - '#1FA8C9'
+ - '#454E7C'
+ - '#5AC189'
+ - '#FF7F44'
+ - '#666666'
+ - '#E04355'
+ - '#FCC700'
+ - '#A868B7'
+ - '#3CCCCB'
+ - '#A38F79'
+ - '#8FD3E4'
+ - '#A1A6BD'
+ - '#ACE1C4'
+ - '#FEC0A1'
+ - '#B2B2B2'
+ - '#EFA1AA'
+ - '#FDE380'
+ - '#D3B3DA'
+ - '#9EE5E5'
+ - '#D1C6BC'
+ cross_filters_enabled: true
+ default_filters: '{}'
+ expanded_slices:
+ '121': true
+ '221': true
+ '421': true
+ '801': true
+ global_chart_configuration:
+ chartsInScope:
+ - 121
+ - 161
+ - 221
+ - 421
+ - 801
+ - 1081
+ - 1181
+ - 1381
+ - 1465
+ - 1466
+ scope:
+ excluded: []
+ rootPath:
+ - ROOT_ID
+ label_colors: {}
+ native_filter_configuration:
+ - cascadeParentIds: []
+ chartsInScope:
+ - 1273
+ - 1274
+ - 1275
+ - 1276
+ - 1277
+ - 1278
+ - 1279
+ - 1292
+ - 1294
+ - 1295
+ controlValues:
+ defaultToFirstItem: true
+ enableEmptyFilter: false
+ inverseSelection: false
+ multiSelect: true
+ searchAllOptions: false
+ defaultDataMask:
+ extraFormData: {}
+ filterState: {}
+ ownState: {}
+ description: ''
+ filterType: filter_select
+ id: NATIVE_FILTER-QrTlO4wBf
+ name: Organization
+ requiredFirst: true
+ scope:
+ excluded: []
+ rootPath:
+ - ROOT_ID
+ tabsInScope:
+ - TAB-J31MdXj-sa
+ - TAB-GuHDMLqRC
+ targets:
+ - column:
+ name: org
+ datasetUuid: 38488934-35ee-5404-9acc-7e67626ddfae
+ type: NATIVE_FILTER
+ - cascadeParentIds: []
+ chartsInScope: []
+ controlValues:
+ defaultToFirstItem: false
+ enableEmptyFilter: false
+ inverseSelection: false
+ multiSelect: true
+ searchAllOptions: false
+ sortAscending: true
+ defaultDataMask:
+ extraFormData: {}
+ filterState: {}
+ ownState: {}
+ description: Only available in versions Redwood and later
+ filterType: filter_select
+ id: NATIVE_FILTER-M1zEXEB97
+ name: Tag
+ scope:
+ excluded: []
+ rootPath:
+ - ROOT_ID
+ sortMetric: order
+ tabsInScope: []
+ targets:
+ - column:
+ name: tag
+ datasetUuid: 81457874-fd86-4568-a730-9179ab7a7fd5
+ type: NATIVE_FILTER
+ - cascadeParentIds:
+ - NATIVE_FILTER-QrTlO4wBf
+ - NATIVE_FILTER-M1zEXEB97
+ chartsInScope:
+ - 1266
+ - 1273
+ - 1274
+ - 1275
+ - 1276
+ - 1277
+ - 1278
+ - 1279
+ controlValues:
+ defaultToFirstItem: false
+ enableEmptyFilter: false
+ inverseSelection: false
+ multiSelect: true
+ searchAllOptions: false
+ defaultDataMask:
+ extraFormData: {}
+ filterState: {}
+ ownState: {}
+ description: ''
+ filterType: filter_select
+ id: NATIVE_FILTER-IfS-Rd0ZS
+ name: Course Name
+ scope:
+ excluded: []
+ rootPath:
+ - ROOT_ID
+ tabsInScope:
+ - TAB-J31MdXj-sa
+ - TAB-GuHDMLqRC
+ targets:
+ - column:
+ name: course_name
+ datasetUuid: 38488934-35ee-5404-9acc-7e67626ddfae
+ type: NATIVE_FILTER
+ - cascadeParentIds:
+ - NATIVE_FILTER-M1zEXEB97
+ - NATIVE_FILTER-QrTlO4wBf
+ chartsInScope:
+ - 1266
+ - 1273
+ - 1274
+ - 1275
+ - 1276
+ - 1277
+ - 1278
+ - 1279
+ controlValues:
+ defaultToFirstItem: false
+ enableEmptyFilter: false
+ inverseSelection: false
+ multiSelect: true
+ searchAllOptions: false
+ defaultDataMask:
+ extraFormData: {}
+ filterState: {}
+ ownState: {}
+ description: ''
+ filterType: filter_select
+ id: NATIVE_FILTER-w863AfFgi
+ name: Course Run
+ scope:
+ excluded: []
+ rootPath:
+ - ROOT_ID
+ tabsInScope:
+ - TAB-J31MdXj-sa
+ - TAB-GuHDMLqRC
+ targets:
+ - column:
+ name: course_run
+ datasetUuid: 38488934-35ee-5404-9acc-7e67626ddfae
+ type: NATIVE_FILTER
+ refresh_frequency: 0
+ shared_label_colors:
+ active: '#1FA8C9'
+ at_risk: '#5AC189'
+ count: '#FCC700'
+ passed: '#666666'
+ timed_refresh_immune_slices: []
+position:
+ CHART-explore-1273-1:
+ children: []
+ id: CHART-explore-1273-1
+ meta:
+ chartId: 1181
+ height: 49
+ sliceName: Course Info
+ uuid: a433e3cc-8ed5-454a-8b17-5dd75cfc84e4
+ width: 12
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-J31MdXj-sa
+ - ROW-otbcoXVOj
+ type: CHART
+ CHART-explore-1274-1:
+ children: []
+ id: CHART-explore-1274-1
+ meta:
+ chartId: 1381
+ height: 49
+ sliceName: Course Info
+ uuid: e0098cfe-a312-4c49-8efd-7e74256b6ea4
+ width: 12
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-GuHDMLqRC
+ - ROW-vepcifelF
+ type: CHART
+ CHART-explore-1275-1:
+ children: []
+ id: CHART-explore-1275-1
+ meta:
+ chartId: 421
+ height: 67
+ sliceName: Learner Performance Breakdown
+ uuid: 4250c976-a9b7-43ff-b5ad-8dd00a5acef7
+ width: 12
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-J31MdXj-sa
+ - ROW-EDze1WWiC
+ type: CHART
+ CHART-explore-1276-1:
+ children: []
+ id: CHART-explore-1276-1
+ meta:
+ chartId: 801
+ height: 67
+ sliceName: Learner Performance Breakdown
+ uuid: 9c3f7291-1bd9-4b2f-abc0-472aad3aff06
+ width: 12
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-GuHDMLqRC
+ - ROW-O1XuzgpIo
+ type: CHART
+ CHART-explore-1279-1:
+ children: []
+ id: CHART-explore-1279-1
+ meta:
+ chartId: 121
+ height: 51
+ sliceName: Learner Performance
+ uuid: 4e48b8f9-e757-4263-a9d7-d18018620a24
+ width: 12
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-J31MdXj-sa
+ - ROW-y57KZVzDt
+ type: CHART
+ CHART-explore-1292-1:
+ children: []
+ id: CHART-explore-1292-1
+ meta:
+ chartId: 221
+ height: 51
+ sliceName: Learner Performance
+ uuid: dde44a03-649f-4d77-990b-a95be204e1ba
+ width: 12
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-GuHDMLqRC
+ - ROW--27JFXNWc
+ type: CHART
+ CHART-explore-1294-1:
+ children: []
+ id: CHART-explore-1294-1
+ meta:
+ chartId: 161
+ height: 49
+ sliceName: Enrollment Counts
+ uuid: 2f2af8b0-94ae-4300-b71f-3bd7f9fc127c
+ width: 12
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-J31MdXj-sa
+ - ROW-FolfXlYAh
+ type: CHART
+ CHART-explore-1295-1:
+ children: []
+ id: CHART-explore-1295-1
+ meta:
+ chartId: 1081
+ height: 49
+ sliceName: Enrollment Counts
+ uuid: bd37be7f-6672-4dca-80ae-a54f69d169da
+ width: 12
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-GuHDMLqRC
+ - ROW-17CIe_GHN
+ type: CHART
+ CHART-explore-1465-1:
+ children: []
+ id: CHART-explore-1465-1
+ meta:
+ chartId: 1465
+ height: 50
+ sliceName: Video Engagement
+ uuid: 1cf14f26-6957-482c-9dde-649c2c65ec13
+ width: 12
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-J31MdXj-sa
+ - ROW-ea7R1H5r0q
+ type: CHART
+ CHART-explore-1466-1:
+ children: []
+ id: CHART-explore-1466-1
+ meta:
+ chartId: 1466
+ height: 50
+ sliceName: Video Engagement
+ uuid: 123e1a89-585b-4104-872c-ef4f972f42a7
+ width: 12
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-J31MdXj-sa
+ - ROW-ksE1lVL9ko
+ type: CHART
+ DASHBOARD_VERSION_KEY: v2
+ GRID_ID:
+ children: []
+ id: GRID_ID
+ parents:
+ - ROOT_ID
+ type: GRID
+ HEADER_ID:
+ id: HEADER_ID
+ meta:
+ text: Course Comparison Dashboard
+ type: HEADER
+ ROOT_ID:
+ children:
+ - TABS-6vozRyRn2o
+ id: ROOT_ID
+ type: ROOT
+ ROW--27JFXNWc:
+ children:
+ - CHART-explore-1292-1
+ id: ROW--27JFXNWc
+ meta:
+ background: BACKGROUND_TRANSPARENT
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-GuHDMLqRC
+ type: ROW
+ ROW-17CIe_GHN:
+ children:
+ - CHART-explore-1295-1
+ id: ROW-17CIe_GHN
+ meta:
+ background: BACKGROUND_TRANSPARENT
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-GuHDMLqRC
+ type: ROW
+ ROW-EDze1WWiC:
+ children:
+ - CHART-explore-1275-1
+ id: ROW-EDze1WWiC
+ meta:
+ background: BACKGROUND_TRANSPARENT
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-J31MdXj-sa
+ type: ROW
+ ROW-FolfXlYAh:
+ children:
+ - CHART-explore-1294-1
+ id: ROW-FolfXlYAh
+ meta:
+ background: BACKGROUND_TRANSPARENT
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-J31MdXj-sa
+ type: ROW
+ ROW-FvlinEtRl:
+ children:
+ - CHART-explore-1466-1
+ id: ROW-FvlinEtRl
+ meta:
+ background: BACKGROUND_TRANSPARENT
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-GuHDMLqRC
+ type: ROW
+ ROW-O1XuzgpIo:
+ children:
+ - CHART-explore-1276-1
+ id: ROW-O1XuzgpIo
+ meta:
+ background: BACKGROUND_TRANSPARENT
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-GuHDMLqRC
+ type: ROW
+ ROW-ea7R1H5r0q:
+ children:
+ - CHART-explore-1465-1
+ id: ROW-ea7R1H5r0q
+ meta:
+ '0': ROOT_ID
+ '1': TABS-6vozRyRn2o
+ background: BACKGROUND_TRANSPARENT
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-J31MdXj-sa
+ type: ROW
+ ROW-otbcoXVOj:
+ children:
+ - CHART-explore-1273-1
+ id: ROW-otbcoXVOj
+ meta:
+ background: BACKGROUND_TRANSPARENT
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-J31MdXj-sa
+ type: ROW
+ ROW-vepcifelF:
+ children:
+ - CHART-explore-1274-1
+ id: ROW-vepcifelF
+ meta:
+ background: BACKGROUND_TRANSPARENT
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-GuHDMLqRC
+ type: ROW
+ ROW-y57KZVzDt:
+ children:
+ - CHART-explore-1279-1
+ id: ROW-y57KZVzDt
+ meta:
+ background: BACKGROUND_TRANSPARENT
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ - TAB-J31MdXj-sa
+ type: ROW
+ TAB-GuHDMLqRC:
+ children:
+ - ROW-vepcifelF
+ - ROW-17CIe_GHN
+ - ROW-O1XuzgpIo
+ - ROW--27JFXNWc
+ - ROW-FvlinEtRl
+ id: TAB-GuHDMLqRC
+ meta:
+ defaultText: Tab title
+ placeholder: Tab title
+ text: Run Metrics
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ type: TAB
+ TAB-J31MdXj-sa:
+ children:
+ - ROW-otbcoXVOj
+ - ROW-FolfXlYAh
+ - ROW-EDze1WWiC
+ - ROW-y57KZVzDt
+ - ROW-ea7R1H5r0q
+ id: TAB-J31MdXj-sa
+ meta:
+ defaultText: Tab title
+ placeholder: Tab title
+ text: Course Metrics
+ parents:
+ - ROOT_ID
+ - TABS-6vozRyRn2o
+ type: TAB
+ TABS-6vozRyRn2o:
+ children:
+ - TAB-J31MdXj-sa
+ - TAB-GuHDMLqRC
+ id: TABS-6vozRyRn2o
+ meta: {}
+ parents:
+ - ROOT_ID
+ type: TABS
+published: true
+slug: course-comparison
+uuid: c6c7062d-dd90-4292-b9cf-84f7b9f38e73
+version: 1.0.0
diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/course_information.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/course_information.yaml
new file mode 100644
index 000000000..a78b564eb
--- /dev/null
+++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/course_information.yaml
@@ -0,0 +1,154 @@
+_file_name: course_information.yaml
+always_filter_main_dttm: false
+cache_timeout: null
+columns:
+- advanced_data_type: null
+ column_name: active_learner
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: Nullable(String)
+ verbose_name: Active Learner
+- advanced_data_type: null
+ column_name: enrollment_mode
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: LowCardinality(String)
+ verbose_name: Enrollment Mode
+- advanced_data_type: null
+ column_name: actor_id
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Actor Id
+- advanced_data_type: null
+ column_name: course_name
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Course Name
+- advanced_data_type: null
+ column_name: course_run
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Course Run
+- advanced_data_type: null
+ column_name: course_tag
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Course Tag
+- advanced_data_type: null
+ column_name: org
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: LowCardinality(String)
+ verbose_name: Org
+database_uuid: 21174b6c-4d40-4958-8161-d6c3cf5e77b6
+default_endpoint: null
+description: null
+extra: null
+fetch_values_predicate: null
+filter_select_enabled: true
+main_dttm_col: emission_time
+metrics:
+- currency: null
+ d3format: null
+ description: null
+ expression: uniq((active_learner,course_run))
+ extra:
+ warning_markdown: ''
+ metric_name: active_count
+ metric_type: null
+ verbose_name: Active Within Last 7 Days
+ warning_text: null
+- currency: null
+ d3format: null
+ description: null
+ expression: |-
+ replaceAll(replaceRegexpAll(toString(groupArray(distinct course_tag)),'\[|\]|\'',''),',',', ')
+ extra:
+ warning_markdown: ''
+ metric_name: tag_list
+ metric_type: null
+ verbose_name: Tags
+ warning_text: null
+- currency: null
+ d3format: null
+ description: null
+ expression: uniq((actor_id,course_run))
+ extra:
+ warning_markdown: ''
+ metric_name: enrollees
+ metric_type: null
+ verbose_name: Current Enrollees
+ warning_text: null
+- currency: null
+ d3format: null
+ description: null
+ expression: COUNT(*)
+ extra:
+ warning_markdown: ''
+ metric_name: count
+ metric_type: count
+ verbose_name: COUNT(*)
+ warning_text: null
+normalize_columns: false
+offset: 0
+params: null
+schema: '{{ DBT_PROFILE_TARGET_DATABASE }}'
+sql: |-
+ {% filter indent(width=2) %}{% include 'openedx-assets/queries/course_information.sql' %}{% endfilter %}
+table_name: course_information
+template_params: null
+uuid: 27a4476b-5a9a-4fc4-ac75-da520b522341
+version: 1.0.0
diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/learner_performance.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/learner_performance.yaml
new file mode 100644
index 000000000..0083cfde0
--- /dev/null
+++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/learner_performance.yaml
@@ -0,0 +1,191 @@
+_file_name: learner_performance.yaml
+always_filter_main_dttm: false
+cache_timeout: null
+columns:
+- advanced_data_type: null
+ column_name: course_key
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: LowCardinality(String)
+ verbose_name: Course Key
+- advanced_data_type: null
+ column_name: course_grade
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: Float64
+ verbose_name: Course Grade
+- advanced_data_type: null
+ column_name: actor_id
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Actor ID
+- advanced_data_type: null
+ column_name: course_name
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Course Name
+- advanced_data_type: null
+ column_name: course_run
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Course Run
+- advanced_data_type: null
+ column_name: org
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: LowCardinality(String)
+ verbose_name: Org
+- advanced_data_type: null
+ column_name: approving_state
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Pass/Fail
+- advanced_data_type: null
+ column_name: attempts
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: Int16
+ verbose_name: Attempts
+- advanced_data_type: null
+ column_name: success
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: Bool
+ verbose_name: Success
+database_uuid: 21174b6c-4d40-4958-8161-d6c3cf5e77b6
+default_endpoint: null
+description: null
+extra: null
+fetch_values_predicate: null
+filter_select_enabled: true
+main_dttm_col: null
+metrics:
+- currency: null
+ d3format: null
+ description: null
+ expression: count(distinct case when attempts = 1 and success then actor_id else
+ null end)/count(distinct case when attempts > 0 then actor_id else null end)
+ extra:
+ warning_markdown: ''
+ metric_name: first_try_correct
+ metric_type: null
+ verbose_name: Avg % Correct on 1st Attempt
+ warning_text: null
+- currency: null
+ d3format: null
+ description: null
+ expression: |-
+ count(distinct case when approving_state = 'passed' then actor_id else null end)
+ extra:
+ warning_markdown: ''
+ metric_name: count_passing
+ metric_type: null
+ verbose_name: Count of Passing Grades
+ warning_text: null
+- currency: null
+ d3format: null
+ description: null
+ expression: 'quantile(0.5)(round(course_grade,2)) '
+ extra:
+ warning_markdown: ''
+ metric_name: med_course_grade
+ metric_type: null
+ verbose_name: Median Course Grade
+ warning_text: null
+- currency: null
+ d3format: null
+ description: null
+ expression: round(AVG(course_grade),2)
+ extra:
+ warning_markdown: ''
+ metric_name: avg_course_grade
+ metric_type: null
+ verbose_name: Avg Course Grade
+ warning_text: null
+- currency: null
+ d3format: null
+ description: null
+ expression: COUNT(*)
+ extra:
+ warning_markdown: ''
+ metric_name: count
+ metric_type: count
+ verbose_name: COUNT(*)
+ warning_text: null
+normalize_columns: false
+offset: 0
+params: null
+schema: '{{ DBT_PROFILE_TARGET_DATABASE }}'
+sql: |-
+ {% filter indent(width=2) %}{% include 'openedx-assets/queries/learner_performance.sql' %}{% endfilter %}
+table_name: learner_performance
+template_params: null
+uuid: ffc33796-bcd4-4e8b-a4e4-ab6517b72116
+version: 1.0.0
diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/learner_performance_breakdown.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/learner_performance_breakdown.yaml
new file mode 100644
index 000000000..50def3811
--- /dev/null
+++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/learner_performance_breakdown.yaml
@@ -0,0 +1,143 @@
+_file_name: learner_performance_breakdown.yaml
+always_filter_main_dttm: false
+cache_timeout: null
+columns:
+- advanced_data_type: null
+ column_name: actor_id
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Actor Id
+- advanced_data_type: null
+ column_name: approving_state
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Approving State
+- advanced_data_type: null
+ column_name: course_name
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Course Name
+- advanced_data_type: null
+ column_name: course_run
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Course Run
+- advanced_data_type: null
+ column_name: learner_status
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Learner Status
+- advanced_data_type: null
+ column_name: org
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: LowCardinality(String)
+ verbose_name: Org
+database_uuid: 21174b6c-4d40-4958-8161-d6c3cf5e77b6
+default_endpoint: null
+description: null
+extra: null
+fetch_values_predicate: null
+filter_select_enabled: true
+main_dttm_col: enrolled_at
+metrics:
+- currency: null
+ d3format: null
+ description: null
+ expression: |-
+ count(case when learner_status='at-risk' then actor_id else null end)
+ extra:
+ warning_markdown: ''
+ metric_name: at_risk
+ metric_type: null
+ verbose_name: At Risk
+ warning_text: null
+- currency: null
+ d3format: null
+ description: null
+ expression: |-
+ count(case when learner_status='active' then actor_id else null end)
+ extra:
+ warning_markdown: ''
+ metric_name: active
+ metric_type: null
+ verbose_name: Active
+ warning_text: null
+- currency: null
+ d3format: null
+ description: null
+ expression: |-
+ count(case when approving_state='passed' then actor_id else null end)
+ extra:
+ warning_markdown: ''
+ metric_name: passed
+ metric_type: null
+ verbose_name: Passed
+ warning_text: null
+- currency: null
+ d3format: null
+ description: null
+ expression: COUNT(actor_id)
+ extra:
+ warning_markdown: ''
+ metric_name: count
+ metric_type: count
+ verbose_name: Total
+ warning_text: null
+normalize_columns: false
+offset: 0
+params: null
+schema: '{{ DBT_PROFILE_TARGET_DATABASE }}'
+sql: |-
+ {% filter indent(width=2) %}{% include 'openedx-assets/queries/learner_performance_breakdown.sql' %}{% endfilter %}
+table_name: learner_performance_breakdown
+template_params: null
+uuid: 1970f934-cffb-4c5a-8a13-69dab22755c7
+version: 1.0.0
diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/tag_filter.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/tag_filter.yaml
new file mode 100644
index 000000000..563dc484e
--- /dev/null
+++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/tag_filter.yaml
@@ -0,0 +1,76 @@
+_file_name: tag_filter.yaml
+always_filter_main_dttm: false
+cache_timeout: null
+columns:
+- advanced_data_type: null
+ column_name: id
+ description: null
+ expression: ''
+ extra: {}
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: Int32
+ verbose_name: Id
+- advanced_data_type: null
+ column_name: rownum
+ description: null
+ expression: ''
+ extra: {}
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: UInt64
+ verbose_name: Rownum
+- advanced_data_type: null
+ column_name: tag
+ description: null
+ expression: ''
+ extra: {}
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Tag
+database_uuid: 21174b6c-4d40-4958-8161-d6c3cf5e77b6
+default_endpoint: null
+description: null
+extra: null
+fetch_values_predicate: null
+filter_select_enabled: true
+main_dttm_col: null
+metrics:
+- currency: null
+ d3format: null
+ description: null
+ expression: COUNT(*)
+ extra: {}
+ metric_name: count
+ metric_type: count
+ verbose_name: COUNT(*)
+ warning_text: null
+- currency: null
+ d3format: null
+ description: null
+ expression: min(rownum)
+ extra: {}
+ metric_name: order
+ metric_type: null
+ verbose_name: order
+ warning_text: null
+normalize_columns: false
+offset: 0
+params: null
+schema: '{{ ASPECTS_EVENT_SINK_DATABASE }}'
+sql: |-
+ {% filter indent(width=2) %}{% include 'openedx-assets/queries/tag_filter_dataset.sql' %}{% endfilter %}
+table_name: tag_filter
+template_params: null
+uuid: 81457874-fd86-4568-a730-9179ab7a7fd5
+version: 1.0.0
diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/watched_video_duration.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/watched_video_duration.yaml
new file mode 100644
index 000000000..6edec5e11
--- /dev/null
+++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/watched_video_duration.yaml
@@ -0,0 +1,180 @@
+_file_name: watched_video_duration.yaml
+always_filter_main_dttm: false
+cache_timeout: null
+columns:
+- advanced_data_type: null
+ column_name: course_name
+ description: null
+ expression: ''
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Course Name
+- advanced_data_type: null
+ column_name: video_duration
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: Int64
+ verbose_name: Video Duration
+- advanced_data_type: null
+ column_name: course_run
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Course Run
+- advanced_data_type: null
+ column_name: org
+ description: null
+ expression: null
+ extra:
+ warning_markdown: null
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Org
+- advanced_data_type: null
+ column_name: rewatched_time
+ description: null
+ expression: null
+ extra: {}
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: Int64
+ verbose_name: Rewatched Time
+- advanced_data_type: null
+ column_name: watched_time
+ description: null
+ expression: null
+ extra: {}
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: Int64
+ verbose_name: Watched Time
+- advanced_data_type: null
+ column_name: actor_id
+ description: null
+ expression: null
+ extra: {}
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Actor Id
+- advanced_data_type: null
+ column_name: course_key
+ description: null
+ expression: null
+ extra: {}
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Course Key
+- advanced_data_type: null
+ column_name: video_id
+ description: null
+ expression: null
+ extra: {}
+ filterable: true
+ groupby: true
+ is_active: true
+ is_dttm: false
+ python_date_format: null
+ type: String
+ verbose_name: Video Id
+database_uuid: 21174b6c-4d40-4958-8161-d6c3cf5e77b6
+default_endpoint: null
+description: null
+extra: null
+fetch_values_predicate: null
+filter_select_enabled: true
+main_dttm_col: null
+metrics:
+- currency: null
+ d3format: null
+ description: null
+ expression: (sum(rewatched_time)/count(actor_id))/sum(video_duration)
+ extra: {}
+ metric_name: rewatched_percent
+ metric_type: null
+ verbose_name: '% Video Seconds Rewatched'
+ warning_text: null
+- currency: null
+ d3format: null
+ description: null
+ expression: (sum(watched_time)/count(actor_id))/sum(video_duration)
+ extra: {}
+ metric_name: watched_percent
+ metric_type: null
+ verbose_name: '% Video Seconds Watched'
+ warning_text: null
+- currency: null
+ d3format: null
+ description: null
+ expression: avg(video_duration)
+ extra: {}
+ metric_name: avg_video_length
+ metric_type: null
+ verbose_name: Avg Video Length (seconds)
+ warning_text: null
+- currency: null
+ d3format: null
+ description: null
+ expression: count(distinct video_id)
+ extra: {}
+ metric_name: video_count
+ metric_type: null
+ verbose_name: Number of Videos
+ warning_text: null
+- currency: null
+ d3format: null
+ description: null
+ expression: COUNT(*)
+ extra:
+ warning_markdown: ''
+ metric_name: count
+ metric_type: count
+ verbose_name: COUNT(*)
+ warning_text: null
+normalize_columns: true
+offset: 0
+params: null
+schema: '{{ DBT_PROFILE_TARGET_DATABASE }}'
+sql: |-
+ {% filter indent(width=2) %}{% include 'openedx-assets/queries/watched_video_duration.sql' %}{% endfilter %}
+table_name: watched_video_duration
+template_params: null
+uuid: 82cb6b56-c713-4933-93a0-9de15c266c4b
+version: 1.0.0
diff --git a/tutoraspects/templates/openedx-assets/queries/common_filters.sql b/tutoraspects/templates/openedx-assets/queries/common_filters.sql
index a2467c646..f26d48ea4 100644
--- a/tutoraspects/templates/openedx-assets/queries/common_filters.sql
+++ b/tutoraspects/templates/openedx-assets/queries/common_filters.sql
@@ -11,3 +11,15 @@
)
{% endif %}
{%- endraw %}
+
+{% raw -%}
+{% if filter_values("tag") != [] %}
+ and course_key in (
+ select course_key
+ from
+ {% endraw -%} {{ DBT_PROFILE_TARGET_DATABASE }}.most_recent_course_tags{%- raw %}
+ where
+ tag in (select replaceAll(arrayJoin({{ filter_values("tag") }}), '- ', ''))
+ )
+{% endif %}
+{%- endraw %}
diff --git a/tutoraspects/templates/openedx-assets/queries/course_information.sql b/tutoraspects/templates/openedx-assets/queries/course_information.sql
new file mode 100644
index 000000000..c6420396d
--- /dev/null
+++ b/tutoraspects/templates/openedx-assets/queries/course_information.sql
@@ -0,0 +1,27 @@
+select
+ fes.org as org,
+ cn.course_name as course_name,
+ course_run,
+ fes.actor_id as actor_id,
+ fes.enrollment_mode as enrollment_mode,
+ case
+ when flfc.emission_time >= subtractDays(now(), 7) then actor_id else null
+ end as active_learner,
+ tag as course_tag,
+ fes.course_key as course_key
+from {{ DBT_PROFILE_TARGET_DATABASE }}.fact_enrollment_status fes
+left join
+ {{ ASPECTS_XAPI_DATABASE }}.fact_learner_last_course_visit flfc
+ on fes.org = flfc.org
+ and fes.course_key = flfc.course_key
+ and fes.actor_id = flfc.actor_id
+left join
+ {{ ASPECTS_EVENT_SINK_DATABASE }}.course_names cn
+ on fes.org = cn.org
+ and fes.course_key = cn.course_key
+left join
+ {{ DBT_PROFILE_TARGET_DATABASE }}.most_recent_course_tags mrct
+ on mrct.course_key = fes.course_key
+where
+ enrollment_status = 'registered'
+ {% include 'openedx-assets/queries/common_filters.sql' %}
diff --git a/tutoraspects/templates/openedx-assets/queries/learner_performance.sql b/tutoraspects/templates/openedx-assets/queries/learner_performance.sql
new file mode 100644
index 000000000..6c7829470
--- /dev/null
+++ b/tutoraspects/templates/openedx-assets/queries/learner_performance.sql
@@ -0,0 +1,14 @@
+select
+ org,
+ course_key,
+ course_name,
+ course_run,
+ actor_id,
+ success,
+ attempts,
+ course_grade,
+ approving_state
+from {{ DBT_PROFILE_TARGET_DATABASE }}.fact_student_status
+left join {{ DBT_PROFILE_TARGET_DATABASE }}.int_problem_results
+using org, course_key, course_run, actor_id, course_name
+where 1 = 1 {% include 'openedx-assets/queries/common_filters.sql' %}
diff --git a/tutoraspects/templates/openedx-assets/queries/learner_performance_breakdown.sql b/tutoraspects/templates/openedx-assets/queries/learner_performance_breakdown.sql
new file mode 100644
index 000000000..595a33ebf
--- /dev/null
+++ b/tutoraspects/templates/openedx-assets/queries/learner_performance_breakdown.sql
@@ -0,0 +1,21 @@
+select
+ org,
+ actor_id,
+ course_name,
+ course_run,
+ approving_state,
+ case
+ when fllcv.emission_time >= subtractDays(now(), 7)
+ then 'active'
+ when
+ fllcv.emission_time < subtractDays(now(), 7)
+ and approving_state = 'failed'
+ and enrollment_status = 'registered'
+ then 'at-risk'
+ else 'other'
+ end as learner_status,
+ fss.course_key as course_key
+from {{ DBT_PROFILE_TARGET_DATABASE }}.fact_student_status fss
+left join {{ ASPECTS_XAPI_DATABASE }}.fact_learner_last_course_visit fllcv
+using org, course_key, actor_id
+where 1 = 1 {% include 'openedx-assets/queries/common_filters.sql' %}
diff --git a/tutoraspects/templates/openedx-assets/queries/tag_filter_dataset.sql b/tutoraspects/templates/openedx-assets/queries/tag_filter_dataset.sql
new file mode 100644
index 000000000..05bc2a308
--- /dev/null
+++ b/tutoraspects/templates/openedx-assets/queries/tag_filter_dataset.sql
@@ -0,0 +1,12 @@
+with
+ data as (
+ select
+ id,
+ case when parent = 0 then id else cast(parent as int) end as sort_order_1,
+ case when parent = 0 then 0 else 1 end as sort_order_2,
+ concat(repeat('- ', countMatches(lineage, ',')), value) as tag,
+ row_number() over (order by sort_order_1, sort_order_2, value) as rownum
+ from {{ ASPECTS_EVENT_SINK_DATABASE }}.most_recent_tags
+ )
+select id, rownum, tag
+from data
diff --git a/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql b/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql
new file mode 100644
index 000000000..413943797
--- /dev/null
+++ b/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql
@@ -0,0 +1,14 @@
+select
+ names.org as org,
+ names.course_key as course_key,
+ names.course_name as course_name,
+ names.course_run as course_run,
+ actor_id,
+ video_id,
+ video_duration,
+ watched_time,
+ rewatched_time
+from {{ ASPECTS_EVENT_SINK_DATABASE }}.watched_video_duration
+left join {{ ASPECTS_EVENT_SINK_DATABASE }}.course_names as names
+using org, course_key
+where 1 = 1 {% include 'openedx-assets/queries/common_filters.sql' %}