The Instructure Community will enter a read-only state on November 22, 2025 as we prepare to migrate to our new Community platform in early December.
Read our blog post for more info about this change.
Found this content helpful? Log in or sign up to leave a like!
Hi,
Is it possible to know how many faculty are using speedgrader in Canvas?
li
You can go to individual users/instructors and scroll down to Page Views, you can download a CSV file.
You could possibly script this, but not sure how.
https://canvas.instructure.com/users/123/page_views.csv
I have too many users to use a lot of the API or csv files for data processes, and go for Canvas Data Portal instead.
I use the API mostly for sending/scripting tasks into Canvas.
In Canvas Data, you'd want the Requests Table.
I don't have time to dive into a query with joins for you at the moment, but here's a basic starting point.
SELECT DISTINCT user_id FROM dbo.requests WHERE url LIKE '%/gradebook/speed_grader%'
You could then join, on course, user, and even count the number of times/days the instructor hits that url.
Let me know if this is something you're interested in and I can work out an example. I like sharing examples for the community, so they are free to use and then I catalog them for our own use if/when we need them. :smileygrin:
Edit: Offering the following to start getting it into the community conversation.
I can also see that it's (speed_grader) in the asset_accessed.asset_subtype of Canvas Live Events, but you would need to store or collect these events as they happen.
Live Events (experimental) - Canvas LMS REST API Documentation
Live Events Services - Table of Contents
I'd start with Canvas Data. Live Events is tricky, and as far as I can know, is best for notification services, or temporarily handling the delay in Canvas Data.
How about using rubrics api? I think people use speedgrader most likely have a rubric. It might now include all users who are using speedgrader. I will look into the pageview and data portal.
Speedgrader and rubrics are probably tied more to assignments than courses. Some assignments might use rubrics, some assignments might be easier graded by speed grader. Some assignments are auto graded or can be. Other assignments might be peer reviewed.
I may have to edit that statement in a bit...
...down the rabbit hole I go...
update:
Apparently rubric assignments must be graded in Speedgrader, but not every assignment graded with Speedgrader has a rubric.
I know you don't have Canvas Data yet, but these conversations end up bubbling up over time and it's nice when they seem to get somewhere, especially for those reviewing them later.
This may or may not answer your questions.
Here's a query that gets the course name, and any instructor who grades an assignment. Since a course could have multiple instructors grading I thought it would be best to show that. I've also added the total number of course_assignments.
The number of rubric_assignments, the graded_assignments and the assignments graded with speedgrader, sg_assignments.
Note, that if you the only way in Canvas data to get the assignments with a rubric seems to be on submission_dim.has_rubric_assessment = true, which means if you run this query during an active term you will only be assessing rubrics against submitted assignments. If you want to assignments that have rubrics, you'll probably have have to use the API.
Likewise, graded_assignments, and sg_assigments columns are based on submissions_dim and requests_table respectively, meaning they are only available once the action has been performed. Again, if you run this query during an active term, your data is current up to the data of your data, and the activity of your users. If you run this on a previous term, you'd get more 1:1 data... however, an instructor may choose not to grade an assignment, or students might miss one, some assignments being optional as well.
Additional note about requests table.
I wrote this against our production database, which only has the requests table for the current school year.
It took 9.6 seconds, and we're just finishing up first quarter.
I also ran it against the test database where I have requests since May 2016, and ran this query for last years terms.
That one took 14 minutes.
I'm also going to invite @James , who may be the Full Stack Master of Rubrics and Data, in case he has something to add/correct.
This is slightly MSSQL flavored. I try to leave things as simple as possible, and use features that have commonly transposable functions for community examples.
Line 88 for Term IDs, you would need the full Shard/Instance ID ex: 990000000000123
SELECT
name AS course_name,
x.*
FROM
dbo.course_dim
LEFT JOIN (
SELECT
sg.course_id,
sortable_name AS instructor,
user_id,
course_assignments,
rubric_assignments,
graded_assignments,
count(url) sg_assignments
FROM (
SELECT
DISTINCT sortable_name,
user_id,
course_id,
web_application_controller,
web_application_action,
url
FROM
dbo.requests
LEFT JOIN dbo.user_dim ON (requests.user_id = user_dim.id)
WHERE
user_id IS NOT NULL
AND web_application_controller = 'gradebooks'
AND web_application_action = 'speed_grader'
AND web_application_context_type = 'Course'
AND PATINDEX('%.json?%', url) = 0
) sg
LEFT JOIN (
SELECT
course_id,
count(assignment_id) rubric_assignments
FROM (
SELECT
DISTINCT course_id,
assignment_id
FROM
dbo.submission_dim
LEFT JOIN dbo.assignment_dim ON (
submission_dim.assignment_id = assignment_dim.id
)
WHERE
submission_dim.has_rubric_assessment = 'true'
) ra
GROUP BY
course_id
) ra ON (ra.course_id = sg.course_id)
LEFT JOIN (
SELECT
course_id,
count(assignment_id) graded_assignments
FROM (
SELECT
DISTINCT course_id,
assignment_id
FROM
dbo.submission_dim
LEFT JOIN dbo.assignment_dim ON (
submission_dim.assignment_id = assignment_dim.id
)
WHERE
submission_dim.workflow_state = 'graded'
) ga
GROUP BY
course_id
) ga ON (ga.course_id = sg.course_id)
JOIN (
SELECT
course_id,
count(id) course_assignments
FROM
dbo.assignment_dim
GROUP BY
course_id
) ca ON (ca.course_id = sg.course_id)
GROUP BY
sortable_name,
user_id,
sg.course_id,
course_assignments,
rubric_assignments,
graded_assignments
) x ON (course_dim.id = x.course_id)
WHERE course_dim.enrollment_term_id IN (123,456,789)
AND x.instructor IS NOT NULL
ORDER BY
course_name,
instructor;Sample result, current term:
course_name | course_id | instructor | user_id | course_assignments | rubric_assignments | graded_assignments | sg_assignments |
Course Name 1 | 100000001234567 | Teacher 1 | 1 | 196 | 57 | 107 | 62 |
Course Name 2 | 100000001234568 | Teacher 2 | 2 | 80 | 48 | 47 | 42 |
Course Name 3 | 100000001234569 | Teacher 3 | 3 | 184 | 46 | 82 | 53 |
Course Name 4 | 100000001234510 | Teacher 4 | 4 | 80 | 40 | 55 | 47 |
Course Name 4 | 100000001234510 | Teacher 5 | 5 | 80 | 40 | 55 | 1 |
Course Name 4 | 100000001234510 | Teacher 6 | 6 | 80 | 40 | 55 | 3 |
Course Name 5 | 100000001234511 | Teacher 7 | 7 | 182 | NULL | 55 | 83 |
Course Name 6 | 100000001234512 | Teacher 8 | 8 | 167 | NULL | 79 | 23 |
Course Name 7 | 100000001234513 | Teacher 9 | 9 | 182 | NULL | 55 | 83 |
Course Name 8 | 100000001234514 | Teacher 10 | 10 | 172 | 33 | 69 | 39 |
Community helpTo interact with Panda Bot, our automated chatbot, you need to sign up or log in:
Sign inTo interact with Panda Bot, our automated chatbot, you need to sign up or log in:
Sign in