Does Canvas LMS have any type of progress indicator to inform teachers or students of a student's progress as far as percentage of the course that has been completed? In my Canvas course all assignments are prepopulated for the semester.
@YolindaWilson
Do you use modules with module requirements? If not, then Canvas doesn't know how far through the course a student is.
If you're using module with module requirements, then Canvas has that information, but they don't give it to you as a simple percentage.
The option available through the web interface is to go to the Modules page and click View Progress at the top. This is for one student at a time and it just shows the details about that student's progress without giving a percentage. It's just for one student at time.
For students, they see icons on the modules page (or home page if it's set to modules), but they don't see a percentage. They don't get the nice list of requirements like the teacher does.
This is probably not your best option if you're just looking for a percentage.
There is an option available through the REST API called Get bulk user progress. It doesn't give you a percentage, but it gives you the number of requirements and the number of requirements completed. You would need to do the division yourself to get a percentage.
This report can be obtained through your browser, but it limits the results to 100 students at a time. When I tried to fetch this for our orientation course that has about 2500 students, it took over 2 minutes to get the whole dataset, so I looked for faster ways. If you're working with small classes, the REST API is the fastest way to get the data.
I'll describe how to do this using Chrome.
In Firefox, it is automatically pretty-printed, but in Chrome, there's a checkbox at the top to pretty-print the results.
You'll get an object like this:
[ { "display_name": "James Jones", "progress": { "requirement_count": 14, "requirement_completed_count": 7, "next_requirement_url": null, "completed_at": null } }, { "display_name": "Danny Test", "progress": { "requirement_count": 12, "requirement_completed_count": 4, "next_requirement_url": null, "completed_at": null } } ]
I have completed 7/14 requirements for 50%. Danny has completed 4/12 for 33.3%.
That will only give you the first 10 students. If you have more than 10 students, you can add ?per_page=100 to the end of the URL like /api/v1/courses/896851/bulk_user_progress?per_page=100.
You cannot go more than 100. Well, you can, but Canvas won't give you more than 100 and it will only confuse people.
If you have more than 100 students, then you'll need to get the next page. Add &page=2 to do this. /api/v1/courses/896851/bulk_user_progress?per_page=100&page=2
If you have more than 200 students, then change page=2 to page=3 and so on until you have the whole list.
If you want this in a spreadsheet, you can take the output, copy it to your clipboard, then go to a website like ConvertCSV that will convert JSON to CSV. Paste the results into Step 1 and scroll down to the bottom to get the results. You can then bring that into a spreadsheet where you can add a formula to convert the rate into a percentage.
If students attempt this, they will get an unauthorized error.
The third way is that faster way that I found when the bulk_user_progress was too slow for me. That involves using GraphQL. I set it up so that I could give it a list of students, whereas the REST API approach didn't allow me to specify which students I wanted. I was able to narrow down the list of students to just those who had actually spent time in the class and, since we remove students once they're completed, this really sped up the process.
Better yet, it just gives the name and percentage. I did remove the part about specifying the students from the code I'm giving you to simplify things. You could also get the Canvas Student ID and potentially SIS ID, but I removed that from the code I'm giving as well. If you have multiple students with the same name, you would need to look at IDs of some kind.
Go to your Canvas dashboard and add /graphiql at the end. Hit enter.
In the editor section in the middle, paste this code.
query courseCompletionProgress($courseId: ID!, $c1: String) { course(id: $courseId) { usersConnection( filter: {enrollmentTypes: StudentEnrollment, excludeTestStudents: true} first: 100 after: $c1 ) { nodes { sortableName courseProgression { requirements { completionPercentage } } } pageInfo { hasNextPage endCursor } } } }
Click on the Variables tab at the bottom and add this JSON object. Change the courseId to match your Canvas course ID instead of the 896851 in my example.
{ "courseId": 896851, "c1": null }
Now click the big run icon (pinkish with a white triangle in the middle).
The results will appear on the right side.
Here are the complete results for my sandbox course.
{ "data": { "course": { "usersConnection": { "nodes": [ { "sortableName": "Jones, James", "courseProgression": { "requirements": { "completionPercentage": 50 } } }, { "sortableName": "Test, Danny", "courseProgression": { "requirements": { "completionPercentage": 33.33333333333333 } } } ], "pageInfo": { "hasNextPage": false, "endCursor": "Mg" } } } } }
We can see that James Jones has 50% complete and Danny Test has 33.33333333333333% complete.
If you take that to the ConvertCSV tool and paste it in for Step 1, you get a nice table at the bottom with some really long names, but the desired data.
If you have more than 100 students in the class, then the pageInfo at the bottom will have hasNextPage as true rather than false. In this case, take the endCursor value and paste it in the variable section for the c1 variable, replacing the null that was there to start with. Make sure that you keep the quotes around the endCursor value. Then run the code again and analyze the results. Keep doing that until you get a hasNextPage that is false.
Students can use this, but they will only get the progression for themselves. If they have permissions to view other students, they will get a list of the entire class, but the courseProgression will be null for everyone else.
I personally think the GraphQL approach is nicer, but there is more work involved than just changing the URL a little. If you want to do this for multiple courses, you can just change the variables section, being sure to reset c1 to null when you switch courseId's.
If you knew that your classes never had more than 100 students, you could remove the pageInfo section, the $c1:String in the first line, the after: $c1 line, and the c1 in the variables section. If you were doing this for just one class, you could just put in the ID on the course line instead of the variable.
Here is the simplified version that you could pass on to your students if you want them to get the percentage (just change the ID before you give it to them).
query courseCompletionProgress { course(id: 896851) { usersConnection( filter: {enrollmentTypes: StudentEnrollment, excludeTestStudents: true} first: 100 ) { nodes { sortableName courseProgression { requirements { completionPercentage } } } } } }
Hi @YolindaWilson
There are a few ways you can track progress, however, it is dependent on how your Canvas Course has been set up. In module formats, if pre-requisites have been set up, you can check your progress of completion. This link might assist with modules and progress.
There are tools and technologies, like DesignPlus that can be added as an LTI, this tool has a progress bar that can be added to pages (provided the modules have been set up appropriately).
I hope this helps.
Thanks
Jen
Seven year in trying to hack Canvas to support differentiation, I quit. I give up. This is impossible. I created a quiz, tried to differentiate it with Tags and Sections, and —of course— Canvas will not sync differentiated assignment that do not align with County-created sections back to Synergy. Sorry, County. If you want…
Another classic for the…"Canvas Is The Most Intentionally Passive-Aggressive Piece of Software Ever Written / Nobody Does Weaponized Incompetence Better Than Canvas" I give you… You click on Assignments that "Need Grading" and it takes you to the assignmen…but then forces you to sort for the assignments that need…
I recently discovered an error in a quiz question for an exam my students have already taken. I want to regrade that question so that anyone who had that question in their Quiz would get a point regardless of their answer since it was not possible to answer it given the choices. Unfortunately, as best I can tell, because…
I assigned the first draft of an assignment. Each student got rubric comments from me and from one peer. The Speed Grader view gives me a "Select Rubric" menu, allowing me to toggle between my comments and the peer comments. But the Gradebook's "Bulk Download Rubrics" command generates a CSV file with only the peers'…
Hi all, I'm looking to see if this has happened for anyone else. A student completed a Classic Quiz and one question was counted wrong that should not have been. In the quiz settings, the instructor entered 9 possible answers for this question. The student entered one of these answers. However, that particular question was…