Module Progress Report?

Jump to solution
HeatherLuna
Community Member

Hi there,

Currently it looks like the only way to view Module progress if via the UI at the student level. Are there any other reports that get at Module completion in a different way at an aggregate level? I thought Admin Analytics was the key but it looks like that only shows grading for what a student has completed so far, and isn't tracking it in it's entirety.

Thanks!

Heather

0 Likes
2 Solutions
jerry_nguyen
Community Coach
Community Coach

@HeatherLuna 

It's possible with Canvas Data , Canvas Data allows you to view data site-wide and you can use SQL to create different data reports. You might need to contact your CSM to enable Canvas Data for your institution.

I would recommend you to join the Data & Analytics group for further assistance 

If you need help setting up Canvas Data, feel free to send me a PM 🙂

If you already have Canvas Data, the following query will show Module status for all students in your Canvas

select canvas.context_module_progressions.id "ID",
canvas.users.name "Student Name",
canvas.enrollments.workflow_state  "Enrollment Status",
canvas.pseudonyms.sis_user_id "SIS ID",
canvas.courses.name "Course",
canvas.context_modules.name "Module Name",
canvas.context_module_progressions.workflow_state "Module Progression Status",
canvas.context_modules.workflow_state "Module Status",
canvas.context_module_progressions.completed_at at time zone 'utc' at time zone 'Australia/Melbourne' "Date"
from canvas.context_module_progressions
JOIN canvas.users on canvas.users.id = canvas.context_module_progressions.user_id
JOIN canvas.pseudonyms on canvas.users.id = canvas.pseudonyms.user_id
JOIN canvas.context_modules on canvas.context_modules.id = canvas.context_module_progressions.context_module_id
JOIN canvas.courses on canvas.courses.id = canvas.context_modules.context_id
JOIN canvas.enrollments on canvas.enrollments.user_id = canvas.context_module_progressions.user_id and canvas.enrollments.course_id = canvas.courses.id

 

 

View solution in original post

James
Community Champion

@HeatherLuna 

There is no built-in report so you would need to compile your own report. @jerry_nguyen gave you a way using Canvas Data.

You can also get the information through the REST API. You get the module progress for a student one at a time and then iterate every student in the course to get the results for the entire course. If you have multiple courses, you would need to iterate through each course.

Iterating through all those takes time and you need someplace to store the results so you can compile it into a report. Canvas Data 2 takes longer to set up, but it's faster for the actual query since the data is already downloaded. The information in Canvas Data 2 is less stale than Canvas Data (1), but your data still might be a couple of hours old and it takes some time to download the data (I update our Canvas Data every four hours). While the API approach takes longer to execute, but the data is current.

The API call you need is to List modules. You add parameters to include[] the items and then specify a student_id. The note for the student_id says "returns module complettion information for the student with this id."

The List modules endpoint is what Canvas uses when you go to Modules and click View Progress. So you're getting the same information the UI shows, but through the API. Depending on how many modules you have, you can add a per_page=100 parameter to hopefully cut down on the number of requests. The default is to only send 10 modules at a time and you have to use pagination to get the rest.

I haven't tested it with a specific student, but there's a note that says the items may not be complete and that Canvas is free to omit items for a particular module if it deems them too numerous inline. So, telling it to deliver 100 modules-worth of information may run afoul of there being too many items. The list module items endpoint also allows for the student_id to be specified. I would start with the list modules and then fall back to the list module items for any modules that didn't return items.

If you didn't go crazy with the number of items in each module, it probably won't be a problem to just use the list module endpoint.

View solution in original post