diff --git a/tutoraspects/plugin.py b/tutoraspects/plugin.py index d3668f49..f2d51417 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.1"), ("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/Dockerfile b/tutoraspects/templates/aspects/build/aspects-superset/Dockerfile index 1ebc30fd..a8c1bcae 100644 --- a/tutoraspects/templates/aspects/build/aspects-superset/Dockerfile +++ b/tutoraspects/templates/aspects/build/aspects-superset/Dockerfile @@ -3,7 +3,7 @@ # https://github.com/apache/superset/releases # https://github.com/apache/superset/blob/master/Dockerfile # https://superset.apache.org/docs/databases/installing-database-drivers -FROM apache/superset:4.0.1 +FROM apache/superset:4.0.2 USER root diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_b2fff8.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_b2fff8.yaml new file mode 100644 index 00000000..9829dfb4 --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_b2fff8.yaml @@ -0,0 +1,132 @@ +_file_name: Course_Info_b2fff8.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: [] + 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: 221 + 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: + - 3141 + datasource: 221__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: 1181 + 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: b2fff8a7-3ace-4075-9a3f-5fa5b99f81bb +version: 1.0.0 +viz_type: table diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_ccdd7d.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_ccdd7d.yaml new file mode 100644 index 00000000..98d55008 --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_ccdd7d.yaml @@ -0,0 +1,132 @@ +_file_name: Course_Info_ccdd7d.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: [] + 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: 221 + 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: + - 3141 + datasource: 221__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: 1381 + 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: ccdd7d98-4722-490b-a0b2-077380a7c7eb +version: 1.0.0 +viz_type: table diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_7eaf5b.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_7eaf5b.yaml new file mode 100644 index 00000000..10a5b8dc --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_7eaf5b.yaml @@ -0,0 +1,103 @@ +_file_name: Enrollment_Counts_7eaf5b.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 + 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: 221 + 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: + - 3141 + datasource: 221__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: 161 + 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: 7eaf5bc2-0067-424b-a50b-607cf54c086a +version: 1.0.0 +viz_type: pivot_table_v2 diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_8230a3.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_8230a3.yaml new file mode 100644 index 00000000..97ab78eb --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_8230a3.yaml @@ -0,0 +1,103 @@ +_file_name: Enrollment_Counts_8230a3.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 + 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: 221 + 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: + - 3141 + datasource: 221__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: 1081 + 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: 8230a366-957d-4667-a2ff-3cbcb2f25f60 +version: 1.0.0 +viz_type: pivot_table_v2 diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_Breakdown_b73b0a.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_Breakdown_b73b0a.yaml new file mode 100644 index 00000000..36bf9a8d --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_Breakdown_b73b0a.yaml @@ -0,0 +1,157 @@ +_file_name: Learner_Performance_Breakdown_b73b0a.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 + contributionMode: null + extra_form_data: {} + groupby: [] + legendMargin: null + legendOrientation: top + legendType: scroll + metrics: + - count + - passed + - active + - at_risk + minorTicks: false + 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 + tooltipTimeFormat: smart_date + truncateXAxis: false + truncate_metric: false + viz_type: echarts_timeseries_bar + xAxisLabelRotation: 0 + x_axis: course_name + 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 + zoomable: false +query_context: + datasource: + id: 464 + 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 + contributionMode: null + dashboards: + - 3441 + datasource: 464__table + extra_form_data: {} + force: false + groupby: [] + legendMargin: null + legendOrientation: top + legendType: scroll + metrics: + - count + - passed + - active + - at_risk + minorTicks: false + 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: 1504 + sort_series_ascending: true + sort_series_type: name + stack: null + tooltipTimeFormat: smart_date + truncateXAxis: false + truncate_metric: false + viz_type: echarts_timeseries_bar + xAxisLabelRotation: 0 + x_axis: course_name + 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 + 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: b73b0a5c-4861-402e-a39c-d73333a4d911 +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_d414b1.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_Breakdown_d414b1.yaml new file mode 100644 index 00000000..43f8b460 --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_Breakdown_d414b1.yaml @@ -0,0 +1,169 @@ +_file_name: Learner_Performance_Breakdown_d414b1.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 + contributionMode: null + extra_form_data: {} + groupby: [] + legendMargin: 0 + legendOrientation: top + legendType: scroll + metrics: + - passed + - count + - at_risk + - active + minorTicks: false + 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 + tooltipTimeFormat: smart_date + truncateXAxis: false + truncate_metric: true + viz_type: echarts_timeseries_bar + xAxisLabelRotation: 0 + x_axis: course_run + 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 + zoomable: false +query_context: + datasource: + id: 464 + 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 + contributionMode: null + dashboards: + - 3441 + datasource: 464__table + extra_form_data: {} + force: false + groupby: [] + legendMargin: 0 + legendOrientation: top + legendType: scroll + metrics: + - passed + - count + - at_risk + - active + minorTicks: false + 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: 1505 + sort_series_ascending: true + sort_series_type: name + stack: null + timeseries_limit_metric: null + tooltipTimeFormat: smart_date + truncateXAxis: false + truncate_metric: true + viz_type: echarts_timeseries_bar + xAxisLabelRotation: 0 + x_axis: course_run + 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 + 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: d414b144-467b-456b-b899-9cfb3579faba +version: 1.0.0 +viz_type: echarts_timeseries_bar diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_b0e170.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_b0e170.yaml new file mode 100644 index 00000000..5b7ae82b --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_b0e170.yaml @@ -0,0 +1,145 @@ +_file_name: Learner_Performance_b0e170.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 + 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: 61 + 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: + - 3141 + datasource: 61__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: 1507 + 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: b0e170ce-26f1-4452-a3c0-49b41fa6e529 +version: 1.0.0 +viz_type: table diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_b518f3.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_b518f3.yaml new file mode 100644 index 00000000..cdb62bff --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_b518f3.yaml @@ -0,0 +1,122 @@ +_file_name: Learner_Performance_b518f3.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 + 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: 61 + 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: + - 3141 + datasource: 61__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: 1506 + 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: b518f341-9ed4-4c23-bb88-6c1d497aa260 +version: 1.0.0 +viz_type: table diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_5b00f7.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_5b00f7.yaml new file mode 100644 index 00000000..caf733e6 --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_5b00f7.yaml @@ -0,0 +1,107 @@ +_file_name: Video_Engagement_5b00f7.yaml +cache_timeout: null +certification_details: null +certified_by: null +dataset_uuid: 82cb6b56-c713-4933-93a0-9de15c266c4b +description: null +params: + adhoc_filters: [] + all_columns: [] + annotation_layers: [] + 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: 746 + type: table + force: false + form_data: + adhoc_filters: [] + all_columns: [] + annotation_layers: [] + color_pn: true + column_config: + rewatched_percent: + d3NumberFormat: ',.1%' + watched_percent: + d3NumberFormat: ',.1%' + conditional_formatting: [] + datasource: 746__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: 1467 + 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: 5b00f792-233c-4ee6-9411-7df49f4b5061 +version: 1.0.0 +viz_type: table diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_6b7610.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_6b7610.yaml new file mode 100644 index 00000000..fd1a3853 --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_6b7610.yaml @@ -0,0 +1,107 @@ +_file_name: Video_Engagement_6b7610.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: 746 + 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: + - 3141 + datasource: 746__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: 1508 + 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: 6b7610a7-41d0-4d14-be81-62a5a8f22d62 +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 00000000..416f79c0 --- /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: + '1467': + crossFilters: + chartsInScope: + - 1500 + - 1501 + - 1502 + - 1503 + - 1504 + - 1505 + - 1506 + - 1507 + - 1508 + scope: global + id: 1467 + '1500': + crossFilters: + chartsInScope: + - 1467 + - 1501 + - 1502 + - 1503 + - 1504 + - 1505 + - 1506 + - 1507 + - 1508 + scope: global + id: 1500 + '1501': + crossFilters: + chartsInScope: + - 1467 + - 1500 + - 1502 + - 1503 + - 1504 + - 1505 + - 1506 + - 1507 + - 1508 + scope: global + id: 1501 + '1502': + crossFilters: + chartsInScope: + - 1467 + - 1500 + - 1501 + - 1503 + - 1504 + - 1505 + - 1506 + - 1507 + - 1508 + scope: global + id: 1502 + '1503': + crossFilters: + chartsInScope: + - 1467 + - 1500 + - 1501 + - 1502 + - 1504 + - 1505 + - 1506 + - 1507 + - 1508 + scope: global + id: 1503 + '1504': + crossFilters: + chartsInScope: + - 1467 + - 1500 + - 1501 + - 1502 + - 1503 + - 1505 + - 1506 + - 1507 + - 1508 + scope: global + id: 1504 + '1505': + crossFilters: + chartsInScope: + - 1467 + - 1500 + - 1501 + - 1502 + - 1503 + - 1504 + - 1506 + - 1507 + - 1508 + scope: global + id: 1505 + '1506': + crossFilters: + chartsInScope: + - 1467 + - 1500 + - 1501 + - 1502 + - 1503 + - 1504 + - 1505 + - 1507 + - 1508 + scope: global + id: 1506 + '1507': + crossFilters: + chartsInScope: + - 1467 + - 1500 + - 1501 + - 1502 + - 1503 + - 1504 + - 1505 + - 1506 + - 1508 + scope: global + id: 1507 + '1508': + crossFilters: + chartsInScope: + - 1467 + - 1500 + - 1501 + - 1502 + - 1503 + - 1504 + - 1505 + - 1506 + - 1507 + scope: global + id: 1508 + 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: + '1504': true + '1505': true + '1506': true + '1507': true + global_chart_configuration: + chartsInScope: + - 1467 + - 1500 + - 1501 + - 1502 + - 1503 + - 1504 + - 1505 + - 1506 + - 1507 + - 1508 + 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-1467-1: + children: [] + id: CHART-explore-1467-1 + meta: + chartId: 1467 + height: 50 + sliceName: Video Engagement + uuid: 5b00f792-233c-4ee6-9411-7df49f4b5061 + width: 12 + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-J31MdXj-sa + - ROW-dAYfW3JOym + type: CHART + CHART-explore-1500-1: + children: [] + id: CHART-explore-1500-1 + meta: + chartId: 1500 + height: 50 + sliceName: Course Info + uuid: b2fff8a7-3ace-4075-9a3f-5fa5b99f81bb + width: 12 + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-J31MdXj-sa + - ROW-Ixcwhxrj1 + type: CHART + CHART-explore-1501-1: + children: [] + id: CHART-explore-1501-1 + meta: + chartId: 1501 + height: 50 + sliceName: Course Info + uuid: ccdd7d98-4722-490b-a0b2-077380a7c7eb + width: 12 + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-GuHDMLqRC + - ROW-_txCTpD7V + type: CHART + CHART-explore-1502-1: + children: [] + id: CHART-explore-1502-1 + meta: + chartId: 1502 + height: 50 + sliceName: Enrollment Counts + uuid: 7eaf5bc2-0067-424b-a50b-607cf54c086a + width: 12 + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-J31MdXj-sa + - ROW-RgmR2MvEK + type: CHART + CHART-explore-1503-1: + children: [] + id: CHART-explore-1503-1 + meta: + chartId: 1503 + height: 50 + sliceName: Enrollment Counts + uuid: 8230a366-957d-4667-a2ff-3cbcb2f25f60 + width: 12 + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-GuHDMLqRC + - ROW-bpejHEOdb + type: CHART + CHART-explore-1504-1: + children: [] + id: CHART-explore-1504-1 + meta: + chartId: 1504 + height: 50 + sliceName: Learner Performance Breakdown + uuid: b73b0a5c-4861-402e-a39c-d73333a4d911 + width: 12 + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-J31MdXj-sa + - ROW-dwdD7OF9Z + type: CHART + CHART-explore-1505-1: + children: [] + id: CHART-explore-1505-1 + meta: + chartId: 1505 + height: 50 + sliceName: Learner Performance Breakdown + uuid: d414b144-467b-456b-b899-9cfb3579faba + width: 12 + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-GuHDMLqRC + - ROW-XddLr_99f + type: CHART + CHART-explore-1506-1: + children: [] + id: CHART-explore-1506-1 + meta: + chartId: 1506 + height: 50 + sliceName: Learner Performance + uuid: b518f341-9ed4-4c23-bb88-6c1d497aa260 + width: 12 + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-J31MdXj-sa + - ROW-hgxCVRi9M + type: CHART + CHART-explore-1507-1: + children: [] + id: CHART-explore-1507-1 + meta: + chartId: 1507 + height: 50 + sliceName: Learner Performance + uuid: b0e170ce-26f1-4452-a3c0-49b41fa6e529 + width: 12 + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-GuHDMLqRC + - ROW-kZVNsJuoh + type: CHART + CHART-explore-1508-1: + children: [] + id: CHART-explore-1508-1 + meta: + chartId: 1508 + height: 50 + sliceName: Video Engagement + uuid: 6b7610a7-41d0-4d14-be81-62a5a8f22d62 + width: 12 + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-GuHDMLqRC + - ROW-hKzUoke28 + 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--qwRXTzHx: + children: + - CHART-explore-1507-1 + id: ROW--qwRXTzHx + meta: + background: BACKGROUND_TRANSPARENT + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-GuHDMLqRC + type: ROW + ROW-Ixcwhxrj1: + children: + - CHART-explore-1500-1 + id: ROW-Ixcwhxrj1 + meta: + background: BACKGROUND_TRANSPARENT + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-J31MdXj-sa + type: ROW + ROW-RgmR2MvEK: + children: + - CHART-explore-1502-1 + id: ROW-RgmR2MvEK + meta: + background: BACKGROUND_TRANSPARENT + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-J31MdXj-sa + type: ROW + ROW-XddLr_99f: + children: + - CHART-explore-1505-1 + id: ROW-XddLr_99f + meta: + background: BACKGROUND_TRANSPARENT + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-GuHDMLqRC + type: ROW + ROW-_txCTpD7V: + children: + - CHART-explore-1501-1 + id: ROW-_txCTpD7V + meta: + background: BACKGROUND_TRANSPARENT + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-GuHDMLqRC + type: ROW + ROW-bpejHEOdb: + children: + - CHART-explore-1503-1 + id: ROW-bpejHEOdb + meta: + background: BACKGROUND_TRANSPARENT + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-GuHDMLqRC + type: ROW + ROW-dAYfW3JOym: + children: + - CHART-explore-1467-1 + id: ROW-dAYfW3JOym + meta: + '0': ROOT_ID + '1': TABS-6vozRyRn2o + background: BACKGROUND_TRANSPARENT + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-J31MdXj-sa + type: ROW + ROW-dwdD7OF9Z: + children: + - CHART-explore-1504-1 + id: ROW-dwdD7OF9Z + meta: + background: BACKGROUND_TRANSPARENT + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-J31MdXj-sa + type: ROW + ROW-hgxCVRi9M: + children: + - CHART-explore-1506-1 + id: ROW-hgxCVRi9M + meta: + background: BACKGROUND_TRANSPARENT + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-J31MdXj-sa + type: ROW + ROW-iMG3T4uBu: + children: + - CHART-explore-1508-1 + id: ROW-iMG3T4uBu + meta: + background: BACKGROUND_TRANSPARENT + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-GuHDMLqRC + type: ROW + TAB-GuHDMLqRC: + children: + - ROW-_txCTpD7V + - ROW-bpejHEOdb + - ROW-XddLr_99f + - ROW--qwRXTzHx + - ROW-iMG3T4uBu + 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-Ixcwhxrj1 + - ROW-RgmR2MvEK + - ROW-dwdD7OF9Z + - ROW-hgxCVRi9M + - ROW-dAYfW3JOym + 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 00000000..a78b564e --- /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 00000000..0083cfde --- /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 00000000..50def381 --- /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 00000000..563dc484 --- /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 00000000..6edec5e1 --- /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 a2467c64..f26d48ea 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 00000000..c6420396 --- /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 00000000..6c782947 --- /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 00000000..595a33eb --- /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 00000000..05bc2a30 --- /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 00000000..9ad623f4 --- /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_XAPI_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' %}