diff --git a/tutoraspects/plugin.py b/tutoraspects/plugin.py index d3668f492..5da88b25e 100644 --- a/tutoraspects/plugin.py +++ b/tutoraspects/plugin.py @@ -375,8 +375,8 @@ # DBT_PROFILE_* settings get passed into the dbt_profile.yml file. # 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_REPOSITORY", "https://github.com/saraburns1/aspects-dbt"), + ("DBT_BRANCH", "coursecompare"), ("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..4dae7be9a --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_a433e3.yaml @@ -0,0 +1,132 @@ +_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: [] + 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..80fd76a7b --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_e0098c.yaml @@ -0,0 +1,224 @@ +_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: [] + 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: + - aggregate: COUNT_DISTINCT + column: + advanced_data_type: null + certification_details: null + certified_by: null + column_name: actor_id + description: null + expression: null + filterable: true + groupby: true + id: 7901 + is_certified: false + is_dttm: false + python_date_format: null + type: String + type_generic: 1 + verbose_name: null + warning_markdown: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Current Enrollees + optionName: metric_j4kvubgy7m_afs23ho378e + sqlExpression: null + - 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: + 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: + - aggregate: COUNT_DISTINCT + column: + advanced_data_type: null + certification_details: null + certified_by: null + column_name: actor_id + description: null + expression: null + filterable: true + groupby: true + id: 7901 + is_certified: false + is_dttm: false + python_date_format: null + type: String + type_generic: 1 + verbose_name: null + warning_markdown: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Current Enrollees + optionName: metric_j4kvubgy7m_afs23ho378e + sqlExpression: null + - 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: 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: + - aggregate: COUNT_DISTINCT + column: + advanced_data_type: null + certification_details: null + certified_by: null + column_name: actor_id + description: null + expression: null + filterable: true + groupby: true + id: 7901 + is_certified: false + is_dttm: false + python_date_format: null + type: String + type_generic: 1 + verbose_name: null + warning_markdown: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Current Enrollees + optionName: metric_j4kvubgy7m_afs23ho378e + sqlExpression: null + - active_count + - tag_list + order_desc: false + orderby: + - - aggregate: COUNT_DISTINCT + column: + advanced_data_type: null + certification_details: null + certified_by: null + column_name: actor_id + description: null + expression: null + filterable: true + groupby: true + id: 7901 + is_certified: false + is_dttm: false + python_date_format: null + type: String + type_generic: 1 + verbose_name: null + warning_markdown: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Current Enrollees + optionName: metric_j4kvubgy7m_afs23ho378e + sqlExpression: null + - 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..ce00a9f8b --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_2f2af8.yaml @@ -0,0 +1,195 @@ +_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 + colOrder: key_a_to_z + colSubTotals: false + conditional_formatting: [] + date_format: smart_date + extra_form_data: {} + groupbyColumns: + - enrollment_mode + groupbyRows: + - course_name + metrics: + - aggregate: COUNT + column: + advanced_data_type: null + certification_details: null + certified_by: null + column_name: actor_id + description: null + expression: null + filterable: true + groupby: true + id: 7758 + is_certified: false + is_dttm: false + python_date_format: null + type: String + type_generic: 1 + verbose_name: null + warning_markdown: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Enrollee Count + optionName: metric_s19whrov34m_h70zr1gflp4 + sqlExpression: null + 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: + - aggregate: COUNT + column: + advanced_data_type: null + certification_details: null + certified_by: null + column_name: actor_id + description: null + expression: null + filterable: true + groupby: true + id: 7758 + is_certified: false + is_dttm: false + python_date_format: null + type: String + type_generic: 1 + verbose_name: null + warning_markdown: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Enrollee Count + optionName: metric_s19whrov34m_h70zr1gflp4 + sqlExpression: null + 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: + - aggregate: COUNT + column: + advanced_data_type: null + certification_details: null + certified_by: null + column_name: actor_id + description: null + expression: null + filterable: true + groupby: true + id: 7758 + is_certified: false + is_dttm: false + python_date_format: null + type: String + type_generic: 1 + verbose_name: null + warning_markdown: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Enrollee Count + optionName: metric_s19whrov34m_h70zr1gflp4 + sqlExpression: null + order_desc: true + orderby: + - - aggregate: COUNT + column: + advanced_data_type: null + certification_details: null + certified_by: null + column_name: actor_id + description: null + expression: null + filterable: true + groupby: true + id: 7758 + is_certified: false + is_dttm: false + python_date_format: null + type: String + type_generic: 1 + verbose_name: null + warning_markdown: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Enrollee Count + optionName: metric_s19whrov34m_h70zr1gflp4 + sqlExpression: null + - 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..5f04d9b26 --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_bd37be.yaml @@ -0,0 +1,195 @@ +_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 + colOrder: key_a_to_z + colSubTotals: false + conditional_formatting: [] + date_format: smart_date + extra_form_data: {} + groupbyColumns: + - enrollment_mode + groupbyRows: + - course_run + metrics: + - aggregate: COUNT + column: + advanced_data_type: null + certification_details: null + certified_by: null + column_name: actor_id + description: null + expression: null + filterable: true + groupby: true + id: 7758 + is_certified: false + is_dttm: false + python_date_format: null + type: String + type_generic: 1 + verbose_name: null + warning_markdown: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Enrollee Count + optionName: metric_s19whrov34m_h70zr1gflp4 + sqlExpression: null + 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: + - aggregate: COUNT + column: + advanced_data_type: null + certification_details: null + certified_by: null + column_name: actor_id + description: null + expression: null + filterable: true + groupby: true + id: 7758 + is_certified: false + is_dttm: false + python_date_format: null + type: String + type_generic: 1 + verbose_name: null + warning_markdown: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Enrollee Count + optionName: metric_s19whrov34m_h70zr1gflp4 + sqlExpression: null + 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: + - aggregate: COUNT + column: + advanced_data_type: null + certification_details: null + certified_by: null + column_name: actor_id + description: null + expression: null + filterable: true + groupby: true + id: 7758 + is_certified: false + is_dttm: false + python_date_format: null + type: String + type_generic: 1 + verbose_name: null + warning_markdown: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Enrollee Count + optionName: metric_s19whrov34m_h70zr1gflp4 + sqlExpression: null + order_desc: false + orderby: + - - aggregate: COUNT + column: + advanced_data_type: null + certification_details: null + certified_by: null + column_name: actor_id + description: null + expression: null + filterable: true + groupby: true + id: 7758 + is_certified: false + is_dttm: false + python_date_format: null + type: String + type_generic: 1 + verbose_name: null + warning_markdown: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Enrollee Count + optionName: metric_s19whrov34m_h70zr1gflp4 + sqlExpression: null + - 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..4183a273c --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_4e48b8.yaml @@ -0,0 +1,122 @@ +_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 + 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..adbc9e23d --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_dde44a.yaml @@ -0,0 +1,145 @@ +_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 + 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_e05c6b.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_e05c6b.yaml new file mode 100644 index 000000000..f55c40876 --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_e05c6b.yaml @@ -0,0 +1,416 @@ +_file_name: Video_Engagement_e05c6b.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: + '% Video Seconds Re-Watched': + d3NumberFormat: ',.1%' + '% Video Seconds Watched': + d3NumberFormat: ',.1%' + conditional_formatting: [] + extra_form_data: {} + groupby: + - course_name + metrics: + - aggregate: AVG + column: + advanced_data_type: null + changed_on: '2024-08-28T18:28:32' + column_name: watched_percent + created_on: '2024-08-28T18:28:32' + description: null + expression: case when rewatched = 0 then watched_duration else 0 end/video_duration + extra: '{}' + filterable: true + groupby: true + id: 7800 + is_active: true + is_dttm: false + python_date_format: null + type: null + type_generic: null + uuid: 312f07df-6697-449a-8abb-34d72a237075 + verbose_name: '% Video Seconds Watched' + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: '% Video Seconds Watched' + optionName: metric_r99cysqsd4_7y7sodnz76x + sqlExpression: null + - aggregate: AVG + column: + advanced_data_type: null + changed_on: '2024-08-28T18:28:32' + column_name: rewatched_percent + created_on: '2024-08-28T18:28:32' + description: null + expression: case when rewatched = 1 then watched_duration else 0 end/video_duration + extra: '{}' + filterable: true + groupby: true + id: 7799 + is_active: true + is_dttm: false + python_date_format: null + type: null + type_generic: null + uuid: 1514b517-9eb6-4e69-957c-7bf3c79a83b8 + verbose_name: '% Video Seconds Re-Watched' + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: '% Video Seconds Re-Watched' + optionName: metric_l9dkjvflsqq_fxiymsitu7e + sqlExpression: null + - aggregate: AVG + column: + advanced_data_type: null + changed_on: '2024-08-28T15:22:03' + column_name: count_videos + created_on: '2024-08-28T15:22:03' + description: null + expression: null + extra: '{}' + filterable: true + groupby: true + id: 7780 + is_active: true + is_dttm: false + python_date_format: null + type: UInt64 + type_generic: 0 + uuid: aefe5690-0f64-4c48-b38f-18c2a88abeb0 + verbose_name: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Number of Videos + optionName: metric_hjye74a0is8_yc6bswefuxl + sqlExpression: null + - aggregate: AVG + column: + advanced_data_type: null + changed_on: '2024-08-28T15:22:03' + column_name: avg_video_length + created_on: '2024-08-28T15:22:03' + description: null + expression: null + extra: '{}' + filterable: true + groupby: true + id: 7778 + is_active: true + is_dttm: false + python_date_format: null + type: Float64 + type_generic: 0 + uuid: d1bff67f-2ce1-421e-be5e-b5a9ac5e5b68 + verbose_name: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Avg Video Length (seconds) + optionName: metric_svqegmzro_bmnugdrle86 + sqlExpression: null + 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: 647 + type: table + force: false + form_data: + adhoc_filters: [] + all_columns: [] + color_pn: true + column_config: + '% Video Seconds Re-Watched': + d3NumberFormat: ',.1%' + '% Video Seconds Watched': + d3NumberFormat: ',.1%' + conditional_formatting: [] + dashboards: + - 161 + datasource: 647__table + extra_form_data: {} + force: false + groupby: + - course_name + metrics: + - aggregate: AVG + column: + advanced_data_type: null + changed_on: '2024-08-28T18:28:32' + column_name: watched_percent + created_on: '2024-08-28T18:28:32' + description: null + expression: case when rewatched = 0 then watched_duration else 0 end/video_duration + extra: '{}' + filterable: true + groupby: true + id: 7800 + is_active: true + is_dttm: false + python_date_format: null + type: null + type_generic: null + uuid: 312f07df-6697-449a-8abb-34d72a237075 + verbose_name: '% Video Seconds Watched' + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: '% Video Seconds Watched' + optionName: metric_r99cysqsd4_7y7sodnz76x + sqlExpression: null + - aggregate: AVG + column: + advanced_data_type: null + changed_on: '2024-08-28T18:28:32' + column_name: rewatched_percent + created_on: '2024-08-28T18:28:32' + description: null + expression: case when rewatched = 1 then watched_duration else 0 end/video_duration + extra: '{}' + filterable: true + groupby: true + id: 7799 + is_active: true + is_dttm: false + python_date_format: null + type: null + type_generic: null + uuid: 1514b517-9eb6-4e69-957c-7bf3c79a83b8 + verbose_name: '% Video Seconds Re-Watched' + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: '% Video Seconds Re-Watched' + optionName: metric_l9dkjvflsqq_fxiymsitu7e + sqlExpression: null + - aggregate: AVG + column: + advanced_data_type: null + changed_on: '2024-08-28T15:22:03' + column_name: count_videos + created_on: '2024-08-28T15:22:03' + description: null + expression: null + extra: '{}' + filterable: true + groupby: true + id: 7780 + is_active: true + is_dttm: false + python_date_format: null + type: UInt64 + type_generic: 0 + uuid: aefe5690-0f64-4c48-b38f-18c2a88abeb0 + verbose_name: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Number of Videos + optionName: metric_hjye74a0is8_yc6bswefuxl + sqlExpression: null + - aggregate: AVG + column: + advanced_data_type: null + changed_on: '2024-08-28T15:22:03' + column_name: avg_video_length + created_on: '2024-08-28T15:22:03' + description: null + expression: null + extra: '{}' + filterable: true + groupby: true + id: 7778 + is_active: true + is_dttm: false + python_date_format: null + type: Float64 + type_generic: 0 + uuid: d1bff67f-2ce1-421e-be5e-b5a9ac5e5b68 + verbose_name: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Avg Video Length (seconds) + optionName: metric_svqegmzro_bmnugdrle86 + sqlExpression: null + 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: 1277 + table_timestamp_format: smart_date + temporal_columns_lookup: {} + viz_type: table + queries: + - annotation_layers: [] + applied_time_extras: {} + columns: + - course_name + custom_form_data: {} + custom_params: {} + extras: + having: '' + where: '' + filters: [] + metrics: + - aggregate: AVG + column: + advanced_data_type: null + changed_on: '2024-08-28T18:28:32' + column_name: watched_percent + created_on: '2024-08-28T18:28:32' + description: null + expression: case when rewatched = 0 then watched_duration else 0 end/video_duration + extra: '{}' + filterable: true + groupby: true + id: 7800 + is_active: true + is_dttm: false + python_date_format: null + type: null + type_generic: null + uuid: 312f07df-6697-449a-8abb-34d72a237075 + verbose_name: '% Video Seconds Watched' + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: '% Video Seconds Watched' + optionName: metric_r99cysqsd4_7y7sodnz76x + sqlExpression: null + - aggregate: AVG + column: + advanced_data_type: null + changed_on: '2024-08-28T18:28:32' + column_name: rewatched_percent + created_on: '2024-08-28T18:28:32' + description: null + expression: case when rewatched = 1 then watched_duration else 0 end/video_duration + extra: '{}' + filterable: true + groupby: true + id: 7799 + is_active: true + is_dttm: false + python_date_format: null + type: null + type_generic: null + uuid: 1514b517-9eb6-4e69-957c-7bf3c79a83b8 + verbose_name: '% Video Seconds Re-Watched' + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: '% Video Seconds Re-Watched' + optionName: metric_l9dkjvflsqq_fxiymsitu7e + sqlExpression: null + - aggregate: AVG + column: + advanced_data_type: null + changed_on: '2024-08-28T15:22:03' + column_name: count_videos + created_on: '2024-08-28T15:22:03' + description: null + expression: null + extra: '{}' + filterable: true + groupby: true + id: 7780 + is_active: true + is_dttm: false + python_date_format: null + type: UInt64 + type_generic: 0 + uuid: aefe5690-0f64-4c48-b38f-18c2a88abeb0 + verbose_name: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Number of Videos + optionName: metric_hjye74a0is8_yc6bswefuxl + sqlExpression: null + - aggregate: AVG + column: + advanced_data_type: null + changed_on: '2024-08-28T15:22:03' + column_name: avg_video_length + created_on: '2024-08-28T15:22:03' + description: null + expression: null + extra: '{}' + filterable: true + groupby: true + id: 7778 + is_active: true + is_dttm: false + python_date_format: null + type: Float64 + type_generic: 0 + uuid: d1bff67f-2ce1-421e-be5e-b5a9ac5e5b68 + verbose_name: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Avg Video Length (seconds) + optionName: metric_svqegmzro_bmnugdrle86 + sqlExpression: null + order_desc: true + orderby: + - - aggregate: AVG + column: + advanced_data_type: null + changed_on: '2024-08-28T18:28:32' + column_name: watched_percent + created_on: '2024-08-28T18:28:32' + description: null + expression: case when rewatched = 0 then watched_duration else 0 end/video_duration + extra: '{}' + filterable: true + groupby: true + id: 7800 + is_active: true + is_dttm: false + python_date_format: null + type: null + type_generic: null + uuid: 312f07df-6697-449a-8abb-34d72a237075 + verbose_name: '% Video Seconds Watched' + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: '% Video Seconds Watched' + optionName: metric_r99cysqsd4_7y7sodnz76x + sqlExpression: null + - false + post_processing: [] + row_limit: 50000 + series_limit: 0 + url_params: {} + result_format: json + result_type: full +slice_name: Video Engagement +uuid: e05c6b26-c048-4c98-b91e-d904d754adde +version: 1.0.0 +viz_type: table diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_e26ecc.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_e26ecc.yaml new file mode 100644 index 000000000..499aba6e6 --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_e26ecc.yaml @@ -0,0 +1,140 @@ +_file_name: Video_Engagement_e26ecc.yaml +cache_timeout: null +certification_details: null +certified_by: null +dataset_uuid: 82cb6b56-c713-4933-93a0-9de15c266c4b +description: null +params: + adhoc_filters: + - clause: WHERE + comparator: No filter + expressionType: SIMPLE + operator: TEMPORAL_RANGE + subject: started_at + all_columns: [] + annotation_layers: [] + color_pn: true + column_config: + '% Video Seconds Re-Watched': + d3NumberFormat: ',.1%' + '% Video Seconds Watched': + d3NumberFormat: ',.1%' + Avg Video Length: + d3NumberFormat: SMART_NUMBER + conditional_formatting: [] + extra_form_data: {} + groupby: + - course_run + - course_name + metrics: + - aggregate: AVG + column: + advanced_data_type: null + certification_details: null + certified_by: null + column_name: watched_percent + description: null + expression: case when rewatched = 0 then watched_duration else 0 end/video_duration + filterable: true + groupby: true + id: 7800 + is_certified: false + is_dttm: false + python_date_format: null + type: null + type_generic: null + verbose_name: '% Video Seconds Watched' + warning_markdown: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: '% Video Seconds Watched' + optionName: metric_zaptr05wu3_gxjyutcn88p + sqlExpression: null + - aggregate: AVG + column: + advanced_data_type: null + certification_details: null + certified_by: null + column_name: rewatched_percent + description: null + expression: case when rewatched = 1 then watched_duration else 0 end/video_duration + filterable: true + groupby: true + id: 7799 + is_certified: false + is_dttm: false + python_date_format: null + type: null + type_generic: null + verbose_name: '% Video Seconds Re-Watched' + warning_markdown: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: '% Video Seconds Re-Watched' + optionName: metric_zzvs0afhkk_wgh07ya9p7g + sqlExpression: null + - aggregate: AVG + column: + advanced_data_type: null + certification_details: null + certified_by: null + column_name: count_videos + description: null + expression: null + filterable: true + groupby: true + id: 7780 + is_certified: false + is_dttm: false + python_date_format: null + type: UInt64 + type_generic: 0 + verbose_name: null + warning_markdown: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Number of Videos + optionName: metric_hjye74a0is8_yc6bswefuxl + sqlExpression: null + - aggregate: AVG + column: + advanced_data_type: null + certification_details: null + certified_by: null + column_name: avg_video_length + description: null + expression: null + filterable: true + groupby: true + id: 7778 + is_certified: false + is_dttm: false + python_date_format: null + type: Float64 + type_generic: 0 + verbose_name: null + warning_markdown: null + datasourceWarning: false + expressionType: SIMPLE + hasCustomLabel: true + label: Avg Video Length (seconds) + optionName: metric_svqegmzro_bmnugdrle86 + sqlExpression: null + 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: null +slice_name: Video Engagement +uuid: e26ecce9-32cf-4ac5-8706-14dd9f8e0e42 +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..6aa6943f3 --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/dashboards/Course_Comparison_Dashboard.yaml @@ -0,0 +1,670 @@ +_file_name: Course_Comparison_Dashboard.yaml +_roles: +- '{{ SUPERSET_ROLES_MAPPING.instructor }}' +certification_details: null +certified_by: null +css: '' +dashboard_title: Course Comparison Dashboard +description: null +metadata: + chart_configuration: + '1273': + crossFilters: + chartsInScope: + - 1274 + - 1275 + - 1276 + - 1277 + - 1278 + - 1279 + - 1292 + - 1294 + - 1295 + scope: global + id: 1273 + '1274': + crossFilters: + chartsInScope: + - 1273 + - 1275 + - 1276 + - 1277 + - 1278 + - 1279 + - 1292 + - 1294 + - 1295 + scope: global + id: 1274 + '1275': + crossFilters: + chartsInScope: + - 1273 + - 1274 + - 1276 + - 1277 + - 1278 + - 1279 + - 1292 + - 1294 + - 1295 + scope: global + id: 1275 + '1276': + crossFilters: + chartsInScope: + - 1273 + - 1274 + - 1275 + - 1277 + - 1278 + - 1279 + - 1292 + - 1294 + - 1295 + scope: global + id: 1276 + '1277': + crossFilters: + chartsInScope: + - 1273 + - 1274 + - 1275 + - 1276 + - 1278 + - 1279 + - 1292 + - 1294 + - 1295 + scope: global + id: 1277 + '1278': + crossFilters: + chartsInScope: + - 1273 + - 1274 + - 1275 + - 1276 + - 1277 + - 1279 + - 1292 + - 1294 + - 1295 + scope: global + id: 1278 + '1279': + crossFilters: + chartsInScope: + - 1273 + - 1274 + - 1275 + - 1276 + - 1277 + - 1278 + - 1292 + - 1294 + - 1295 + scope: global + id: 1279 + '1292': + crossFilters: + chartsInScope: + - 1273 + - 1274 + - 1275 + - 1276 + - 1277 + - 1278 + - 1279 + - 1294 + - 1295 + scope: global + id: 1292 + '1294': + crossFilters: + chartsInScope: [] + scope: + excluded: + - 1294 + rootPath: [] + id: 1294 + '1295': + crossFilters: + chartsInScope: + - 1273 + - 1274 + - 1275 + - 1276 + - 1277 + - 1278 + - 1279 + - 1292 + - 1294 + scope: global + id: 1295 + 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: + '1275': true + '1276': true + '1279': true + '1292': true + global_chart_configuration: + chartsInScope: + - 1273 + - 1274 + - 1275 + - 1276 + - 1277 + - 1278 + - 1279 + - 1292 + - 1294 + - 1295 + 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: + - 1273 + - 1274 + - 1275 + - 1276 + - 1277 + - 1278 + - 1279 + - 1292 + 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: + - TAB-J31MdXj-sa + - TAB-GuHDMLqRC + 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: {} + timed_refresh_immune_slices: [] +position: + CHART-explore-1273-1: + children: [] + id: CHART-explore-1273-1 + meta: + chartId: 1273 + 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: 1274 + 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: 1275 + 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: 1276 + 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-1277-1: + children: [] + id: CHART-explore-1277-1 + meta: + chartId: 1277 + height: 50 + sliceName: Video Engagement + uuid: e05c6b26-c048-4c98-b91e-d904d754adde + width: 12 + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-J31MdXj-sa + - ROW-eosCHWz8o + type: CHART + CHART-explore-1278-1: + children: [] + id: CHART-explore-1278-1 + meta: + chartId: 1278 + height: 50 + sliceName: Video Engagement + uuid: e26ecce9-32cf-4ac5-8706-14dd9f8e0e42 + width: 12 + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-GuHDMLqRC + - ROW-7fC-nHawN + type: CHART + CHART-explore-1279-1: + children: [] + id: CHART-explore-1279-1 + meta: + chartId: 1279 + 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: 1292 + 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: 1294 + height: 49 + sliceName: Enrollment Count + 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: 1295 + height: 49 + sliceName: Enrollment Count + uuid: bd37be7f-6672-4dca-80ae-a54f69d169da + width: 12 + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-GuHDMLqRC + - ROW-17CIe_GHN + 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-7fC-nHawN: + children: + - CHART-explore-1278-1 + id: ROW-7fC-nHawN + 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-O1XuzgpIo: + children: + - CHART-explore-1276-1 + id: ROW-O1XuzgpIo + meta: + background: BACKGROUND_TRANSPARENT + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-GuHDMLqRC + type: ROW + ROW-eosCHWz8o: + children: + - CHART-explore-1277-1 + id: ROW-eosCHWz8o + meta: + 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-7fC-nHawN + 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-eosCHWz8o + 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..5f1a1e9b7 --- /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: 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: 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: 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: 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_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 +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..4b5f927a2 --- /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: 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: 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: 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..e465715a0 --- /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: 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: 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: 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: 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 +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..5c0cab113 --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/tag_filter.yaml @@ -0,0 +1,78 @@ +_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: null + 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: null + 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: null + 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: + warning_markdown: '' + metric_name: count + metric_type: count + verbose_name: COUNT(*) + warning_text: null +- currency: null + d3format: null + description: null + expression: min(rownum) + extra: + warning_markdown: '' + 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..36031c4cb --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/watched_video_duration.yaml @@ -0,0 +1,182 @@ +_file_name: watched_video_duration.yaml +always_filter_main_dttm: false +cache_timeout: null +columns: +- advanced_data_type: null + column_name: rewatched_percent + description: null + expression: case when rewatched = 1 then watched_duration else 0 end/video_duration + extra: {} + filterable: true + groupby: true + is_active: true + is_dttm: false + python_date_format: null + type: null + verbose_name: '% Video Seconds Re-Watched' +- advanced_data_type: null + column_name: watched_percent + description: null + expression: case when rewatched = 0 then watched_duration else 0 end/video_duration + extra: {} + filterable: true + groupby: true + is_active: true + is_dttm: false + python_date_format: null + type: null + verbose_name: '% Video Seconds Watched' +- advanced_data_type: null + column_name: course_name + description: null + expression: '' + extra: {} + 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: {} + 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: {} + 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: avg_video_length + description: null + expression: null + extra: {} + filterable: true + groupby: true + is_active: true + is_dttm: false + python_date_format: null + type: Float64 + verbose_name: Avg Video Length +- advanced_data_type: null + column_name: count_videos + description: null + expression: null + extra: {} + filterable: true + groupby: true + is_active: true + is_dttm: false + python_date_format: null + type: UInt64 + verbose_name: Count Videos +- advanced_data_type: null + column_name: watched_duration + description: null + expression: null + extra: {} + filterable: true + groupby: true + is_active: true + is_dttm: false + python_date_format: null + type: Int64 + verbose_name: Watched Duration +- advanced_data_type: null + column_name: video_duration + description: null + expression: null + extra: {} + 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: rewatched + description: null + expression: null + extra: {} + filterable: true + groupby: true + is_active: true + is_dttm: false + python_date_format: null + type: UInt8 + verbose_name: Rewatched +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(*) - count(distinct actor_id) + extra: + warning_markdown: '' + metric_name: repeat_views + metric_type: null + verbose_name: Repeat Views + warning_text: null +- currency: null + d3format: null + description: null + expression: count(distinct actor_id) + extra: + warning_markdown: '' + metric_name: unique_viewers + metric_type: null + verbose_name: Unique Viewers + warning_text: null +- currency: null + d3format: null + description: null + expression: count(*) + extra: + warning_markdown: '' + metric_name: total_views + metric_type: null + verbose_name: Total Views + 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..e9676ff48 100644 --- a/tutoraspects/templates/openedx-assets/queries/common_filters.sql +++ b/tutoraspects/templates/openedx-assets/queries/common_filters.sql @@ -11,3 +11,14 @@ ) {% endif %} {%- endraw %} + +{% raw -%} +{% if filter_values("tag") != [] %} + and course_key in ( + select course_key + from {{ DBT_PROFILE_TARGET_DATABASE }}.course_tags a + 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..410361ecf --- /dev/null +++ b/tutoraspects/templates/openedx-assets/queries/course_information.sql @@ -0,0 +1,24 @@ +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 +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..82d5a8a28 --- /dev/null +++ b/tutoraspects/templates/openedx-assets/queries/learner_performance_breakdown.sql @@ -0,0 +1,14 @@ +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 +from {{ DBT_PROFILE_TARGET_DATABASE }}.fact_student_status +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..6b90e645d --- /dev/null +++ b/tutoraspects/templates/openedx-assets/queries/tag_filter_dataset.sql @@ -0,0 +1,9 @@ +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 \ No newline at end of file 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..2c858fb91 --- /dev/null +++ b/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql @@ -0,0 +1,88 @@ +with + video_events as ( + select *, splitByString('/xblock/', object_id)[-1] as video_id + from xapi.video_playback_events + ), + totals as ( + select + org, + course_key, + count(distinct video_id) as count_videos, + avg(video_duration) as avg_video_length + from video_events + group by org, course_key + ), + starts as ( + select + org, + course_key, + actor_id, + emission_time, + cast(video_position as Int32) as start_position, + video_id, + video_duration + from video_events + where verb_id = 'https://w3id.org/xapi/video/verbs/played' + ), + ends as ( + select + org, + course_key, + actor_id, + emission_time, + cast(video_position as Int32) as end_position, + video_id + from video_events + where + verb_id in ( + 'http://adlnet.gov/expapi/verbs/completed', + 'https://w3id.org/xapi/video/verbs/seeked', + 'https://w3id.org/xapi/video/verbs/paused', + 'http://adlnet.gov/expapi/verbs/terminated' + ) + ), + rewatches as ( + select org, course_key, video_id, actor_id, start_position + from starts + group by org, course_key, video_id, actor_id, start_position + having count(1) > 1 + ), + duration as ( + select + starts.org as org, + starts.course_key as course_key, + starts.actor_id as actor_id, + video_duration, + starts.start_position - end_position as watched_duration, + case when rewatches.org <> '' then 1 else 0 end as rewatched + from starts left + asof join + ends + on starts.org = ends.org + and starts.course_key = ends.course_key + and starts.video_id = ends.video_id + and starts.actor_id = ends.actor_id + and starts.emission_time < ends.emission_time + left join + rewatches + on rewatches.org = starts.org + and rewatches.course_key = starts.course_key + and rewatches.actor_id = starts.actor_id + and rewatches.start_position = starts.start_position + and rewatches.video_id = starts.video_id + ) +select + totals.org, + names.course_name as course_name, + names.course_run as course_run, + count_videos, + avg_video_length, + video_duration, + watched_duration, + rewatched +from duration +left join totals +using org, course_key +left join event_sink.course_names as names +using org, course_key +where 1 = 1 {% include 'openedx-assets/queries/common_filters.sql' %}