# Level 1 Aggregated

* [Taskforce vs. Taskforce Rolling](#taskforce-vs.-taskforce-rolling)
* [Interactive Mart Dependency Diagram](#taskforcemartlevel1aggregated-interactivemartdependencydiagram)
* [Schema](#taskforcemartlevel1aggregated-schema)
* [Field Structure and Subcategories](#taskforcemartlevel1aggregated-fieldstructureandsubcategories)
  * [Assignment Weight Groupings](#taskforcemartlevel1aggregated-assignmentweightgroupings)
  * [Week\_in\_term Calculation](#taskforcemartlevel1aggregated-week_in_termcalculation)
* [Assignments](#taskforcemartlevel1aggregated-assignments)
  * [Number of Submissions](#taskforcemartlevel1aggregated-numberofsubmissions)
  * [Number of Assignments](#taskforcemartlevel1aggregated-numberofassignments)
  * [Number of Missing Submissions](#taskforcemartlevel1aggregated-numberofmissingsubmissions)
  * [Number of Late Submissions](#taskforcemartlevel1aggregated-numberoflatesubmissions)
  * [Average Time Buffer in Hours](#taskforcemartlevel1aggregated-averagetimebufferinhours)
  * [Average Published Score Percentage](#taskforcemartlevel1aggregated-averagepublishedscorepercentage)
* [Discussions](#taskforcemartlevel1aggregated-discussions)
  * [Discussion Entry Counts](#taskforcemartlevel1aggregated-discussionentrycounts)
  * [Discussion Counts](#taskforcemartlevel1aggregated-discussioncounts)
  * [Total Discussion Counts](#taskforcemartlevel1aggregated-totaldiscussioncounts)
  * [Average Discussion Entry Length](#taskforcemartlevel1aggregated-averagediscussionentrylength)
* [Learning Environment Activity](#taskforcemartlevel1aggregated-learningenvironmentactivity)
  * [View Days](#taskforcemartlevel1aggregated-viewdays)
  * [Sessions with 10, 20, and 30 Minute Cutoffs](#taskforcemartlevel1aggregated-sessionswith10-20-and30minutecutoffs)
  * [Tool Launches](#taskforcemartlevel1aggregated-toollaunches)
  * [File Views](#taskforcemartlevel1aggregated-fileviews)

The *mart\_taskforce.level1\_aggregated* mart aggregates data about a student’s performance and activities in a course on a weekly basis. The *mart\_taskforce\_rolling.level1\_aggregated* mart aggregates this data for a rolling 7-day window.&#x20;

### **BQ Prod Dataset Locations**

* mart\_taskforce
* mart\_taskforce\_rolling

## Taskforce vs. Taskforce Rolling

Both the *taskforce* and *taskforce\_rolling* mart compare a student's performance and activities in a course to the average student for a 7-day time window. The primary difference is whether the 7-day time window is static or moving.&#x20;

The *taskforce* mart defines static weeks in a term, every week starting on Sunday and ending on Saturday. The weeks are calculated based on the start date of the academic session, term, or course. (see [Week Calculation](#taskforcemartlevel1aggregated-week_in_termcalculation)) Each week in the term will have a fixed start and end date based on the session/term/course start date.&#x20;

The *taskforce\_rolling* mart, on the other hand, defines rolling weeks by defining a 7-day time window for each day in a term. The time window includes the day in the term and the 6 previous days. The only instances when the time window is shorter is when the day in the term is still within 6 days of the first day in the term, since the earliest possible start date is the first day in the term. It won't be until the 7th day in the term that there is a rolling 7-day window that can be defined. From that day on, all of the days will have a rolling 7-day window defined, until the final day in the term. &#x20;

As the *taskforce\_rolling* mart has more records per enrollment than the *taskforce* mart, we have decided to include data from fewer terms in the *taskforce\_rolling* mart. The *taskforce\_rolling* mart includes Spring 2026 data onwards, while the *taskforce* mart starts in Spring 2021.&#x20;

In this documentation, any reference to week will refer to the static week for the *taskforce* mart and the rolling 7-day time window for the *taskforce\_rolling* mart.&#x20;

## Interactive Mart Dependency Diagram <a href="#taskforcemartlevel1aggregated-interactivemartdependencydiagram" id="taskforcemartlevel1aggregated-interactivemartdependencydiagram"></a>

The following visualization shows the construction of this data mart defined in the [UDP marts](https://gitlab.com/unizin-community/unizin-data-platform/marts) repository. More information on the repository and diagram can be found on [this marts page.](/products/data-and-analytics/unizin-data-platform/data-stores/data-marts.md)

{% hint style="info" %}
[Click here to open the interactive chart.](https://assets.public.unizin.org/udp-marts/mart/mart__taskforce__level1_aggregated.svg)
{% endhint %}

<div data-full-width="true"><figure><img src="/files/fdLM6kIWwVC1Hle7ob1k" alt=""><figcaption><p>mart_taskforce.level1_aggregated</p></figcaption></figure></div>

## Schema <a href="#taskforcemartlevel1aggregated-schema" id="taskforcemartlevel1aggregated-schema"></a>

### **mart/taskforce/level1\_aggregated**

<table data-full-width="true"><thead><tr><th width="386.33333333333337">Field</th><th width="114">Data Type</th><th>Description</th></tr></thead><tbody><tr><td>udp_person_id</td><td>INTEGER</td><td>The UDP ID of the student.</td></tr><tr><td>lms_person_id</td><td>STRING</td><td>The LMS ID of the student.</td></tr><tr><td>udp_course_offering_id</td><td>INTEGER</td><td>The UDP ID of the course offering.</td></tr><tr><td>lms_course_offering_id</td><td>STRING</td><td>The LMS ID of the course offering.</td></tr><tr><td>week_in_term</td><td>INTEGER</td><td>The week of the academic term.</td></tr><tr><td>week_start_date</td><td>DATE</td><td>The start date of the week of the academic term.</td></tr><tr><td>week_end_date</td><td>DATE</td><td>The end date of the week of the academic term.</td></tr><tr><td>num_tiny_submissions</td><td>INTEGER</td><td>The number of submissions classified as ‘tiny’, or making up a tiny percentage of the student’s final grade.</td></tr><tr><td>num_small_submissions</td><td>INTEGER</td><td>The number of submissions classified as ‘small’, or making up a small percentage of the student’s final grade.</td></tr><tr><td>num_medium_submissions</td><td>INTEGER</td><td>The number of submissions classified as ‘medium’, or making up a medium percentage of the student’s final grade.</td></tr><tr><td>num_large_submissions</td><td>INTEGER</td><td>The number of submissions classified as ‘large’, or making up a large percentage of the student’s final grade.</td></tr><tr><td>num_major_submissions</td><td>INTEGER</td><td>The number of submissions classified as ‘major’, or making up a major percentage of the student’s final grade.</td></tr><tr><td>num_unweighted_submissions</td><td>INTEGER</td><td>The number of unweighted submissions.</td></tr><tr><td>num_weighted_submissions</td><td>INTEGER</td><td>The number of weighted submissions.</td></tr><tr><td>num_submissions_without_due_date</td><td>INTEGER</td><td>The number of submissions without due dates.</td></tr><tr><td>num_submissions_with_due_date</td><td>INTEGER</td><td>The number of submissions with due dates.</td></tr><tr><td>num_submissions</td><td>INTEGER</td><td>The total number of submissions.</td></tr><tr><td>num_tiny_assignments</td><td>INTEGER</td><td>The number of assignments classified as ‘tiny’, or making up a tiny percentage of the student’s final grade.</td></tr><tr><td>num_small_assignments</td><td>INTEGER</td><td>The number of assignments classified as ‘small’, or making up a small percentage of the student’s final grade.</td></tr><tr><td>num_medium_assignments</td><td>INTEGER</td><td>The number of assignments classified as ‘medium’, or making up a medium percentage of the student’s final grade.</td></tr><tr><td>num_large_assignments</td><td>INTEGER</td><td>The number of assignments classified as ‘large’, or making up a large percentage of the student’s final grade.</td></tr><tr><td>num_major_assignments</td><td>INTEGER</td><td>The number of assignments classified as ‘major’, or making up a major percentage of the student’s final grade.</td></tr><tr><td>num_unweighted_assignments</td><td>INTEGER</td><td>The number of unweighted assignments.</td></tr><tr><td>num_weighted_assignments</td><td>INTEGER</td><td>The number of weighted assignments. </td></tr><tr><td>num_assignments_without_due_date</td><td>INTEGER</td><td>The number of assignments without due dates.</td></tr><tr><td>num_assignments_with_due_date</td><td>INTEGER</td><td>The number of assignments with due dates.</td></tr><tr><td>num_assignments</td><td>INTEGER</td><td>The total number of assignments.</td></tr><tr><td>num_tiny_missing_submissions</td><td>INTEGER</td><td>The number of missing submissions classified as ‘tiny’, or making up a tiny percentage of the student’s final grade.</td></tr><tr><td>num_small_missing_submissions</td><td>INTEGER</td><td>The number of missing submissions classified as ‘small’, or making up a small percentage of the student’s final grade.</td></tr><tr><td>num_medium_missing_submissions</td><td>INTEGER</td><td>The number of missing submissions classified as ‘medium’, or making up a medium percentage of the student’s final grade.</td></tr><tr><td>num_large_missing_submissions</td><td>INTEGER</td><td>The number of missing submissions classified as ‘large’, or making up a large percentage of the student’s final grade.</td></tr><tr><td>num_major_missing_submissions</td><td>INTEGER</td><td>The number of missing submissions classified as ‘major’, or making up a major percentage of the student’s final grade.</td></tr><tr><td>num_unweighted_missing_submissions</td><td>INTEGER</td><td>The number of unweighted missing submissions.</td></tr><tr><td>num_weighted_missing_submissions</td><td>INTEGER</td><td>The number of weighted missing submissions.</td></tr><tr><td>num_missing_submissions</td><td>INTEGER</td><td>The total number of missing submissions.</td></tr><tr><td>num_tiny_late_submissions</td><td>INTEGER</td><td>The number of late submissions classified as ‘tiny’, or making up a tiny percentage of the student’s final grade.</td></tr><tr><td>num_small_late_submissions</td><td>INTEGER</td><td>The number of late submissions classified as ‘small’, or making up a small percentage of the student’s final grade.</td></tr><tr><td>num_medium_late_submissions</td><td>INTEGER</td><td>The number of late submissions classified as ‘medium’, or making up a medium percentage of the student’s final grade.</td></tr><tr><td>num_large_late_submissions</td><td>INTEGER</td><td>The number of late submissions classified as ‘large’, or making up a large percentage of the student’s final grade.</td></tr><tr><td>num_major_late_submissions</td><td>INTEGER</td><td>The number of late submissions classified as ‘major’, or making up a major percentage of the student’s final grade.</td></tr><tr><td>num_unweighted_late_submissions</td><td>INTEGER</td><td>The number of unweighted late submissions.</td></tr><tr><td>num_weighted_late_submissions</td><td>INTEGER</td><td>The number of weighted late submissions.</td></tr><tr><td>num_late_submissions</td><td>INTEGER</td><td>The total number of late submissions.</td></tr><tr><td>avg_time_buffer_hrs_tiny</td><td>FLOAT</td><td>The average submission time buffer in hours for submissions classified as ‘tiny’, or making up a tiny percentage of the student’s final grade.</td></tr><tr><td>avg_time_buffer_hrs_small</td><td>FLOAT</td><td>The average submission time buffer in hours for submissions classified as ‘small’, or making up a small percentage of the student’s final grade.</td></tr><tr><td>avg_time_buffer_hrs_medium</td><td>FLOAT</td><td>The average submission time buffer in hours for submissions classified as ‘medium’, or making up a medium percentage of the student’s final grade.</td></tr><tr><td>avg_time_buffer_hrs_large</td><td>FLOAT</td><td>The average submission time buffer in hours for submissions classified as ‘large’, or making up a large percentage of the student’s final grade.</td></tr><tr><td>avg_time_buffer_hrs_major</td><td>FLOAT</td><td>The average submission time buffer in hours for submissions classified as ‘major’, or making up a major percentage of the student’s final grade.</td></tr><tr><td>avg_time_buffer_hrs_unweighted</td><td>FLOAT</td><td>The average submission time buffer in hours for unweighted submissions.</td></tr><tr><td>avg_time_bufer_hrs_weighted</td><td>FLOAT</td><td>The average submission time buffer in hours for weighted submissions.</td></tr><tr><td>avg_time_buffer_hrs</td><td>FLOAT</td><td>The average submission time buffer in hours for all submissions.</td></tr><tr><td>avg_published_score_pct_tiny</td><td>NUMERIC</td><td>The average published score percentage for submissions classified as ‘tiny’, or making up a tiny percentage of the student’s final grade.</td></tr><tr><td>avg_published_score_pct_small</td><td>NUMERIC</td><td>The average published score percentage for submissions classified as ‘small’, or making up a small percentage of the student’s final grade.</td></tr><tr><td>avg_published_score_pct_medium</td><td>NUMERIC</td><td>The average published score percentage for submissions classified as ‘medium’, or making up a medium percentage of the student’s final grade.</td></tr><tr><td>avg_published_score_pct_large</td><td>NUMERIC</td><td>The average published score percentage for submissions classified as ‘large’, or making up a large percentage of the student’s final grade.</td></tr><tr><td>avg_published_score_pct_major</td><td>NUMERIC</td><td>The average published score percentage for submissions classified as ‘major’, or making up a major percentage of the student’s final grade.</td></tr><tr><td>avg_score_pct_unweighted</td><td>NUMERIC</td><td>The average score percentage for unweighted submissions.</td></tr><tr><td>avg_published_score_pct_weighted</td><td>NUMERIC</td><td>The average published score percentage for weighted submissions.</td></tr><tr><td>avg_published_score_pct_without_due_date</td><td>NUMERIC</td><td>The average published score percentage for submissions without due dates.</td></tr><tr><td>avg_published_score_pct_with_due_date</td><td>NUMERIC</td><td>The average published score percentage for submissions with due dates</td></tr><tr><td>avg_published_score</td><td>NUMERIC</td><td>The average published score percentage for all submissions.</td></tr><tr><td>avg_published_score_pct_tiny_cumulative</td><td>NUMERIC</td><td>The weekly cumulative average published score percentage for all tiny submissions </td></tr><tr><td>avg_published_score_pct_small_cumulative</td><td>NUMERIC</td><td>The weekly cumulative average published score percentage for all small submissions </td></tr><tr><td>avg_published_score_pct_medium_cumulative</td><td>NUMERIC</td><td>The weekly cumulative average published score percentage for all medium submissions</td></tr><tr><td>avg_published_score_pct_large_cumulative</td><td>NUMERIC</td><td>The weekly cumulative average published score percentage for all large submissions</td></tr><tr><td>avg_published_score_pct_major_cumulative</td><td>NUMERIC</td><td>The weekly cumulative average published score percentage for all major submissions </td></tr><tr><td>avg_published_score_pct_unweighted_cumulative</td><td>NUMERIC</td><td>The weekly cumulative average published score percentage for all unweighted submissions</td></tr><tr><td>avg_published_score_pct_weighted_cumulative</td><td>NUMERIC</td><td>The weekly cumulative average published score percentage for all weighted submissions </td></tr><tr><td>avg_published_score_pct_without_due_date_cumulative</td><td>NUMERIC</td><td>The weekly cumulative average published score percentage for all submissions without a due date </td></tr><tr><td>avg_published_score_pct_with_due_date_cumulative</td><td>NUMERIC</td><td>The weekly cumulative average published score percentage for all submissions with a due date .</td></tr><tr><td>avg_published_score_cumulative</td><td>NUMERIC</td><td>The weekly cumulative average published score percentage for all submissions </td></tr><tr><td>discussion_entry_count</td><td>INTEGER</td><td>The number of discussion entries posted by the student.</td></tr><tr><td>discussion_post_count</td><td>INTEGER</td><td>The number of discussion posts posted by the student.</td></tr><tr><td>discussion_reply_count</td><td>INTEGER</td><td>The number of discussion replies posted by the student.</td></tr><tr><td>discussion_count</td><td>INTEGER</td><td>The total number of discussions interacted with by the student.</td></tr><tr><td>assignment_discussion_count</td><td>INTEGER</td><td>The total number of discussions associated with an assignment interacted with by the student.</td></tr><tr><td>threaded_discussion_count</td><td>INTEGER</td><td>The total number of threaded discussions interacted with by the student.</td></tr><tr><td>side_comment_discussion_count</td><td>INTEGER</td><td>The total number of side comment discussions interacted with by the student.</td></tr><tr><td>total_discussion_count</td><td>INTEGER</td><td>The total number of discussions available in the course offering.</td></tr><tr><td>total_assignment_discussion_count</td><td>INTEGER</td><td>The total number of discussions associated with assignments available in the course offering.</td></tr><tr><td>total_threaded_discussion_count</td><td>INTEGER</td><td>The total number of threaded discussions available in the course offering.</td></tr><tr><td>total_side_comment_discussion_count</td><td>INTEGER</td><td>The total number of side comment discussions available in the course offering.</td></tr><tr><td>avg_discussion_entry_length</td><td>FLOAT</td><td>The average length of the student’s discussion entries.</td></tr><tr><td>avg_discussion_post_length</td><td>FLOAT</td><td>The average length of the student’s discussion posts.</td></tr><tr><td>avg_discussion_reply_length</td><td>FLOAT</td><td>The average length of the student’s discussion replies.</td></tr><tr><td>view_days</td><td>INTEGER</td><td>The number of view days in the LMS.</td></tr><tr><td>num_sessions_10min</td><td>INTEGER</td><td>The number of sessions in the LMS, with a 10 minute cutoff when calculating sessions.</td></tr><tr><td>total_time_seconds_10min</td><td>INTEGER</td><td>The total time spent in the LMS in seconds, with a 10 minute cutoff when calculating sessions.</td></tr><tr><td>total_actions_10min</td><td>INTEGER</td><td>The total number of actions in the LMS, with a 10 minute cutoff when calculating sessions.</td></tr><tr><td>avg_time_seconds_10min</td><td>FLOAT</td><td>The average amount of time spent in the LMS in seconds, with a 10 minute cutoff when calculating sessions.</td></tr><tr><td>avg_actions_10min</td><td>FLOAT</td><td>The average number of actions in the LMS, with a 10 minute cutoff when calculating sessions.</td></tr><tr><td>num_sessions_20min</td><td>INTEGER</td><td>The number of sessions in the LMS, with a 20 minute cutoff when calculating sessions.</td></tr><tr><td>total_time_seconds_20min</td><td>INTEGER</td><td>The total time spent in the LMS in seconds, with a 20 minute cutoff when calculating sessions.</td></tr><tr><td>total_actions_20min</td><td>INTEGER</td><td>The total number of actions in the LMS, with a 20 minute cutoff when calculating sessions.</td></tr><tr><td>avg_time_seconds_20min</td><td>FLOAT</td><td>The average amount of time spent in the LMS in seconds, with a 20 minute time cutoff when calculating sessions.</td></tr><tr><td>avg_actions_20min</td><td>FLOAT</td><td>The average number of actions in the LMS, with a 20 minute cutoff when calculating sessions.</td></tr><tr><td>num_sessions_30min</td><td>INTEGER</td><td>The number of sessions in the LMS, with a 30 minute cutoff when calculating sessions.</td></tr><tr><td>total_time_seconds_30min</td><td>INTEGER</td><td>The total time spent in the LMS in seconds, with a 30 minute cutoff when calculating sessions.</td></tr><tr><td>total_actions_30min</td><td>INTEGER</td><td>The total number of actions in the LMS, with a 30 minute cutoff when calculating sessions.</td></tr><tr><td>avg_time_seconds_30min</td><td>FLOAT</td><td>The average amount of time spent in the LMS in seconds, with a 30 minute cutoff when calculating sessions.</td></tr><tr><td>avg_actions_30min</td><td>FLOAT</td><td>The average number of actions in the LMS, with a 30 minute cutoff when calculating sessions.</td></tr><tr><td>num_tool_launches</td><td>INTEGER</td><td>The total number of LTI tool launches.</td></tr><tr><td>num_tools_launched</td><td>INTEGER</td><td>The total number of LTI tools launched.</td></tr><tr><td>tool_launch_detail.launch_app_name</td><td>STRING</td><td>An array of the launch app names of the LTI tools launched.</td></tr><tr><td>tool_launch_detail.num_launches</td><td>INTEGER</td><td>An array of the number of launches for each LTI tool.</td></tr><tr><td>file_views</td><td>INTEGER</td><td>The number of file views.</td></tr><tr><td>num_files_viewed</td><td>INTEGER</td><td>The number of files viewed.</td></tr><tr><td>file_access_detail.file_id</td><td>INTEGER</td><td>An array of the UDP IDs of the files viewed.</td></tr><tr><td>file_access_detail.display_name</td><td>STRING</td><td>An array of the display names of the files viewed.</td></tr><tr><td>file_access_detail.content_type</td><td>STRING</td><td>An array of the content types of the files viewed.</td></tr><tr><td>file_access_detail.content_sub_type</td><td>STRING</td><td>An array of the content subtypes of the files viewed.</td></tr><tr><td>file_access_detail.num_times_viewed</td><td>INTEGER</td><td>An array of the number of times each file was viewed.</td></tr></tbody></table>

### **mart/taskforce\_rolling/level1\_aggregated** <a href="#taskforcemartlevel1aggregated-fieldstructureandsubcategories" id="taskforcemartlevel1aggregated-fieldstructureandsubcategories"></a>

The *taskforce\_rolling* schema is the same as the *taskforce* schema, except that the static week definitions are replaced with rolling week definitions. `week_in_term` refers to the static week in term for both marts.&#x20;

| Field             | Data Type | Description                                            |
| ----------------- | --------- | ------------------------------------------------------ |
| week\_in\_term    | INT64     | The week of the academic term.                         |
| week\_start\_date | DATE      | The start date of the rolling 7-day window, inclusive. |
| week\_end\_date   | DATE      | The end date of the rolling 7-day window, inclusive.   |

## Field Structure and Subcategories

This level 1 table has many fields, so we’ve grouped them together in the following subcategories

* Assignments
  * Submissions
  * Assignments
  * Missing Assignments
  * Late Submissions
  * Submission Time Buffer
  * Published Scores
* Discussions
  * Discussion Threads
  * Discussion Entries
* Learning Environment Activity
  * View days
  * Sessions
  * Tool Launches
  * File Views

#### Assignment Weight Groupings <a href="#taskforcemartlevel1aggregated-assignmentweightgroupings" id="taskforcemartlevel1aggregated-assignmentweightgroupings"></a>

Many fields have names that include *tiny*, *small*, *medium*, *large*, and *major*. These classifications are based on the *group\_weight* field in the ‘learner\_activity\_group’ entity. The cases are as follows:

* If the *group\_weight* is null or equal to 0%, the submission is ‘unweighted’.
* If the *group\_weight* is less than or equal to 2%, the submission is ‘tiny’.
* If the *group\_weight* is greater than 2% and less than or equal to 5%, the submission is ‘small’.
* If the *group\_weight* is greater than 5% and less than or equal to 10%, the submission is ‘medium’.
* If the *group\_weight* is greater than 10% and less than or equal to 25%, the submission is ‘large’.
* If the *group\_weight* is greater than 25%, the submission is ‘major’.
* If the *group\_weight* is not null and greater than 0%, the submission is 'weighted'.

#### Week Calculation <a href="#taskforcemartlevel1aggregated-week_in_termcalculation" id="taskforcemartlevel1aggregated-week_in_termcalculation"></a>

We rely on BigQuery's `DATE_DIFF` function to determine a week number, and this BigQuery function has the start of the weeks on Sundays. We perform the date diff anchored against the start date of the academic session, the academic term, or the course in scope. Our logic prefers the academic session or academic term start dates when possible; this creates a more even baseline for week numbers across courses at scale.

The start dates for both terms and courses can be sourced from either the SIS or LMS. In the presence of start dates from SIS, we coalesce to these values, but LMS start dates will surface if nulls are present on the SIS side. The week\_in\_term is 1-indexed. There will be no `week_in_term` values of 0 in the data mart.

### Assignments <a href="#taskforcemartlevel1aggregated-assignments" id="taskforcemartlevel1aggregated-assignments"></a>

#### Number of Submissions <a href="#taskforcemartlevel1aggregated-numberofsubmissions" id="taskforcemartlevel1aggregated-numberofsubmissions"></a>

**Fields**

* num\_tiny\_submissions
* num\_small\_submissions
* num\_medium\_submissions
* num\_large\_submissions
* num\_major\_submissions
* num\_unweighted\_submissions
* num\_weighted\_submissions
* num\_submissions\_without\_due\_date
* num\_submissions\_with\_due\_date
* num\_submissions

**Context Store Dependencies**

* learner\_activity\_result
* learner\_activity
* learner\_activity\_group
* learner\_activity\_override

**Description**

These fields present the number of submissions by a student in a course for each week in the term. A submission is defined by the *learner\_activity\_result\_id* field in the ‘learner\_activity\_result’ entity. The week of the submission, *week\_in\_term,* is determined by the due date of the assignment. The due date of the assignment is derived from the *due\_date* fields in 'learner\_activity' and 'learner\_activity\_override.' If the due date of the learner activity is overridden, then the due date is defined as the *due\_date* in 'learner\_activity\_override.' If not, it is just the *due\_date* in 'learner\_activity.' If the due date is null, the week of the submission is derived from the *response\_date* field in the ‘learner\_activity\_result’ entity instead. One of the fields, *num\_submissions,* shows the overall number of submissions, while *num\_submissions\_with\_due\_date* and *num\_submissions\_without\_due\_date* show the number of submissions with and without due dates respectively. The rest of the fields focus on submissions either classified as ‘unweighted’, ‘tiny’, ‘small’, ‘medium’, ‘large’, ‘major’, or 'weighted.'

#### Number of Assignments <a href="#taskforcemartlevel1aggregated-numberofassignments" id="taskforcemartlevel1aggregated-numberofassignments"></a>

**Fields**

* num\_tiny\_assignments
* num\_small\_assignments
* num\_medium\_assignments
* num\_large\_assignments
* num\_major\_assignments
* num\_unweighted\_assignments
* num\_weighted\_assignments
* num\_assignments\_without\_due\_date
* num\_assignments\_with\_due\_date
* num\_assignments

**Context Store Dependencies**

* learner\_activity\_result
* learner\_activity
* learner\_activity\_group
* learner\_activity\_override

**Description**

These fields present the number of assignments for a student in a course for each week in the term. An assignment is defined by the *learner\_activity\_id* in the ‘learner\_activity’ entity. The week of the assignment, *week\_in\_term,* is determined by its due date. The due date of the assignment is derived from the *due\_date* fields in 'learner\_activity' and 'learner\_activity\_override.' If the due date of the learner activity is overridden, then the due date is defined as the *due\_date* in 'learner\_activity\_override.' If not, it is just the *due\_date* in 'learner\_activity.' If the due date is null and at least one submission is associated with the assignment, the week of the assignment is derived from the *response\_date* field in the ‘learner\_activity\_result’ entity instead. One of the fields, *num\_assignments,* shows the total number of assignments, while *num\_assignments\_with\_due\_date* and *num\_assignments\_without\_due\_date* show the number of assignments with and without due dates respectively. The rest of the fields focus on assignments either classified as ‘unweighted’, ‘tiny’, ‘small’, ‘medium’, ‘large’, ‘major’, or 'weighted.'

#### Number of Missing Submissions <a href="#taskforcemartlevel1aggregated-numberofmissingsubmissions" id="taskforcemartlevel1aggregated-numberofmissingsubmissions"></a>

**Fields**

* num\_tiny\_missing\_submissions
* num\_small\_missing\_submissions
* num\_medium\_missing\_submissions
* num\_large\_missing\_submissions
* num\_major\_missing\_submissions
* num\_unweighted\_missing\_submissions
* num\_weighted\_missing\_submissions
* num\_missing\_submissions

**Context Store Dependencies**

* learner\_activity\_result
* learner\_activity
* learner\_activity\_group
* learner\_activity\_override

**Description**

These fields present the number of missing submissions of a student in a course for each week in the term. A submission is considered missing if it meets the following criteria:

1. The *published\_score* field in ‘learner\_activity\_result’ is null.
2. The *grading\_status* field in ‘learner\_activity\_result’ has a value of ‘unsubmitted’.
3. The due date of the assignment has a date older than the current date.

The field *num\_missing\_submissions* presents the total number of missing submissions. The rest of the fields focus on missing submissions classified as ‘unweighted’, ‘tiny’, ‘small’, ‘medium’, ‘large’, ‘major’, or 'weighted.'

#### Number of Late Submissions <a href="#taskforcemartlevel1aggregated-numberoflatesubmissions" id="taskforcemartlevel1aggregated-numberoflatesubmissions"></a>

**Fields**

* num\_tiny\_late\_submissions
* num\_small\_late\_submissions
* num\_medium\_late\_submissions
* num\_large\_late\_submissions
* num\_major\_late\_submissions
* num\_unweighted\_late\_submissions
* num\_weighted\_late\_submissions
* num\_late\_submissions

**Context Store Dependencies**

* learner\_activity\_result
* learner\_activity
* learner\_activity\_group
* learner\_activity\_override

**Description**

These fields present the number of late submissions by a student in a course for each week in the term. A submission is late if it meets the following criteria:

* The *submission\_date* field in ‘learner\_activity\_result’ has a later date than the due date of the assignment

One of the fields, *num\_late\_submissions,* shows the total number of late submissions. The rest of the fields focus on late submissions classified as ‘unweighted’, ‘tiny’, ‘small’, ‘medium’, ‘large’, ‘major’, or 'weighted.'

#### Average Time Buffer in Hours <a href="#taskforcemartlevel1aggregated-averagetimebufferinhours" id="taskforcemartlevel1aggregated-averagetimebufferinhours"></a>

**Fields**

* avg\_time\_buffer\_hrs\_tiny
* avg\_time\_buffer\_hrs\_small
* avg\_time\_buffer\_hrs\_medium
* avg\_time\_buffer\_hrs\_large
* avg\_time\_buffer\_hrs\_major
* avg\_time\_buffer\_hrs\_unweighted
* avg\_time\_buffer\_hrs\_weighted
* avg\_time\_buffer\_hrs

**Context Store Dependencies**

* learner\_activity\_result
* learner\_activity
* learner\_activity\_group
* learner\_activity\_override

**Description**

These fields present the average time buffer in hours for submissions by a student in a course for each week in the term. The time buffer of a submission is the difference between when the assignment was due and when the student submitted the assignment. We calculate this as the difference in hours between the due date of the assignment and the date of the *submission\_date* field in ‘learner\_activity\_result’. One of the fields, *avg\_time\_buffer\_hrs,* shows the average time buffer in hours for all submissions. The rest of the fields focus on submissions classified as ‘unweighted’, ‘tiny’, ‘small’, ‘medium’, ‘large’, ‘major’, or 'weighted.'

#### Average Published Score Percentage <a href="#taskforcemartlevel1aggregated-averagepublishedscorepercentage" id="taskforcemartlevel1aggregated-averagepublishedscorepercentage"></a>

**Fields**

* avg\_published\_score\_pct\_tiny
* avg\_published\_score\_pct\_small
* avg\_published\_score\_pct\_medium
* avg\_published\_score\_pct\_large
* avg\_published\_score\_pct\_major
* avg\_score\_pct\_unweighted
* avg\_published\_score\_pct\_weighted
* avg\_published\_score\_pct\_without\_due\_date
* avg\_published\_score\_pct\_with\_due\_date
* avg\_published\_score
* avg\_published\_score\_pct\_tiny\_cumulative
* avg\_published\_score\_pct\_small\_cumulative
* avg\_published\_score\_pct\_medium\_cumulative
* avg\_published\_score\_pct\_large\_cumulative
* avg\_published\_score\_pct\_major\_cumulative
* avg\_score\_pct\_unweighted\_cumulative
* avg\_published\_score\_pct\_weighted\_cumulative
* avg\_published\_score\_pct\_without\_due\_date\_cumulative
* avg\_published\_score\_pct\_with\_due\_date\_cumulative
* avg\_published\_score\_cumulative

**Context Store Dependencies**

* learner\_activity\_result
* learner\_activity
* learner\_activity\_group
* learner\_activity\_override

**Description**

These fields show the average published score percentage of submissions by a student in a course for each week in the term. The published score percentage of a submission is calculated by dividing the published score of the submission by the maximum number of points for the assignment. To do this, we divide the *published\_score* field in ‘learner\_activity\_result’ by the *points\_possible* field in ‘learner\_activity’. To calculate the average published score percentage for submissions, we first multiply the calculated published score percentage by the group weight of the assignment, which is derived from the *group\_weight* field in ‘learner\_activity\_group’. We add all of those computed values together for each student, course, and week in term. Then, we divide that sum by the sum of the assignment group weights for each student, course, and week to compute the average published score percentage. If there are no weighted assignments for the given week, meaning all of the assignments due that week are unweighted, the average published score percentage is defined as the sum of all scores on the assignments due divided by the sum of the maximum number of points possible for the assignments due. Once again, one of these fields, *avg\_published\_score*, shows the average published score percentage for all submissions. The fields *avg\_published\_score\_pct\_with\_due\_date* and *avg\_published\_score\_without\_due\_date* show the average published score percentage for submissions with and without due dates respectively. The other fields each focus on a specific set of submissions, classified as ‘unweighted’, ‘tiny’, ‘small’, ‘medium’, ‘large’, ‘major’, or 'weighted.'

**Example 1 - All Weighted Submissions**

Given all weighted submissions in scope, the calculation for `average` is defined as:

$$
avg = \frac{\Sigma(weight \* published\_score\_pct)}{\Sigma(weight)}
$$

Assume the following 3 submissions and scores are weighted as follows:

<table><thead><tr><th>Submission</th><th>Weight</th><th>Points Possible</th><th data-type="number">Score</th><th data-type="number">Published Score %</th></tr></thead><tbody><tr><td>1</td><td>40</td><td>50</td><td>40</td><td>80</td></tr><tr><td>2</td><td>10</td><td>30</td><td>30</td><td>100</td></tr><tr><td>3</td><td>50</td><td>150</td><td>100</td><td>66.67</td></tr></tbody></table>

The `avg_published_score` calculation will yield a value of 75.33%

**Example 2 - All Unweighted Submissions**

Given all unweighted submissions in scope, the calculation for `average` is defined as:

$$
avg = \frac{\Sigma(score)}{\Sigma(points\_possible)}
$$

Assume the same 3 submissions and scores, except they are now all unweighted:

<table><thead><tr><th>Submission</th><th>Weight</th><th>Points Possible</th><th data-type="number">Score</th><th data-type="number">Published Score %</th></tr></thead><tbody><tr><td>1</td><td>null</td><td>50</td><td>40</td><td>80</td></tr><tr><td>2</td><td>null</td><td>30</td><td>30</td><td>100</td></tr><tr><td>3</td><td>null</td><td>150</td><td>100</td><td>66.67</td></tr></tbody></table>

The `avg_published_score` calculation will yield a value of 73.91%

**Example 3 - Mix of Weighted and Unweighted Submissions**

If a mix of weighted and unweighted submissions are in scope, the calculation only includes weighted. This matches the numeric values we receive in the `scores` table directly from Canvas in CD2. In these cases, we suggest leveraging both the `avg_published_score` fields plus the `_unweighted` fields.

Assume the same 3 submissions and scores, except all but 1 are weighted:

<table><thead><tr><th>Submission</th><th>Weight</th><th>Points Possible</th><th data-type="number">Score</th><th data-type="number">Published Score %</th></tr></thead><tbody><tr><td>1</td><td>null</td><td>50</td><td>40</td><td>80</td></tr><tr><td>2</td><td>10</td><td>30</td><td>30</td><td>100</td></tr><tr><td>3</td><td>50</td><td>150</td><td>100</td><td>66.67</td></tr></tbody></table>

The `avg_published_score` calculation will yield a value of 72.22%. The `avg_publsihed_score_pct_unweighted` calculation will yield a value of 80%.

### Discussions <a href="#taskforcemartlevel1aggregated-discussions" id="taskforcemartlevel1aggregated-discussions"></a>

#### Discussion Entry Counts <a href="#taskforcemartlevel1aggregated-discussionentrycounts" id="taskforcemartlevel1aggregated-discussionentrycounts"></a>

**Fields**

* discussion\_entry\_count
* discussion\_post\_count
* discussion\_reply\_count

**Context Store Dependencies**

* discussion\_entry

**Description**

These fields present the number of discussion entries posted by a student in a course for each week in the term. A discussion entry is defined by the *discussion\_entry\_id* field in the ‘discussion\_entry’ entity. The week of the discussion entry is defined by the date the discussion entry was created, which is derived from the *created\_date* field in ‘discussion\_entry’. The field *discussion\_entry\_count* shows the total number of discussion entries, and is computed by counting the number of distinct *discussion\_entry\_id* values. A discussion post is defined as a discussion entry with the value of the *position* field in ‘discussion\_entry’ equal to 1. Therefore, *discussion\_post\_count* is computed by counting the number of distinct *discussion\_entry\_id* values with *position* = 1. On the other hand, a discussion reply is defined as a discussion entry with the value of the *position* field greater than 1. To compute *discussion\_reply\_count,* we count the number of distinct *discussion\_entry\_id* values with *position* > 1.

#### Discussion Counts <a href="#taskforcemartlevel1aggregated-discussioncounts" id="taskforcemartlevel1aggregated-discussioncounts"></a>

**Fields**

* discussion\_count
* assignment\_discussion\_count
* threaded\_discussion\_count
* side\_comment\_discussion\_count

**Context Store Dependencies**

* discussion\_entry
* discussion

**Description**

These fields present the number of discussions a student has interacted with in a course for each week in the term. A discussion is defined by the *discussion\_id* field in the ‘discussion’ entity, and the week of the discussion is defined by the *created\_date* of the discussion entry. The field *discussion\_count* shows the total number of discussions, and is computed by counting the number of distinct *discussion\_id* values. The field *assignment\_discussion\_count* looks at the number of discussions that are associated with an assignment. This field is computed by counting the number of distinct *discussion\_id* values that have non-null *learner\_activity\_id* values. The *threaded\_discussion\_count* field is computed by counting the number of distinct *discussion\_id* values with *discussion\_type =* ‘threaded’, and the *side\_comment\_discussion\_count* field is computed by counting the number of distinct *discussion\_id* values with *discussion\_type* = ‘side\_comment’.

#### Total Discussion Counts <a href="#taskforcemartlevel1aggregated-totaldiscussioncounts" id="taskforcemartlevel1aggregated-totaldiscussioncounts"></a>

**Fields**

* total\_discussion\_count
* total\_assignment\_discussion\_count
* total\_threaded\_discussion\_count
* total\_side\_comment\_discussion\_count

**Context Store Dependencies**

* discussion

**Description**

These fields present the total number of discussions in a course for a given week in the term. The field *total\_discussion\_count* is computed by counting the number of distinct *discussion\_id* values in the ‘discussion’ entity for each course and week in the term. The *total\_assignment\_discussion\_count* field counts the number of distinct *discussion\_id* values with non-null *learner\_activity\_id* values. The *total\_threaded\_discussion\_count* field is computed by counting the number of distinct *discussion\_id* values with *discussion\_type =* ‘threaded’ , while the *total\_side\_comment\_discussion\_thread* field is computed by counting the number of distinct *discussion\_id* values with *discussion\_type =* ‘side\_comment’ instead.

#### Average Discussion Entry Length <a href="#taskforcemartlevel1aggregated-averagediscussionentrylength" id="taskforcemartlevel1aggregated-averagediscussionentrylength"></a>

**Fields**

* avg\_discussion\_entry\_length
* avg\_discussion\_post\_length
* avg\_discussion\_reply\_length

**Context Store Dependencies**

* discussion\_entry

**Description**

These fields present the average length of the discussion entry messages for a student in a course for a given week in the term. These fields are computed by taking the average of the *message\_length* field in the ‘discussion\_entry’ entity for each student, course, and week in the term. For the *avg\_discussion\_entry\_length* field, we take the average for all discussion entries. The *avg\_discussion\_post\_length* field only takes the average for discussion entries with *position* = 1, while the *avg\_discussion\_reply\_length* field only takes the average for discussion entries with *position* > 1.

### Learning Environment Activity <a href="#taskforcemartlevel1aggregated-learningenvironmentactivity" id="taskforcemartlevel1aggregated-learningenvironmentactivity"></a>

#### View Days <a href="#taskforcemartlevel1aggregated-viewdays" id="taskforcemartlevel1aggregated-viewdays"></a>

**Fields**

* view\_days

**Description**

The *view\_days* field shows the number of days a student viewed the learning environment for a course in a given week. This field is computed using the UDP’s event store. We count the number of distinct session dates for a student in a course for a week in the term. The session date is defined by the minimum *event\_time* of a session in the learning environment.

#### Sessions with 10, 20, and 30 Minute Cutoffs <a href="#taskforcemartlevel1aggregated-sessionswith10-20-and30minutecutoffs" id="taskforcemartlevel1aggregated-sessionswith10-20-and30minutecutoffs"></a>

**Fields**

* num\_sessions\_10min
* total\_time\_seconds\_10min
* total\_actions\_10min
* avg\_time\_seconds\_10min
* avg\_actions\_10min
* num\_sessions\_20min
* total\_time\_seconds\_20min
* total\_actions\_20min
* avg\_time\_seconds\_20min
* avg\_actions\_20min
* num\_sessions\_30min
* total\_time\_seconds\_30min
* total\_actions\_30min
* avg\_time\_seconds\_30min
* avg\_actions\_30min

**Description**

For this mart, we define sessions using three different time cutoffs: 10 minutes, 20 minutes, and 30 minutes. We define the time spent in a session by adding up the duration of events in the session. For Caliper events in the event store, we define the duration of events by calculating the difference between the event time and the previous event time. If this difference is greater than or equal to the time cutoff for the session, the duration of the event is not counted towards the session and a new session is defined. So, for example, if an event duration is greater than or equal to 10 minutes, we will not include that event in a session with a 10 minute cutoff, and will define a new session.

To show how sessions are defined, take an event with a duration of 9 minutes and 30 seconds. This event is less than 10 minutes, so it is included in a session with a 10 minute cutoff. It is also included in a session with 20 minute and 30 minute cutoffs, since the event is shorter than 20 and 30 minutes respectively. However, an event that is 13 minutes long is not included in a session with a 10 minute cutoff, since it is longer than 10 minutes. It is still included in a session with 20 and 30 minute cutoffs though. The same goes for an event with a duration of 25 minutes. This event is not included in a session with 10 and 20 minute cutoffs, but is still included in a session with a 30 minute cutoff. And finally, a 35 minute event is not included in a session with 10, 20, or 30 minute cutoffs.

<table data-header-hidden><thead><tr><th width="254"></th><th></th></tr></thead><tbody><tr><td><strong>Event Length (in Minutes)</strong></td><td><strong>Sessions that Include the Event</strong></td></tr><tr><td>0 - 9</td><td>Sessions with a 10 minute cutoff, 20 minute cutoff, and 30 minute cutoff</td></tr><tr><td>10 - 19</td><td>Sessions with a 20 minute cutoff and a 30 minute cutoff</td></tr><tr><td>20 - 29</td><td>Sessions with a 30 minute cutoff</td></tr><tr><td>30 and above</td><td>None</td></tr></tbody></table>

The *num\_sessions\_x* fields present the total number of sessions with the given time cutoff for a student in the learning environment of a course for a week in the term. The *total\_time\_seconds\_x* fields show the amount of time in seconds a student spent in the learning environment. To find the total time spent in seconds, we add up all the durations of the sessions with the given time cutoff per student, course, and week in term. The *total\_actions\_x* fields present the number of actions of a student in the learning environment. The number of actions is calculated by counting the number of events associated with the sessions with the given time cutoff. The *avg\_time\_seconds\_x* fields compute the average time in seconds a student spent in the learning environment. This is computed by dividing the total time spent in the learning environment (*total\_time\_seconds\_x)* by the total number of sessions in the learning environment (*num\_sessions\_x)* for each student, course, and week in term. The *avg\_actions\_x* fields present the average number of actions in the learning environment. To compute this, we divide the total number of actions in the learning environment (*total\_actions\_x)* by the total number of sessions in the learning environment (*num\_sessions\_x)* for each student, course, and week in term.

Please visit our [separate interaction session mart documentation page here](/products/data-and-analytics/unizin-data-platform/data-stores/data-marts/interaction-sessions.md) for a visual example and more information about interaction sessions.

#### Tool Launches <a href="#taskforcemartlevel1aggregated-toollaunches" id="taskforcemartlevel1aggregated-toollaunches"></a>

**Fields**

* num\_tool\_launches
* num\_tools\_launched
* tool\_launch\_detail.launch\_app\_name
* tool\_launch\_detail.num\_launches

**Description**

These fields focus on the LTI tools launched by a student in the learning environment of a course for each week in the term. We define a LTI tool launch using the ‘expanded’ table in the event store. An event is a LTI launch event if the name of the object ([*object.name*](http://object.name)) is ‘context\_external\_tool’. The field *num\_tool\_launches* presents the total number of LTI tool launches. This field is computed by counting the number of LTI launch events for each student, course, and week. *num\_tools\_launched* presents the number of distinct LTI tools launched. This is computed by counting the number of distinct *launch\_app\_name* values. The *launch\_app\_name* field is extracted from the *asset\_name* field of the *object.extensions* chunk of the JSON Caliper event.

The *tool\_launch\_detail* fields go into more detail about the LTI tools that were launched. *tool\_launch\_detail.launch\_app\_name* is an array of all the LTI tools launched. This array includes all the *launch\_app\_name* values associated with the given student, course, and week. The *tool\_launch\_detail.num\_launches* is an array that presents the number of launches corresponding to each LTI tool in the *tool\_launch\_detail.launch\_app\_name* array. This field computes the number of launches for each tool by counting the number of launch events for each *launch\_app\_name* value in the array.

#### File Views <a href="#taskforcemartlevel1aggregated-fileviews" id="taskforcemartlevel1aggregated-fileviews"></a>

**Fields**

* file\_views
* num\_files\_viewed
* file\_access\_detail.file\_id
* file\_access\_detail.display\_name
* file\_access\_detail.content\_type
* file\_access\_detail.content\_sub\_type
* file\_access\_detail.num\_times\_viewed

**Context Store Dependencies**

* file

**Description**

These fields focus on the files viewed by a student in the learning environment of a course for each week in the term. We identify that a file has been viewed by using the ‘expanded’ table in the event store and the ‘file’ entity in the context store. We first identify the subset of events in which an interaction with an object occurred, or when the object ID for an event is not null. The object ID is extracted from the *object.id* field in the ‘expanded’ table. We only want to include events in which an interaction with a file occurred, so we only include events that have an object ID corresponding to a file ID found in the ‘file’ entity.

The *file\_views* field presents the total number of file views. To compute this field, we count the number of file interaction events per student, course, and week. The *num\_files\_viewed* field presents the number of files viewed. This is calculated by counting the number of distinct *file\_id* values associated with file interaction events.

The *file\_access\_detail* fields go into more detail about the files the student accessed. The *file\_access\_detail.file\_id* is an array of all the IDs of the files accessed. The *file\_access\_detail.display\_name* is an array of the corresponding display names of these files, derived from the *display\_name* field in the ‘file’ entity. The *file\_access\_detail.content\_type* field is an array of the corresponding content types of these files. These values are extracted from the *content\_type* field in the ‘file’ entity, extracting the part of the string before the ‘/’ from the field. So, for example, if the value of the *content\_type* field in ‘file’ is ‘application/pptx’, the value of *file\_access\_detail.content\_type* would be ‘application’. The *file\_access\_detail.content\_sub\_type* field is an array of the content subtypes of the files accessed. These values are again extracted from the *content\_type* field in the ‘file’ entity, but taking the part of the string after the ‘/’ instead. For the previous example, the value of *file\_access\_detail.content\_sub\_type* would be ‘pptx’. The final field in this section is the *file\_access\_detail.num\_times\_viewed* field. This is an array of the number of times each file accessed was viewed. To compute the number of times each file was viewed, we count the number of events associated with each file.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://resources.unizin.org/products/data-and-analytics/unizin-data-platform/data-stores/data-marts/taskforce/level-1-aggregated.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
