From 9162ac699d17a2807daa4e7e8754a7bffe1ba6e4 Mon Sep 17 00:00:00 2001 From: Sara Burns Date: Wed, 4 Sep 2024 14:43:12 -0400 Subject: [PATCH 1/9] feat: new course comparison dashboard --- tutoraspects/plugin.py | 9 +- .../assets/charts/Course_Info_a433e3.yaml | 132 ++++ .../assets/charts/Course_Info_e0098c.yaml | 132 ++++ .../charts/Enrollment_Counts_2f2af8.yaml | 103 +++ .../charts/Enrollment_Counts_bd37be.yaml | 103 +++ .../charts/Learner_Performance_4e48b8.yaml | 122 ++++ .../Learner_Performance_Breakdown_4250c9.yaml | 192 +++++ .../Learner_Performance_Breakdown_9c3f72.yaml | 203 ++++++ .../charts/Learner_Performance_dde44a.yaml | 145 ++++ .../charts/Video_Engagement_e05c6b.yaml | 416 +++++++++++ .../charts/Video_Engagement_e26ecc.yaml | 425 +++++++++++ .../Course_Comparison_Dashboard.yaml | 675 ++++++++++++++++++ .../assets/datasets/course_information.yaml | 154 ++++ .../assets/datasets/learner_performance.yaml | 191 +++++ .../learner_performance_breakdown.yaml | 143 ++++ .../assets/datasets/tag_filter.yaml | 76 ++ .../datasets/watched_video_duration.yaml | 182 +++++ .../openedx-assets/queries/common_filters.sql | 11 + .../queries/course_information.sql | 27 + .../queries/learner_performance.sql | 14 + .../queries/learner_performance_breakdown.sql | 21 + .../queries/tag_filter_dataset.sql | 12 + .../queries/watched_video_duration.sql | 89 +++ 23 files changed, 3576 insertions(+), 1 deletion(-) create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_a433e3.yaml create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_e0098c.yaml create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_2f2af8.yaml create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_bd37be.yaml create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_4e48b8.yaml create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_Breakdown_4250c9.yaml create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_Breakdown_9c3f72.yaml create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_dde44a.yaml create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_e05c6b.yaml create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_e26ecc.yaml create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/dashboards/Course_Comparison_Dashboard.yaml create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/course_information.yaml create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/learner_performance.yaml create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/learner_performance_breakdown.yaml create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/tag_filter.yaml create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/watched_video_duration.yaml create mode 100644 tutoraspects/templates/openedx-assets/queries/course_information.sql create mode 100644 tutoraspects/templates/openedx-assets/queries/learner_performance.sql create mode 100644 tutoraspects/templates/openedx-assets/queries/learner_performance_breakdown.sql create mode 100644 tutoraspects/templates/openedx-assets/queries/tag_filter_dataset.sql create mode 100644 tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql diff --git a/tutoraspects/plugin.py b/tutoraspects/plugin.py index d3668f492..5906a1193 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.32.0"), ("DBT_SSH_KEY", ""), ("DBT_STATE_DIR", "/app/aspects-dbt/state"), ("DBT_PROFILES_DIR", "/app/aspects/dbt/"), diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_a433e3.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_a433e3.yaml new file mode 100644 index 000000000..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..a8664f2e9 --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Course_Info_e0098c.yaml @@ -0,0 +1,132 @@ +_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: + - active_count + - tag_list + - enrollees + order_by_cols: [] + order_desc: false + percent_metrics: [] + query_mode: aggregate + row_limit: 50000 + server_page_length: 10 + show_cell_bars: false + table_timestamp_format: smart_date + temporal_columns_lookup: {} + time_grain_sqla: P1M + viz_type: table +query_context: + datasource: + id: 645 + type: table + force: false + form_data: + adhoc_filters: + - clause: WHERE + comparator: No filter + expressionType: SIMPLE + operator: TEMPORAL_RANGE + subject: emission_time + all_columns: [] + color_pn: false + column_config: + Current Enrollees: + columnWidth: 150 + active_count: + columnWidth: 200 + course_name: + columnWidth: 200 + course_run: + columnWidth: 300 + tag_list: + truncateLongCells: true + conditional_formatting: [] + dashboards: + - 161 + datasource: 645__table + extra_form_data: {} + force: false + groupby: + - course_run + - course_name + metrics: + - active_count + - tag_list + - enrollees + order_by_cols: [] + order_desc: false + percent_metrics: [] + query_mode: aggregate + result_format: json + result_type: full + row_limit: 50000 + server_page_length: 10 + show_cell_bars: false + slice_id: 1274 + table_timestamp_format: smart_date + temporal_columns_lookup: {} + time_grain_sqla: P1M + viz_type: table + queries: + - annotation_layers: [] + applied_time_extras: {} + columns: + - course_run + - course_name + custom_form_data: {} + custom_params: {} + extras: + having: '' + time_grain_sqla: P1M + where: '' + filters: + - col: emission_time + op: TEMPORAL_RANGE + val: No filter + metrics: + - active_count + - tag_list + - enrollees + order_desc: false + orderby: + - - active_count + - false + post_processing: [] + row_limit: 50000 + series_limit: 0 + url_params: {} + result_format: json + result_type: full +slice_name: Course Info +uuid: e0098cfe-a312-4c49-8efd-7e74256b6ea4 +version: 1.0.0 +viz_type: table diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_2f2af8.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_2f2af8.yaml new file mode 100644 index 000000000..898bd4b06 --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_2f2af8.yaml @@ -0,0 +1,103 @@ +_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: + - enrollees + metricsLayout: COLUMNS + order_desc: true + rowOrder: key_a_to_z + row_limit: 10000 + temporal_columns_lookup: {} + time_grain_sqla: P1D + valueFormat: SMART_NUMBER + viz_type: pivot_table_v2 +query_context: + datasource: + id: 645 + type: table + force: false + form_data: + adhoc_filters: + - clause: WHERE + comparator: No filter + expressionType: SIMPLE + operator: TEMPORAL_RANGE + subject: emission_time + aggregateFunction: Sum + colOrder: key_a_to_z + colSubTotals: false + conditional_formatting: [] + dashboards: + - 161 + datasource: 645__table + date_format: smart_date + extra_form_data: {} + force: false + groupbyColumns: + - enrollment_mode + groupbyRows: + - course_name + metrics: + - enrollees + metricsLayout: COLUMNS + order_desc: true + result_format: json + result_type: full + rowOrder: key_a_to_z + row_limit: 10000 + slice_id: 1294 + temporal_columns_lookup: {} + time_grain_sqla: P1D + valueFormat: SMART_NUMBER + viz_type: pivot_table_v2 + queries: + - annotation_layers: [] + applied_time_extras: {} + columns: + - enrollment_mode + - course_name + custom_form_data: {} + custom_params: {} + extras: + having: '' + time_grain_sqla: P1D + where: '' + filters: + - col: emission_time + op: TEMPORAL_RANGE + val: No filter + metrics: + - enrollees + order_desc: true + orderby: + - - enrollees + - false + row_limit: 10000 + series_limit: 0 + url_params: {} + result_format: json + result_type: full +slice_name: Enrollment Counts +uuid: 2f2af8b0-94ae-4300-b71f-3bd7f9fc127c +version: 1.0.0 +viz_type: pivot_table_v2 diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_bd37be.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_bd37be.yaml new file mode 100644 index 000000000..fd3a52524 --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Enrollment_Counts_bd37be.yaml @@ -0,0 +1,103 @@ +_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: + - enrollees + metricsLayout: COLUMNS + order_desc: false + rowOrder: key_a_to_z + row_limit: 50000 + temporal_columns_lookup: {} + time_grain_sqla: P1D + valueFormat: SMART_NUMBER + viz_type: pivot_table_v2 +query_context: + datasource: + id: 645 + type: table + force: false + form_data: + adhoc_filters: + - clause: WHERE + comparator: No filter + expressionType: SIMPLE + operator: TEMPORAL_RANGE + subject: emission_time + aggregateFunction: Sum + colOrder: key_a_to_z + colSubTotals: false + conditional_formatting: [] + dashboards: + - 161 + datasource: 645__table + date_format: smart_date + extra_form_data: {} + force: false + groupbyColumns: + - enrollment_mode + groupbyRows: + - course_run + metrics: + - enrollees + metricsLayout: COLUMNS + order_desc: false + result_format: json + result_type: full + rowOrder: key_a_to_z + row_limit: 50000 + slice_id: 1295 + temporal_columns_lookup: {} + time_grain_sqla: P1D + valueFormat: SMART_NUMBER + viz_type: pivot_table_v2 + queries: + - annotation_layers: [] + applied_time_extras: {} + columns: + - enrollment_mode + - course_run + custom_form_data: {} + custom_params: {} + extras: + having: '' + time_grain_sqla: P1D + where: '' + filters: + - col: emission_time + op: TEMPORAL_RANGE + val: No filter + metrics: + - enrollees + order_desc: false + orderby: + - - enrollees + - true + row_limit: 50000 + series_limit: 0 + url_params: {} + result_format: json + result_type: full +slice_name: Enrollment Counts +uuid: bd37be7f-6672-4dca-80ae-a54f69d169da +version: 1.0.0 +viz_type: pivot_table_v2 diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_4e48b8.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Learner_Performance_4e48b8.yaml new file mode 100644 index 000000000..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..7cd72674d --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_e26ecc.yaml @@ -0,0 +1,425 @@ +_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: + datasource: + id: 647 + type: table + force: false + form_data: + 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: [] + dashboards: + - 161 + datasource: 647__table + extra_form_data: {} + force: false + 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 + result_format: json + result_type: full + row_limit: 50000 + server_page_length: 10 + show_cell_bars: false + slice_id: 1278 + 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: + - col: started_at + op: TEMPORAL_RANGE + val: No filter + 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_desc: true + orderby: + - - 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 + - false + post_processing: [] + row_limit: 50000 + series_limit: 0 + url_params: {} + result_format: json + result_type: full +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..5d71457f2 --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/dashboards/Course_Comparison_Dashboard.yaml @@ -0,0 +1,675 @@ +_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: + '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: + - 1273 + - 1274 + - 1275 + - 1276 + - 1277 + - 1278 + - 1279 + - 1292 + - 1295 + scope: + excluded: + - 1294 + rootPath: + - TAB-J31MdXj-sa + - TAB-GuHDMLqRC + 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: [] + controlValues: + defaultToFirstItem: false + enableEmptyFilter: false + inverseSelection: false + multiSelect: true + searchAllOptions: false + sortAscending: true + defaultDataMask: + extraFormData: {} + filterState: {} + ownState: {} + description: Only available in versions Redwood and later + filterType: filter_select + id: NATIVE_FILTER-M1zEXEB97 + name: Tag + scope: + excluded: [] + rootPath: + - ROOT_ID + sortMetric: order + tabsInScope: [] + targets: + - column: + name: tag + datasetUuid: 81457874-fd86-4568-a730-9179ab7a7fd5 + type: NATIVE_FILTER + - cascadeParentIds: + - NATIVE_FILTER-QrTlO4wBf + - NATIVE_FILTER-M1zEXEB97 + chartsInScope: + - 1266 + - 1273 + - 1274 + - 1275 + - 1276 + - 1277 + - 1278 + - 1279 + controlValues: + defaultToFirstItem: false + enableEmptyFilter: false + inverseSelection: false + multiSelect: true + searchAllOptions: false + defaultDataMask: + extraFormData: {} + filterState: {} + ownState: {} + description: '' + filterType: filter_select + id: NATIVE_FILTER-IfS-Rd0ZS + name: Course Name + scope: + excluded: [] + rootPath: + - ROOT_ID + tabsInScope: + - TAB-J31MdXj-sa + - TAB-GuHDMLqRC + targets: + - column: + name: course_name + datasetUuid: 38488934-35ee-5404-9acc-7e67626ddfae + type: NATIVE_FILTER + - cascadeParentIds: + - NATIVE_FILTER-M1zEXEB97 + - NATIVE_FILTER-QrTlO4wBf + chartsInScope: + - 1266 + - 1273 + - 1274 + - 1275 + - 1276 + - 1277 + - 1278 + - 1279 + controlValues: + defaultToFirstItem: false + enableEmptyFilter: false + inverseSelection: false + multiSelect: true + searchAllOptions: false + defaultDataMask: + extraFormData: {} + filterState: {} + ownState: {} + description: '' + filterType: filter_select + id: NATIVE_FILTER-w863AfFgi + name: Course Run + scope: + excluded: [] + rootPath: + - ROOT_ID + tabsInScope: + - TAB-J31MdXj-sa + - TAB-GuHDMLqRC + targets: + - column: + name: course_run + datasetUuid: 38488934-35ee-5404-9acc-7e67626ddfae + type: NATIVE_FILTER + refresh_frequency: 0 + shared_label_colors: + active: '#1FA8C9' + at_risk: '#5AC189' + count: '#FCC700' + passed: '#666666' + timed_refresh_immune_slices: [] +position: + CHART-explore-1273-1: + children: [] + id: CHART-explore-1273-1 + meta: + chartId: 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 Counts + uuid: 2f2af8b0-94ae-4300-b71f-3bd7f9fc127c + width: 12 + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-J31MdXj-sa + - ROW-FolfXlYAh + type: CHART + CHART-explore-1295-1: + children: [] + id: CHART-explore-1295-1 + meta: + chartId: 1295 + height: 49 + sliceName: Enrollment Counts + uuid: bd37be7f-6672-4dca-80ae-a54f69d169da + width: 12 + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-GuHDMLqRC + - ROW-17CIe_GHN + type: CHART + 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..563dc484e --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/tag_filter.yaml @@ -0,0 +1,76 @@ +_file_name: tag_filter.yaml +always_filter_main_dttm: false +cache_timeout: null +columns: +- advanced_data_type: null + column_name: id + description: null + expression: '' + extra: {} + filterable: true + groupby: true + is_active: true + is_dttm: false + python_date_format: null + type: Int32 + verbose_name: Id +- advanced_data_type: null + column_name: rownum + description: null + expression: '' + extra: {} + filterable: true + groupby: true + is_active: true + is_dttm: false + python_date_format: null + type: UInt64 + verbose_name: Rownum +- advanced_data_type: null + column_name: tag + description: null + expression: '' + extra: {} + filterable: true + groupby: true + is_active: true + is_dttm: false + python_date_format: null + type: String + verbose_name: Tag +database_uuid: 21174b6c-4d40-4958-8161-d6c3cf5e77b6 +default_endpoint: null +description: null +extra: null +fetch_values_predicate: null +filter_select_enabled: true +main_dttm_col: null +metrics: +- currency: null + d3format: null + description: null + expression: COUNT(*) + extra: {} + metric_name: count + metric_type: count + verbose_name: COUNT(*) + warning_text: null +- currency: null + d3format: null + description: null + expression: min(rownum) + extra: {} + metric_name: order + metric_type: null + verbose_name: order + warning_text: null +normalize_columns: false +offset: 0 +params: null +schema: '{{ ASPECTS_EVENT_SINK_DATABASE }}' +sql: |- + {% filter indent(width=2) %}{% include 'openedx-assets/queries/tag_filter_dataset.sql' %}{% endfilter %} +table_name: tag_filter +template_params: null +uuid: 81457874-fd86-4568-a730-9179ab7a7fd5 +version: 1.0.0 diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/watched_video_duration.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/datasets/watched_video_duration.yaml new file mode 100644 index 000000000..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..d57fc204e 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 {% endraw -%} {{ DBT_PROFILE_TARGET_DATABASE }}.course_tags{%- raw %} + where + tag in (select replaceAll(arrayJoin({{ filter_values("tag") }}), '- ', '')) + ) +{% endif %} +{%- endraw %} diff --git a/tutoraspects/templates/openedx-assets/queries/course_information.sql b/tutoraspects/templates/openedx-assets/queries/course_information.sql new file mode 100644 index 000000000..c6420396d --- /dev/null +++ b/tutoraspects/templates/openedx-assets/queries/course_information.sql @@ -0,0 +1,27 @@ +select + fes.org as org, + cn.course_name as course_name, + course_run, + fes.actor_id as actor_id, + fes.enrollment_mode as enrollment_mode, + case + when flfc.emission_time >= subtractDays(now(), 7) then actor_id else null + end as active_learner, + tag as course_tag, + fes.course_key as course_key +from {{ DBT_PROFILE_TARGET_DATABASE }}.fact_enrollment_status fes +left join + {{ ASPECTS_XAPI_DATABASE }}.fact_learner_last_course_visit flfc + on fes.org = flfc.org + and fes.course_key = flfc.course_key + and fes.actor_id = flfc.actor_id +left join + {{ ASPECTS_EVENT_SINK_DATABASE }}.course_names cn + on fes.org = cn.org + and fes.course_key = cn.course_key +left join + {{ DBT_PROFILE_TARGET_DATABASE }}.most_recent_course_tags mrct + on mrct.course_key = fes.course_key +where + enrollment_status = 'registered' + {% include 'openedx-assets/queries/common_filters.sql' %} diff --git a/tutoraspects/templates/openedx-assets/queries/learner_performance.sql b/tutoraspects/templates/openedx-assets/queries/learner_performance.sql new file mode 100644 index 000000000..6c7829470 --- /dev/null +++ b/tutoraspects/templates/openedx-assets/queries/learner_performance.sql @@ -0,0 +1,14 @@ +select + org, + course_key, + course_name, + course_run, + actor_id, + success, + attempts, + course_grade, + approving_state +from {{ DBT_PROFILE_TARGET_DATABASE }}.fact_student_status +left join {{ DBT_PROFILE_TARGET_DATABASE }}.int_problem_results +using org, course_key, course_run, actor_id, course_name +where 1 = 1 {% include 'openedx-assets/queries/common_filters.sql' %} diff --git a/tutoraspects/templates/openedx-assets/queries/learner_performance_breakdown.sql b/tutoraspects/templates/openedx-assets/queries/learner_performance_breakdown.sql new file mode 100644 index 000000000..595a33ebf --- /dev/null +++ b/tutoraspects/templates/openedx-assets/queries/learner_performance_breakdown.sql @@ -0,0 +1,21 @@ +select + org, + actor_id, + course_name, + course_run, + approving_state, + case + when fllcv.emission_time >= subtractDays(now(), 7) + then 'active' + when + fllcv.emission_time < subtractDays(now(), 7) + and approving_state = 'failed' + and enrollment_status = 'registered' + then 'at-risk' + else 'other' + end as learner_status, + fss.course_key as course_key +from {{ DBT_PROFILE_TARGET_DATABASE }}.fact_student_status fss +left join {{ ASPECTS_XAPI_DATABASE }}.fact_learner_last_course_visit fllcv +using org, course_key, actor_id +where 1 = 1 {% include 'openedx-assets/queries/common_filters.sql' %} diff --git a/tutoraspects/templates/openedx-assets/queries/tag_filter_dataset.sql b/tutoraspects/templates/openedx-assets/queries/tag_filter_dataset.sql new file mode 100644 index 000000000..05bc2a308 --- /dev/null +++ b/tutoraspects/templates/openedx-assets/queries/tag_filter_dataset.sql @@ -0,0 +1,12 @@ +with + data as ( + select + id, + case when parent = 0 then id else cast(parent as int) end as sort_order_1, + case when parent = 0 then 0 else 1 end as sort_order_2, + concat(repeat('- ', countMatches(lineage, ',')), value) as tag, + row_number() over (order by sort_order_1, sort_order_2, value) as rownum + from {{ ASPECTS_EVENT_SINK_DATABASE }}.most_recent_tags + ) +select id, rownum, tag +from data diff --git a/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql b/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql new file mode 100644 index 000000000..72de5096e --- /dev/null +++ b/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql @@ -0,0 +1,89 @@ +with + video_events as ( + select *, splitByString('/xblock/', object_id)[-1] as video_id + from {{ ASPECTS_XAPI_DATABASE }}.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 as org, + names.course_name as course_name, + names.course_run as course_run, + duration.course_key as course_key, + count_videos, + avg_video_length, + video_duration, + watched_duration, + rewatched +from duration +left join totals +using org, course_key +left join {{ ASPECTS_EVENT_SINK_DATABASE }}.course_names as names +using org, course_key +where 1 = 1 {% include 'openedx-assets/queries/common_filters.sql' %} From db3e66253546987f9774d127d7c54589b95a1639 Mon Sep 17 00:00:00 2001 From: Sara Burns Date: Wed, 11 Sep 2024 10:37:45 -0400 Subject: [PATCH 2/9] fix: use most recent table --- tutoraspects/plugin.py | 2 +- .../templates/openedx-assets/queries/common_filters.sql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tutoraspects/plugin.py b/tutoraspects/plugin.py index 5906a1193..c435a1fb4 100644 --- a/tutoraspects/plugin.py +++ b/tutoraspects/plugin.py @@ -383,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.32.0"), + ("DBT_BRANCH", "v3.33.0"), ("DBT_SSH_KEY", ""), ("DBT_STATE_DIR", "/app/aspects-dbt/state"), ("DBT_PROFILES_DIR", "/app/aspects/dbt/"), diff --git a/tutoraspects/templates/openedx-assets/queries/common_filters.sql b/tutoraspects/templates/openedx-assets/queries/common_filters.sql index d57fc204e..093a153b1 100644 --- a/tutoraspects/templates/openedx-assets/queries/common_filters.sql +++ b/tutoraspects/templates/openedx-assets/queries/common_filters.sql @@ -16,7 +16,7 @@ {% if filter_values("tag") != [] %} and course_key in ( select course_key - from {% endraw -%} {{ DBT_PROFILE_TARGET_DATABASE }}.course_tags{%- raw %} + from {% endraw -%} {{ DBT_PROFILE_TARGET_DATABASE }}.most_recent_course_tags{%- raw %} where tag in (select replaceAll(arrayJoin({{ filter_values("tag") }}), '- ', '')) ) From 33b17e7fb2a40f08cbac549e1a845ac9e9d263c0 Mon Sep 17 00:00:00 2001 From: Sara Burns Date: Wed, 11 Sep 2024 10:43:30 -0400 Subject: [PATCH 3/9] fix: use new mv for video query --- .../queries/watched_video_duration.sql | 92 +------------------ 1 file changed, 4 insertions(+), 88 deletions(-) diff --git a/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql b/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql index 72de5096e..e5b4827ce 100644 --- a/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql +++ b/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql @@ -1,89 +1,5 @@ -with - video_events as ( - select *, splitByString('/xblock/', object_id)[-1] as video_id - from {{ ASPECTS_XAPI_DATABASE }}.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 as org, - names.course_name as course_name, - names.course_run as course_run, - duration.course_key as course_key, - count_videos, - avg_video_length, - video_duration, - watched_duration, - rewatched -from duration -left join totals -using org, course_key -left join {{ ASPECTS_EVENT_SINK_DATABASE }}.course_names as names -using org, course_key + +select names.org as org, names.course_key as course_key, actor_id, video_id, video_duration, watched_time, rewatched_time +from event_sink.watched_video_duration +left join event_sink.course_names as names using org, course_key where 1 = 1 {% include 'openedx-assets/queries/common_filters.sql' %} From a129a7f31244b909334fc81bf30b04ca86e125bf Mon Sep 17 00:00:00 2001 From: Sara Burns Date: Wed, 11 Sep 2024 11:14:32 -0400 Subject: [PATCH 4/9] fix: updates --- .../assets/charts/Course_Info_a433e3.yaml | 1 + .../assets/charts/Course_Info_e0098c.yaml | 1 + .../charts/Enrollment_Counts_2f2af8.yaml | 1 + .../charts/Enrollment_Counts_bd37be.yaml | 1 + .../charts/Learner_Performance_4e48b8.yaml | 1 + .../charts/Learner_Performance_dde44a.yaml | 1 + .../charts/Video_Engagement_443f53.yaml | 107 ++++++ .../charts/Video_Engagement_4ceb66.yaml | 107 ++++++ .../Course_Comparison_Dashboard.yaml | 351 +++++++++--------- .../assets/datasets/course_information.yaml | 38 +- .../assets/datasets/learner_performance.yaml | 26 +- .../learner_performance_breakdown.yaml | 28 +- .../datasets/watched_video_duration.yaml | 87 +++-- .../queries/watched_video_duration.sql | 11 +- 14 files changed, 491 insertions(+), 270 deletions(-) create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_443f53.yaml create mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_4ceb66.yaml 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 index 4dae7be9a..aa934e024 100644 --- 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 @@ -12,6 +12,7 @@ params: operator: TEMPORAL_RANGE subject: emission_time all_columns: [] + annotation_layers: [] color_pn: false column_config: active_count: 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 index a8664f2e9..19d329f2a 100644 --- 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 @@ -12,6 +12,7 @@ params: operator: TEMPORAL_RANGE subject: emission_time all_columns: [] + annotation_layers: [] color_pn: false column_config: Current Enrollees: 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 index 898bd4b06..115e7abdf 100644 --- 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 @@ -12,6 +12,7 @@ params: operator: TEMPORAL_RANGE subject: emission_time aggregateFunction: Sum + annotation_layers: [] colOrder: key_a_to_z colSubTotals: false conditional_formatting: [] 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 index fd3a52524..093153981 100644 --- 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 @@ -12,6 +12,7 @@ params: operator: TEMPORAL_RANGE subject: emission_time aggregateFunction: Sum + annotation_layers: [] colOrder: key_a_to_z colSubTotals: false conditional_formatting: [] 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 index 4183a273c..3516c157f 100644 --- 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 @@ -12,6 +12,7 @@ params: adhoc_filters: [] all_columns: - success + annotation_layers: [] color_pn: true column_config: avg_course_grade: 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 index adbc9e23d..13f3d55bc 100644 --- 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 @@ -22,6 +22,7 @@ params: subject: emission_time all_columns: - success + annotation_layers: [] color_pn: true column_config: avg_course_grade: diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_443f53.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_443f53.yaml new file mode 100644 index 000000000..22b01fa22 --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_443f53.yaml @@ -0,0 +1,107 @@ +_file_name: Video_Engagement_443f53.yaml +cache_timeout: null +certification_details: null +certified_by: null +dataset_uuid: 82cb6b56-c713-4933-93a0-9de15c266c4b +description: null +params: + adhoc_filters: [] + all_columns: [] + color_pn: true + column_config: + rewatched_percent: + d3NumberFormat: ',.1%' + watched_percent: + d3NumberFormat: ',.1%' + conditional_formatting: [] + extra_form_data: {} + groupby: + - course_name + - org + metrics: + - watched_percent + - rewatched_percent + - video_count + - avg_video_length + order_by_cols: [] + order_desc: true + percent_metrics: [] + query_mode: aggregate + row_limit: 50000 + server_page_length: 10 + show_cell_bars: false + table_timestamp_format: smart_date + temporal_columns_lookup: {} + viz_type: table +query_context: + datasource: + id: 121 + type: table + force: false + form_data: + adhoc_filters: [] + all_columns: [] + color_pn: true + column_config: + rewatched_percent: + d3NumberFormat: ',.1%' + watched_percent: + d3NumberFormat: ',.1%' + conditional_formatting: [] + dashboards: + - 2241 + datasource: 121__table + extra_form_data: {} + force: false + groupby: + - course_name + - org + metrics: + - watched_percent + - rewatched_percent + - video_count + - avg_video_length + order_by_cols: [] + order_desc: true + percent_metrics: [] + query_mode: aggregate + result_format: json + result_type: full + row_limit: 50000 + server_page_length: 10 + show_cell_bars: false + slice_id: 1463 + 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: 443f532c-675f-4c5e-bd1a-254ed3b98920 +version: 1.0.0 +viz_type: table diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_4ceb66.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_4ceb66.yaml new file mode 100644 index 000000000..87c06087f --- /dev/null +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_4ceb66.yaml @@ -0,0 +1,107 @@ +_file_name: Video_Engagement_4ceb66.yaml +cache_timeout: null +certification_details: null +certified_by: null +dataset_uuid: 82cb6b56-c713-4933-93a0-9de15c266c4b +description: null +params: + adhoc_filters: [] + all_columns: [] + color_pn: true + column_config: + rewatched_percent: + d3NumberFormat: ',.1%' + watched_percent: + d3NumberFormat: ',.1%' + conditional_formatting: [] + extra_form_data: {} + groupby: + - course_run + - course_name + metrics: + - watched_percent + - rewatched_percent + - video_count + - avg_video_length + order_by_cols: [] + order_desc: true + percent_metrics: [] + query_mode: aggregate + row_limit: 50000 + server_page_length: 10 + show_cell_bars: false + table_timestamp_format: smart_date + temporal_columns_lookup: {} + viz_type: table +query_context: + datasource: + id: 121 + type: table + force: false + form_data: + adhoc_filters: [] + all_columns: [] + color_pn: true + column_config: + rewatched_percent: + d3NumberFormat: ',.1%' + watched_percent: + d3NumberFormat: ',.1%' + conditional_formatting: [] + dashboards: + - 2241 + datasource: 121__table + extra_form_data: {} + force: false + groupby: + - course_run + - course_name + metrics: + - watched_percent + - rewatched_percent + - video_count + - avg_video_length + order_by_cols: [] + order_desc: true + percent_metrics: [] + query_mode: aggregate + result_format: json + result_type: full + row_limit: 50000 + server_page_length: 10 + show_cell_bars: false + slice_id: 1463 + 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: 4ceb665e-ceb0-4ac8-8171-513269000d58 +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 index 5d71457f2..82442f528 100644 --- 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 @@ -8,151 +8,146 @@ dashboard_title: Course Comparison Dashboard description: null metadata: chart_configuration: - '1273': + '1081': crossFilters: chartsInScope: - - 1274 - - 1275 - - 1276 - - 1277 - - 1278 - - 1279 - - 1292 - - 1294 - - 1295 + - 121 + - 161 + - 221 + - 421 + - 801 + - 1181 + - 1381 + - 1463 + - 1464 scope: global - id: 1273 - '1274': + id: 1081 + '1181': crossFilters: chartsInScope: - - 1273 - - 1275 - - 1276 - - 1277 - - 1278 - - 1279 - - 1292 - - 1294 - - 1295 + - 121 + - 161 + - 221 + - 421 + - 801 + - 1081 + - 1381 + - 1463 + - 1464 scope: global - id: 1274 - '1275': + id: 1181 + '121': crossFilters: chartsInScope: - - 1273 - - 1274 - - 1276 - - 1277 - - 1278 - - 1279 - - 1292 - - 1294 - - 1295 + - 161 + - 221 + - 421 + - 801 + - 1081 + - 1181 + - 1381 + - 1463 + - 1464 scope: global - id: 1275 - '1276': + id: 121 + '1381': crossFilters: chartsInScope: - - 1273 - - 1274 - - 1275 - - 1277 - - 1278 - - 1279 - - 1292 - - 1294 - - 1295 + - 121 + - 161 + - 221 + - 421 + - 801 + - 1081 + - 1181 + - 1463 + - 1464 scope: global - id: 1276 - '1277': + id: 1381 + '1463': crossFilters: chartsInScope: - - 1273 - - 1274 - - 1275 - - 1276 - - 1278 - - 1279 - - 1292 - - 1294 - - 1295 + - 121 + - 161 + - 221 + - 421 + - 801 + - 1081 + - 1181 + - 1381 + - 1464 scope: global - id: 1277 - '1278': + id: 1463 + '1464': crossFilters: chartsInScope: - - 1273 - - 1274 - - 1275 - - 1276 - - 1277 - - 1279 - - 1292 - - 1294 - - 1295 + - 121 + - 161 + - 221 + - 421 + - 801 + - 1081 + - 1181 + - 1381 + - 1463 scope: global - id: 1278 - '1279': + id: 1464 + '161': crossFilters: chartsInScope: - - 1273 - - 1274 - - 1275 - - 1276 - - 1277 - - 1278 - - 1292 - - 1294 - - 1295 + - 121 + - 221 + - 421 + - 801 + - 1081 + - 1181 + - 1381 + - 1463 + - 1464 scope: global - id: 1279 - '1292': + id: 161 + '221': crossFilters: chartsInScope: - - 1273 - - 1274 - - 1275 - - 1276 - - 1277 - - 1278 - - 1279 - - 1294 - - 1295 + - 121 + - 161 + - 421 + - 801 + - 1081 + - 1181 + - 1381 + - 1463 + - 1464 scope: global - id: 1292 - '1294': + id: 221 + '421': crossFilters: chartsInScope: - - 1273 - - 1274 - - 1275 - - 1276 - - 1277 - - 1278 - - 1279 - - 1292 - - 1295 - scope: - excluded: - - 1294 - rootPath: - - TAB-J31MdXj-sa - - TAB-GuHDMLqRC - id: 1294 - '1295': + - 121 + - 161 + - 221 + - 801 + - 1081 + - 1181 + - 1381 + - 1463 + - 1464 + scope: global + id: 421 + '801': crossFilters: chartsInScope: - - 1273 - - 1274 - - 1275 - - 1276 - - 1277 - - 1278 - - 1279 - - 1292 - - 1294 + - 121 + - 161 + - 221 + - 421 + - 1081 + - 1181 + - 1381 + - 1463 + - 1464 scope: global - id: 1295 + id: 801 color_scheme: supersetColors color_scheme_domain: - '#1FA8C9' @@ -178,22 +173,22 @@ metadata: cross_filters_enabled: true default_filters: '{}' expanded_slices: - '1275': true - '1276': true - '1279': true - '1292': true + '121': true + '221': true + '421': true + '801': true global_chart_configuration: chartsInScope: - - 1273 - - 1274 - - 1275 - - 1276 - - 1277 - - 1278 - - 1279 - - 1292 - - 1294 - - 1295 + - 121 + - 161 + - 221 + - 421 + - 801 + - 1081 + - 1181 + - 1381 + - 1463 + - 1464 scope: excluded: [] rootPath: @@ -355,7 +350,7 @@ position: children: [] id: CHART-explore-1273-1 meta: - chartId: 1273 + chartId: 1181 height: 49 sliceName: Course Info uuid: a433e3cc-8ed5-454a-8b17-5dd75cfc84e4 @@ -370,7 +365,7 @@ position: children: [] id: CHART-explore-1274-1 meta: - chartId: 1274 + chartId: 1381 height: 49 sliceName: Course Info uuid: e0098cfe-a312-4c49-8efd-7e74256b6ea4 @@ -385,7 +380,7 @@ position: children: [] id: CHART-explore-1275-1 meta: - chartId: 1275 + chartId: 421 height: 67 sliceName: Learner Performance Breakdown uuid: 4250c976-a9b7-43ff-b5ad-8dd00a5acef7 @@ -400,7 +395,7 @@ position: children: [] id: CHART-explore-1276-1 meta: - chartId: 1276 + chartId: 801 height: 67 sliceName: Learner Performance Breakdown uuid: 9c3f7291-1bd9-4b2f-abc0-472aad3aff06 @@ -411,41 +406,11 @@ position: - 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 + chartId: 121 height: 51 sliceName: Learner Performance uuid: 4e48b8f9-e757-4263-a9d7-d18018620a24 @@ -460,7 +425,7 @@ position: children: [] id: CHART-explore-1292-1 meta: - chartId: 1292 + chartId: 221 height: 51 sliceName: Learner Performance uuid: dde44a03-649f-4d77-990b-a95be204e1ba @@ -475,7 +440,7 @@ position: children: [] id: CHART-explore-1294-1 meta: - chartId: 1294 + chartId: 161 height: 49 sliceName: Enrollment Counts uuid: 2f2af8b0-94ae-4300-b71f-3bd7f9fc127c @@ -490,7 +455,7 @@ position: children: [] id: CHART-explore-1295-1 meta: - chartId: 1295 + chartId: 1081 height: 49 sliceName: Enrollment Counts uuid: bd37be7f-6672-4dca-80ae-a54f69d169da @@ -501,6 +466,36 @@ position: - TAB-GuHDMLqRC - ROW-17CIe_GHN type: CHART + CHART-explore-1463-1: + children: [] + id: CHART-explore-1463-1 + meta: + chartId: 1463 + height: 50 + sliceName: Video Engagement + uuid: 443f532c-675f-4c5e-bd1a-254ed3b98920 + width: 12 + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-J31MdXj-sa + - ROW-5ZoK4K8H4 + type: CHART + CHART-explore-1464-1: + children: [] + id: CHART-explore-1464-1 + meta: + chartId: 1464 + height: 50 + sliceName: Video Engagement + uuid: 4ceb665e-ceb0-4ac8-8171-513269000d58 + width: 12 + parents: + - ROOT_ID + - TABS-6vozRyRn2o + - TAB-J31MdXj-sa + - ROW-CunHlr7PN2 + type: CHART DASHBOARD_VERSION_KEY: v2 GRID_ID: children: [] @@ -540,16 +535,16 @@ position: - TABS-6vozRyRn2o - TAB-GuHDMLqRC type: ROW - ROW-7fC-nHawN: + ROW-5ZoK4K8H4: children: - - CHART-explore-1278-1 - id: ROW-7fC-nHawN + - CHART-explore-1463-1 + id: ROW-5ZoK4K8H4 meta: background: BACKGROUND_TRANSPARENT parents: - ROOT_ID - TABS-6vozRyRn2o - - TAB-GuHDMLqRC + - TAB-J31MdXj-sa type: ROW ROW-EDze1WWiC: children: @@ -584,16 +579,16 @@ position: - TABS-6vozRyRn2o - TAB-GuHDMLqRC type: ROW - ROW-eosCHWz8o: + ROW-jMHppneXZ: children: - - CHART-explore-1277-1 - id: ROW-eosCHWz8o + - CHART-explore-1464-1 + id: ROW-jMHppneXZ meta: background: BACKGROUND_TRANSPARENT parents: - ROOT_ID - TABS-6vozRyRn2o - - TAB-J31MdXj-sa + - TAB-GuHDMLqRC type: ROW ROW-otbcoXVOj: children: @@ -634,7 +629,7 @@ position: - ROW-17CIe_GHN - ROW-O1XuzgpIo - ROW--27JFXNWc - - ROW-7fC-nHawN + - ROW-jMHppneXZ id: TAB-GuHDMLqRC meta: defaultText: Tab title @@ -650,7 +645,7 @@ position: - ROW-FolfXlYAh - ROW-EDze1WWiC - ROW-y57KZVzDt - - ROW-eosCHWz8o + - ROW-5ZoK4K8H4 id: TAB-J31MdXj-sa meta: defaultText: Tab title 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 index 5f1a1e9b7..a78b564eb 100644 --- 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 @@ -3,7 +3,7 @@ always_filter_main_dttm: false cache_timeout: null columns: - advanced_data_type: null - column_name: enrollment_mode + column_name: active_learner description: null expression: null extra: @@ -13,10 +13,10 @@ columns: is_active: true is_dttm: false python_date_format: null - type: LowCardinality(String) - verbose_name: Enrollment Mode + type: Nullable(String) + verbose_name: Active Learner - advanced_data_type: null - column_name: course_name + column_name: enrollment_mode description: null expression: null extra: @@ -26,10 +26,10 @@ columns: is_active: true is_dttm: false python_date_format: null - type: String - verbose_name: Course Name + type: LowCardinality(String) + verbose_name: Enrollment Mode - advanced_data_type: null - column_name: course_run + column_name: actor_id description: null expression: null extra: @@ -40,9 +40,9 @@ columns: is_dttm: false python_date_format: null type: String - verbose_name: Course Run + verbose_name: Actor Id - advanced_data_type: null - column_name: org + column_name: course_name description: null expression: null extra: @@ -52,10 +52,10 @@ columns: is_active: true is_dttm: false python_date_format: null - type: LowCardinality(String) - verbose_name: Org + type: String + verbose_name: Course Name - advanced_data_type: null - column_name: active_learner + column_name: course_run description: null expression: null extra: @@ -65,10 +65,10 @@ columns: is_active: true is_dttm: false python_date_format: null - type: Nullable(String) - verbose_name: Active Learner + type: String + verbose_name: Course Run - advanced_data_type: null - column_name: actor_id + column_name: course_tag description: null expression: null extra: @@ -79,9 +79,9 @@ columns: is_dttm: false python_date_format: null type: String - verbose_name: Actor Id + verbose_name: Course Tag - advanced_data_type: null - column_name: course_tag + column_name: org description: null expression: null extra: @@ -91,8 +91,8 @@ columns: is_active: true is_dttm: false python_date_format: null - type: String - verbose_name: Course Tag + type: LowCardinality(String) + verbose_name: Org database_uuid: 21174b6c-4d40-4958-8161-d6c3cf5e77b6 default_endpoint: null description: null 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 index 4b5f927a2..0083cfde0 100644 --- 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 @@ -15,6 +15,19 @@ columns: 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 @@ -93,19 +106,6 @@ columns: 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 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 index e465715a0..50def3811 100644 --- 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 @@ -3,7 +3,7 @@ always_filter_main_dttm: false cache_timeout: null columns: - advanced_data_type: null - column_name: org + column_name: actor_id description: null expression: null extra: @@ -13,10 +13,10 @@ columns: is_active: true is_dttm: false python_date_format: null - type: LowCardinality(String) - verbose_name: Org + type: String + verbose_name: Actor Id - advanced_data_type: null - column_name: learner_status + column_name: approving_state description: null expression: null extra: @@ -27,9 +27,9 @@ columns: is_dttm: false python_date_format: null type: String - verbose_name: Learner Status + verbose_name: Approving State - advanced_data_type: null - column_name: approving_state + column_name: course_name description: null expression: null extra: @@ -40,9 +40,9 @@ columns: is_dttm: false python_date_format: null type: String - verbose_name: Approving State + verbose_name: Course Name - advanced_data_type: null - column_name: actor_id + column_name: course_run description: null expression: null extra: @@ -53,9 +53,9 @@ columns: is_dttm: false python_date_format: null type: String - verbose_name: Actor Id + verbose_name: Course Run - advanced_data_type: null - column_name: course_name + column_name: learner_status description: null expression: null extra: @@ -66,9 +66,9 @@ columns: is_dttm: false python_date_format: null type: String - verbose_name: Course Name + verbose_name: Learner Status - advanced_data_type: null - column_name: course_run + column_name: org description: null expression: null extra: @@ -78,8 +78,8 @@ columns: is_active: true is_dttm: false python_date_format: null - type: String - verbose_name: Course Run + type: LowCardinality(String) + verbose_name: Org database_uuid: 21174b6c-4d40-4958-8161-d6c3cf5e77b6 default_endpoint: null description: null 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 index 36031c4cb..f58f75980 100644 --- 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 @@ -3,41 +3,29 @@ 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 + column_name: course_name description: null - expression: case when rewatched = 0 then watched_duration else 0 end/video_duration + expression: '' extra: {} filterable: true groupby: true is_active: true is_dttm: false python_date_format: null - type: null - verbose_name: '% Video Seconds Watched' + type: String + verbose_name: Course Name - advanced_data_type: null - column_name: course_name + column_name: video_duration description: null - expression: '' + expression: null extra: {} filterable: true groupby: true is_active: true is_dttm: false python_date_format: null - type: String - verbose_name: Course Name + type: Int64 + verbose_name: Video Duration - advanced_data_type: null column_name: course_run description: null @@ -60,10 +48,10 @@ columns: is_active: true is_dttm: false python_date_format: null - type: LowCardinality(String) + type: String verbose_name: Org - advanced_data_type: null - column_name: avg_video_length + column_name: rewatched_time description: null expression: null extra: {} @@ -72,10 +60,10 @@ columns: is_active: true is_dttm: false python_date_format: null - type: Float64 - verbose_name: Avg Video Length + type: Int64 + verbose_name: Rewatched Time - advanced_data_type: null - column_name: count_videos + column_name: watched_time description: null expression: null extra: {} @@ -84,10 +72,10 @@ columns: is_active: true is_dttm: false python_date_format: null - type: UInt64 - verbose_name: Count Videos + type: Int64 + verbose_name: Watched Time - advanced_data_type: null - column_name: watched_duration + column_name: actor_id description: null expression: null extra: {} @@ -96,10 +84,10 @@ columns: is_active: true is_dttm: false python_date_format: null - type: Int64 - verbose_name: Watched Duration + type: String + verbose_name: Actor Id - advanced_data_type: null - column_name: video_duration + column_name: course_key description: null expression: null extra: {} @@ -108,10 +96,10 @@ columns: is_active: true is_dttm: false python_date_format: null - type: Int64 - verbose_name: Video Duration + type: String + verbose_name: Course Key - advanced_data_type: null - column_name: rewatched + column_name: video_id description: null expression: null extra: {} @@ -120,8 +108,8 @@ columns: is_active: true is_dttm: false python_date_format: null - type: UInt8 - verbose_name: Rewatched + type: String + verbose_name: Video Id database_uuid: 21174b6c-4d40-4958-8161-d6c3cf5e77b6 default_endpoint: null description: null @@ -133,32 +121,41 @@ metrics: - currency: null d3format: null description: null - expression: count(*) - count(distinct actor_id) + expression: (sum(rewatched_time)/count(actor_id))/sum(video_duration) extra: warning_markdown: '' - metric_name: repeat_views + metric_name: rewatched_percent metric_type: null - verbose_name: Repeat Views + verbose_name: '% Video Seconds Rewatched' warning_text: null - currency: null d3format: null description: null - expression: count(distinct actor_id) + expression: (sum(watched_time)/count(actor_id))/sum(video_duration) extra: warning_markdown: '' - metric_name: unique_viewers + metric_name: watched_percent metric_type: null - verbose_name: Unique Viewers + verbose_name: '% Video Seconds Watched' warning_text: null - currency: null d3format: null description: null - expression: count(*) + expression: count(distinct video_id) extra: warning_markdown: '' - metric_name: total_views + metric_name: video_count + metric_type: null + verbose_name: Number of Videos + warning_text: null +- currency: null + d3format: null + description: null + expression: avg(video_duration) + extra: {} + metric_name: avg_video_length metric_type: null - verbose_name: Total Views + verbose_name: Avg Video Length (seconds) warning_text: null - currency: null d3format: null diff --git a/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql b/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql index e5b4827ce..bb81c97b0 100644 --- a/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql +++ b/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql @@ -1,5 +1,14 @@ -select names.org as org, names.course_key as course_key, actor_id, video_id, video_duration, watched_time, rewatched_time +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 event_sink.watched_video_duration left join event_sink.course_names as names using org, course_key where 1 = 1 {% include 'openedx-assets/queries/common_filters.sql' %} From 7efffc2f14635b9e556e0d4e02de32543d87eabe Mon Sep 17 00:00:00 2001 From: Sara Burns Date: Wed, 11 Sep 2024 11:14:54 -0400 Subject: [PATCH 5/9] fix: updates --- .../openedx-assets/queries/common_filters.sql | 3 ++- .../queries/watched_video_duration.sql | 22 +++++++++---------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/tutoraspects/templates/openedx-assets/queries/common_filters.sql b/tutoraspects/templates/openedx-assets/queries/common_filters.sql index 093a153b1..f26d48ea4 100644 --- a/tutoraspects/templates/openedx-assets/queries/common_filters.sql +++ b/tutoraspects/templates/openedx-assets/queries/common_filters.sql @@ -16,7 +16,8 @@ {% if filter_values("tag") != [] %} and course_key in ( select course_key - from {% endraw -%} {{ DBT_PROFILE_TARGET_DATABASE }}.most_recent_course_tags{%- raw %} + from + {% endraw -%} {{ DBT_PROFILE_TARGET_DATABASE }}.most_recent_course_tags{%- raw %} where tag in (select replaceAll(arrayJoin({{ filter_values("tag") }}), '- ', '')) ) diff --git a/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql b/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql index bb81c97b0..231c42ce8 100644 --- a/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql +++ b/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql @@ -1,14 +1,14 @@ - -select - names.org as org, - names.course_key as course_key, - names.course_name as course_name, +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, + actor_id, + video_id, + video_duration, + watched_time, rewatched_time -from event_sink.watched_video_duration -left join event_sink.course_names as names using org, course_key +from event_sink.watched_video_duration +left join event_sink.course_names as names +using org, course_key where 1 = 1 {% include 'openedx-assets/queries/common_filters.sql' %} From 2881774f2dc2c6159b2b20bb5256583b6b1d7b3a Mon Sep 17 00:00:00 2001 From: Sara Burns Date: Wed, 11 Sep 2024 11:26:27 -0400 Subject: [PATCH 6/9] fix: updates --- .../charts/Video_Engagement_e05c6b.yaml | 416 ----------------- .../charts/Video_Engagement_e26ecc.yaml | 425 ------------------ 2 files changed, 841 deletions(-) delete mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_e05c6b.yaml delete mode 100644 tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_e26ecc.yaml 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 deleted file mode 100644 index f55c40876..000000000 --- a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_e05c6b.yaml +++ /dev/null @@ -1,416 +0,0 @@ -_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 deleted file mode 100644 index 7cd72674d..000000000 --- a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_e26ecc.yaml +++ /dev/null @@ -1,425 +0,0 @@ -_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: - datasource: - id: 647 - type: table - force: false - form_data: - 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: [] - dashboards: - - 161 - datasource: 647__table - extra_form_data: {} - force: false - 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 - result_format: json - result_type: full - row_limit: 50000 - server_page_length: 10 - show_cell_bars: false - slice_id: 1278 - 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: - - col: started_at - op: TEMPORAL_RANGE - val: No filter - 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_desc: true - orderby: - - - 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 - - false - post_processing: [] - row_limit: 50000 - series_limit: 0 - url_params: {} - result_format: json - result_type: full -slice_name: Video Engagement -uuid: e26ecce9-32cf-4ac5-8706-14dd9f8e0e42 -version: 1.0.0 -viz_type: table From 9410d2756560bbf0447ca5e9f56b695cf3d09346 Mon Sep 17 00:00:00 2001 From: Sara Burns Date: Wed, 11 Sep 2024 11:41:04 -0400 Subject: [PATCH 7/9] fix: updates --- ...eb66.yaml => Video_Engagement_123e1a.yaml} | 8 +- ...3f53.yaml => Video_Engagement_1cf14f.yaml} | 8 +- .../Course_Comparison_Dashboard.yaml | 102 +++++++++--------- .../datasets/watched_video_duration.yaml | 33 +++--- .../queries/watched_video_duration.sql | 4 +- 5 files changed, 79 insertions(+), 76 deletions(-) rename tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/{Video_Engagement_4ceb66.yaml => Video_Engagement_123e1a.yaml} (94%) rename tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/{Video_Engagement_443f53.yaml => Video_Engagement_1cf14f.yaml} (94%) diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_4ceb66.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_123e1a.yaml similarity index 94% rename from tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_4ceb66.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_123e1a.yaml index 87c06087f..e9d23ad7b 100644 --- a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_4ceb66.yaml +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_123e1a.yaml @@ -1,4 +1,4 @@ -_file_name: Video_Engagement_4ceb66.yaml +_file_name: Video_Engagement_123e1a.yaml cache_timeout: null certification_details: null certified_by: null @@ -49,7 +49,7 @@ query_context: d3NumberFormat: ',.1%' conditional_formatting: [] dashboards: - - 2241 + - 2441 datasource: 121__table extra_form_data: {} force: false @@ -70,7 +70,7 @@ query_context: row_limit: 50000 server_page_length: 10 show_cell_bars: false - slice_id: 1463 + slice_id: 1465 table_timestamp_format: smart_date temporal_columns_lookup: {} viz_type: table @@ -102,6 +102,6 @@ query_context: result_format: json result_type: full slice_name: Video Engagement -uuid: 4ceb665e-ceb0-4ac8-8171-513269000d58 +uuid: 123e1a89-585b-4104-872c-ef4f972f42a7 version: 1.0.0 viz_type: table diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_443f53.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_1cf14f.yaml similarity index 94% rename from tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_443f53.yaml rename to tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_1cf14f.yaml index 22b01fa22..5bf6bb483 100644 --- a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_443f53.yaml +++ b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/charts/Video_Engagement_1cf14f.yaml @@ -1,4 +1,4 @@ -_file_name: Video_Engagement_443f53.yaml +_file_name: Video_Engagement_1cf14f.yaml cache_timeout: null certification_details: null certified_by: null @@ -49,7 +49,7 @@ query_context: d3NumberFormat: ',.1%' conditional_formatting: [] dashboards: - - 2241 + - 2441 datasource: 121__table extra_form_data: {} force: false @@ -70,7 +70,7 @@ query_context: row_limit: 50000 server_page_length: 10 show_cell_bars: false - slice_id: 1463 + slice_id: 1361 table_timestamp_format: smart_date temporal_columns_lookup: {} viz_type: table @@ -102,6 +102,6 @@ query_context: result_format: json result_type: full slice_name: Video Engagement -uuid: 443f532c-675f-4c5e-bd1a-254ed3b98920 +uuid: 1cf14f26-6957-482c-9dde-649c2c65ec13 version: 1.0.0 viz_type: table diff --git a/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/dashboards/Course_Comparison_Dashboard.yaml b/tutoraspects/templates/aspects/build/aspects-superset/openedx-assets/assets/dashboards/Course_Comparison_Dashboard.yaml index 82442f528..69972d060 100644 --- 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 @@ -18,8 +18,8 @@ metadata: - 801 - 1181 - 1381 - - 1463 - - 1464 + - 1465 + - 1466 scope: global id: 1081 '1181': @@ -32,8 +32,8 @@ metadata: - 801 - 1081 - 1381 - - 1463 - - 1464 + - 1465 + - 1466 scope: global id: 1181 '121': @@ -46,8 +46,8 @@ metadata: - 1081 - 1181 - 1381 - - 1463 - - 1464 + - 1465 + - 1466 scope: global id: 121 '1381': @@ -60,11 +60,11 @@ metadata: - 801 - 1081 - 1181 - - 1463 - - 1464 + - 1465 + - 1466 scope: global id: 1381 - '1463': + '1465': crossFilters: chartsInScope: - 121 @@ -75,10 +75,10 @@ metadata: - 1081 - 1181 - 1381 - - 1464 + - 1466 scope: global - id: 1463 - '1464': + id: 1465 + '1466': crossFilters: chartsInScope: - 121 @@ -89,9 +89,9 @@ metadata: - 1081 - 1181 - 1381 - - 1463 + - 1465 scope: global - id: 1464 + id: 1466 '161': crossFilters: chartsInScope: @@ -102,8 +102,8 @@ metadata: - 1081 - 1181 - 1381 - - 1463 - - 1464 + - 1465 + - 1466 scope: global id: 161 '221': @@ -116,8 +116,8 @@ metadata: - 1081 - 1181 - 1381 - - 1463 - - 1464 + - 1465 + - 1466 scope: global id: 221 '421': @@ -130,8 +130,8 @@ metadata: - 1081 - 1181 - 1381 - - 1463 - - 1464 + - 1465 + - 1466 scope: global id: 421 '801': @@ -144,8 +144,8 @@ metadata: - 1081 - 1181 - 1381 - - 1463 - - 1464 + - 1465 + - 1466 scope: global id: 801 color_scheme: supersetColors @@ -187,8 +187,8 @@ metadata: - 1081 - 1181 - 1381 - - 1463 - - 1464 + - 1465 + - 1466 scope: excluded: [] rootPath: @@ -466,35 +466,35 @@ position: - TAB-GuHDMLqRC - ROW-17CIe_GHN type: CHART - CHART-explore-1463-1: + CHART-explore-1465-1: children: [] - id: CHART-explore-1463-1 + id: CHART-explore-1465-1 meta: - chartId: 1463 + chartId: 1465 height: 50 sliceName: Video Engagement - uuid: 443f532c-675f-4c5e-bd1a-254ed3b98920 + uuid: 1cf14f26-6957-482c-9dde-649c2c65ec13 width: 12 parents: - ROOT_ID - TABS-6vozRyRn2o - TAB-J31MdXj-sa - - ROW-5ZoK4K8H4 + - ROW-ea7R1H5r0q type: CHART - CHART-explore-1464-1: + CHART-explore-1466-1: children: [] - id: CHART-explore-1464-1 + id: CHART-explore-1466-1 meta: - chartId: 1464 + chartId: 1466 height: 50 sliceName: Video Engagement - uuid: 4ceb665e-ceb0-4ac8-8171-513269000d58 + uuid: 123e1a89-585b-4104-872c-ef4f972f42a7 width: 12 parents: - ROOT_ID - TABS-6vozRyRn2o - TAB-J31MdXj-sa - - ROW-CunHlr7PN2 + - ROW-ksE1lVL9ko type: CHART DASHBOARD_VERSION_KEY: v2 GRID_ID: @@ -535,10 +535,10 @@ position: - TABS-6vozRyRn2o - TAB-GuHDMLqRC type: ROW - ROW-5ZoK4K8H4: + ROW-EDze1WWiC: children: - - CHART-explore-1463-1 - id: ROW-5ZoK4K8H4 + - CHART-explore-1275-1 + id: ROW-EDze1WWiC meta: background: BACKGROUND_TRANSPARENT parents: @@ -546,10 +546,10 @@ position: - TABS-6vozRyRn2o - TAB-J31MdXj-sa type: ROW - ROW-EDze1WWiC: + ROW-FolfXlYAh: children: - - CHART-explore-1275-1 - id: ROW-EDze1WWiC + - CHART-explore-1294-1 + id: ROW-FolfXlYAh meta: background: BACKGROUND_TRANSPARENT parents: @@ -557,16 +557,16 @@ position: - TABS-6vozRyRn2o - TAB-J31MdXj-sa type: ROW - ROW-FolfXlYAh: + ROW-FvlinEtRl: children: - - CHART-explore-1294-1 - id: ROW-FolfXlYAh + - CHART-explore-1466-1 + id: ROW-FvlinEtRl meta: background: BACKGROUND_TRANSPARENT parents: - ROOT_ID - TABS-6vozRyRn2o - - TAB-J31MdXj-sa + - TAB-GuHDMLqRC type: ROW ROW-O1XuzgpIo: children: @@ -579,16 +579,18 @@ position: - TABS-6vozRyRn2o - TAB-GuHDMLqRC type: ROW - ROW-jMHppneXZ: + ROW-ea7R1H5r0q: children: - - CHART-explore-1464-1 - id: ROW-jMHppneXZ + - CHART-explore-1465-1 + id: ROW-ea7R1H5r0q meta: + '0': ROOT_ID + '1': TABS-6vozRyRn2o background: BACKGROUND_TRANSPARENT parents: - ROOT_ID - TABS-6vozRyRn2o - - TAB-GuHDMLqRC + - TAB-J31MdXj-sa type: ROW ROW-otbcoXVOj: children: @@ -629,7 +631,7 @@ position: - ROW-17CIe_GHN - ROW-O1XuzgpIo - ROW--27JFXNWc - - ROW-jMHppneXZ + - ROW-FvlinEtRl id: TAB-GuHDMLqRC meta: defaultText: Tab title @@ -645,7 +647,7 @@ position: - ROW-FolfXlYAh - ROW-EDze1WWiC - ROW-y57KZVzDt - - ROW-5ZoK4K8H4 + - ROW-ea7R1H5r0q id: TAB-J31MdXj-sa meta: defaultText: Tab title 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 index f58f75980..6edec5e11 100644 --- 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 @@ -6,7 +6,8 @@ columns: column_name: course_name description: null expression: '' - extra: {} + extra: + warning_markdown: null filterable: true groupby: true is_active: true @@ -18,7 +19,8 @@ columns: column_name: video_duration description: null expression: null - extra: {} + extra: + warning_markdown: null filterable: true groupby: true is_active: true @@ -30,7 +32,8 @@ columns: column_name: course_run description: null expression: null - extra: {} + extra: + warning_markdown: null filterable: true groupby: true is_active: true @@ -42,7 +45,8 @@ columns: column_name: org description: null expression: null - extra: {} + extra: + warning_markdown: null filterable: true groupby: true is_active: true @@ -122,8 +126,7 @@ metrics: d3format: null description: null expression: (sum(rewatched_time)/count(actor_id))/sum(video_duration) - extra: - warning_markdown: '' + extra: {} metric_name: rewatched_percent metric_type: null verbose_name: '% Video Seconds Rewatched' @@ -132,8 +135,7 @@ metrics: d3format: null description: null expression: (sum(watched_time)/count(actor_id))/sum(video_duration) - extra: - warning_markdown: '' + extra: {} metric_name: watched_percent metric_type: null verbose_name: '% Video Seconds Watched' @@ -141,21 +143,20 @@ metrics: - currency: null d3format: null description: null - expression: count(distinct video_id) - extra: - warning_markdown: '' - metric_name: video_count + expression: avg(video_duration) + extra: {} + metric_name: avg_video_length metric_type: null - verbose_name: Number of Videos + verbose_name: Avg Video Length (seconds) warning_text: null - currency: null d3format: null description: null - expression: avg(video_duration) + expression: count(distinct video_id) extra: {} - metric_name: avg_video_length + metric_name: video_count metric_type: null - verbose_name: Avg Video Length (seconds) + verbose_name: Number of Videos warning_text: null - currency: null d3format: null diff --git a/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql b/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql index 231c42ce8..660908a73 100644 --- a/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql +++ b/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql @@ -8,7 +8,7 @@ select video_duration, watched_time, rewatched_time -from event_sink.watched_video_duration -left join event_sink.course_names as names +from {% endraw -%} {{ ASPECTS_EVENT_SINK_DATABASE }}.watched_video_duration{%- raw %} +left join {% endraw -%} {{ ASPECTS_EVENT_SINK_DATABASE }}.course_names{%- raw %} as names using org, course_key where 1 = 1 {% include 'openedx-assets/queries/common_filters.sql' %} From 32d88d940f7eac6d7528fda751bc5649a68b2cb4 Mon Sep 17 00:00:00 2001 From: Sara Burns Date: Wed, 11 Sep 2024 11:41:13 -0400 Subject: [PATCH 8/9] fix: updates --- .../openedx-assets/queries/watched_video_duration.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql b/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql index 660908a73..41347d4c2 100644 --- a/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql +++ b/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql @@ -9,6 +9,7 @@ select watched_time, rewatched_time from {% endraw -%} {{ ASPECTS_EVENT_SINK_DATABASE }}.watched_video_duration{%- raw %} -left join {% endraw -%} {{ ASPECTS_EVENT_SINK_DATABASE }}.course_names{%- raw %} as names +left join + {% endraw -%} {{ ASPECTS_EVENT_SINK_DATABASE }}.course_names{%- raw %} as names using org, course_key where 1 = 1 {% include 'openedx-assets/queries/common_filters.sql' %} From 99834f2a6c48cdedfea6fd36431ac62feda8656b Mon Sep 17 00:00:00 2001 From: Sara Burns Date: Wed, 11 Sep 2024 11:53:32 -0400 Subject: [PATCH 9/9] fix: updatse --- .../openedx-assets/queries/watched_video_duration.sql | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql b/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql index 41347d4c2..413943797 100644 --- a/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql +++ b/tutoraspects/templates/openedx-assets/queries/watched_video_duration.sql @@ -8,8 +8,7 @@ select video_duration, watched_time, rewatched_time -from {% endraw -%} {{ ASPECTS_EVENT_SINK_DATABASE }}.watched_video_duration{%- raw %} -left join - {% endraw -%} {{ ASPECTS_EVENT_SINK_DATABASE }}.course_names{%- raw %} as names +from {{ ASPECTS_EVENT_SINK_DATABASE }}.watched_video_duration +left join {{ ASPECTS_EVENT_SINK_DATABASE }}.course_names as names using org, course_key where 1 = 1 {% include 'openedx-assets/queries/common_filters.sql' %}