TimeBack Analytics Documentation

Overview

This document provides a comprehensive catalog of all analytical views available in the TimeBack platform's AWS QuickSight environment. Each view is designed to support specific analytical use cases while maintaining consistency, performance, and data governance standards across the analytics environment.

Data Sources:

Available Views

The following views are available in the TimeBack QuickSight environment, as part of the above data source and schema. Each view is documented with its purpose, available fields, and recommended join keys for cross-view analysis. Under the subtabs of this section, you will find the available views. You can link them together as needed in your own data sets.

Aggregated Session Attempts

Purpose

Provides session-level aggregated metrics for student attempts on learning resources. This dataset summarizes student performance within each session by counting total questions answered, questions answered correctly, and average attempt duration. It enables analysis of session-level engagement patterns and performance trends across students and time periods. One row per session+student. It has no subject, grade, or learning-app dimension; it summarizes question attempts per session and student only.

Fields

Field Name Data Type Description
session_id String Identifier of the learning session being summarized, a UUID. Never null; together with student_id it forms the grain, one row per session+student. Join with the Sessions dataset on session_id. Example: '6e5d4c3b-2a19-4087-9f6e-5d4c3b2a1908'.
student_id String Identifier of the student whose attempts in the session are summarized, a UUID. Never null. Join with the Students dataset on student_id. Example: 'a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d'.
date Date Calendar date of the session's first attempt, derived from the earliest attempt start time. Null only when no attempt in the session has a start timestamp. Example: '2026-03-14'.
total_questions_answered Integer Count of questions the student answered in the session (attempts that produced a score, correct or not). Never null; zero when no scored question was answered, and always greater than or equal to total_questions_correct. Example: 12.
total_questions_correct Integer Count of questions the student answered correctly in the session (score given equals max score). Never null; zero when none were correct, and never exceeds total_questions_answered. Example: 9.
avg_duration_sec Decimal Average attempt duration in whole seconds across the session's question attempts, rounded; uses client-provided duration when present, otherwise computed from start and end times. Null when no attempt has a usable duration. Example: 38.
org_ids String Array of UUIDs of the organizations this row is visible under: the student's organizations (from one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Used for filtering rather than as a strict join key. Example: ['2b1a0c9d-8e7f-4a6b-b5c4-d3e2f1a09b8c'].

Join Keys

  • session_id: Join with Sessions dataset to get session details and timing information
  • student_id: Join with Students dataset to get student details
  • org_ids: Array of organization IDs the user belongs to; used for org-scoped filtering

Attempts

Purpose

Provides detailed information about student attempts on learning resources, including timing, duration, correctness data, and session association. This dataset combines engagement metrics (for lessons and curriculum items) with performance results (for questions), enabling comprehensive analysis of both time-on-task and answer accuracy within the context of learning sessions. One row per first attempt (repeat attempts are excluded). This dataset has no subject, grade, or learning-app column of its own: a student's placed grade lives in Placement Results, and subject is not available directly here.

Fields

Field Name Data Type Description
student_id String Identifier of the student who made the attempt, a UUID from caliper_attempt.assignee_id. Never null. Join with the Students dataset on student_id. Example: 'a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d'.
resource_id String Identifier of the learning resource the attempt was on, a UUID from caliper_attempt.assignable_id. Never null. The resource may be a lesson, test, question, or other assignable content, so join the matching content dataset (Questions, Tests, Lessons, ...) by type; this dataset has no subject or grade column. Example: '7f3a2b1c-9d8e-4f6a-b5c4-d3e2f1a09b8c'.
session_id String Identifier of the learning session the attempt belongs to, resolved through the related Caliper events. Null when no session could be associated with the attempt. Join with the Sessions dataset on session_id. Example: '6e5d4c3b-2a19-4087-9f6e-5d4c3b2a1908'.
date Date Calendar date on which the attempt started, derived from start_time in the database timezone. Null only when the attempt has no start timestamp. Useful for day-level grouping of activity. Example: '2026-03-14'.
start_time DateTime Timestamp when the attempt started (when the student opened the resource). Null only when the source did not record a start; pairs with end_time to bound the attempt. Example: '2026-03-14T09:15:30Z'.
end_time DateTime Timestamp when the attempt ended (when the student finished or it closed). Null when the attempt has no recorded end, for example it is still open or was abandoned. Example: '2026-03-14T09:23:10Z'.
duration_sec Decimal Attempt duration in whole seconds: the client-provided duration when present, otherwise the difference between end_time and start_time. Null when neither a duration nor both timestamps are available. Example: 460.
is_correct Boolean Whether the attempt's answer was correct, true when the score given equals the max score and false otherwise. Null for attempts with no score, such as lesson or curriculum-item engagement rather than a graded question. Example: true.
org_ids String Array of UUIDs of the organizations this row is visible under: the student's organizations (from one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Used for filtering rather than as a strict join key. Example: ['2b1a0c9d-8e7f-4a6b-b5c4-d3e2f1a09b8c'].

Join Keys

  • student_id: Join with Students dataset to get student details
  • resource_id: Join with Questions, Tests, Lessons, or other content datasets to get resource details (type-specific joining may be needed)
  • session_id: Join with Sessions dataset to get session details and timing information
  • org_ids: Array of organization IDs the user belongs to; used for org-scoped filtering

Case Courses

Purpose

Provides CASE (Competency and Academic Standards Exchange) framework course data. Each record represents a course defined in the CASE framework, sourced from cf_item rows classified as Course type, enabling analysis of CASE-backed curriculum structure and subject alignment.

Fields

Field Name Data Type Description
id String Unique identifier for the CASE course (from cf_item.identifier)
title String Full statement/title of the CASE course (from cf_item.full_statement)
case_subject_id String Unique identifier for the associated CASE subject (from cf_item_subject.subject_id, nullable if no subject mapping exists)

Join Keys

  • id: Primary key for joining with curriculum-related datasets
  • case_subject_id: Join with Case Subjects dataset to get subject details

Case Subjects

Purpose

Reference (dimension) dataset of academic subjects defined in the CASE (Competency and Academic Standards Exchange) framework: one row per subject with its title, hierarchy code, and optional description. Use it to label and resolve a subject id to its name for placement, curriculum-alignment, and standards-based features. This is the canonical list of subjects, not a record of which subject a student takes: for a student's subject enrollment use Course Enrollments (its subject_ids array) or the curriculum item a mastery record points to; this dataset has no student, grade, or date columns.

Fields

Field Name Data Type Description
id String Identifier of the CASE subject, a UUID from cf_subject.identifier. Never null; it is the primary key of this reference dataset, one row per subject. Other datasets reference it as their CASE subject id (e.g. Course Enrollments.subject_ids). Example: '9c8b7a6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d'.
title String Human-readable subject name, from cf_subject.title, suitable for display and grouping. Never null. Example: 'Mathematics' (or 'Reading', 'Science').
hierarchy_code String Publisher-designated code marking the subject's position within the CASE subject hierarchy, from cf_subject.hierarchy_code. A free-form publisher code rather than a fixed vocabulary. Never null. Example: a publisher code such as '1' or 'MATH'.
description String Optional human-readable description of the subject, from cf_subject.description. Null when the publisher supplied no description. Example: 'Mathematics, including number sense, algebra, geometry, and data analysis.'

Join Keys

  • id: Primary key for joining with placement results, Course Enrollments (subject_ids), and other CASE-framework datasets

Cheating Insights

Purpose

Provides detailed cheating insight events for learning sessions, capturing individual confirmed cheating violations with their type, timing, duration, and the per-instance description shown in the Vault. Only includes external-facing cheating insight types where is_visible is true. Insight types that require review (per insights_config) are only included if they have a TruePositive review result. Each record represents a single cheating event (e.g., Cheating: Help From Another Person, Cheating: Unauthorized App Use, Cheating: Unauthorized Device Use) identified during a session.

Fields

Field Name Data Type Description
session_id String Identifier of the session this cheating event occurred in, from insights_session.caliper_session_id. Never null. Joins to sessions.id. Example: 'urn:uuid:3f2504e0-4f89-41d3-9a0c-0305e82c3301'.
insight_type String Slug identifying the kind of cheating event, from insights_type.slug (insight types in the Cheating category with visibility = 'external'). Never null. Allowable values are CheatingHelpFromAnotherPerson, CheatingUnauthorizedAppUse, CheatingUnauthorizedDeviceUse. New cheating types may be added without code changes. Example: 'CheatingUnauthorizedAppUse'.
started_at_time DateTime Timestamp the cheating event started, in UTC ISO-8601 format, from insights_insight.started_at_time. Never null. Always ≤ ended_at_time. Named started_at_time on the insight datasets, not start_time as on the sessions dataset. Example: '2026-06-17T09:55:00.000Z'.
ended_at_time DateTime Timestamp the cheating event ended, in UTC ISO-8601 format, from insights_insight.ended_at_time. Never null. Always ≥ started_at_time. Named ended_at_time on the insight datasets, not end_time as on the sessions dataset. Example: '2026-06-17T09:55:15.000Z'.
duration_sec Decimal Duration of the cheating event in whole seconds, computed as round(extract(epoch from (ended_at_time - started_at_time))). Never null. Example: 15.
description String Per-instance contextual description of the cheating event, sourced from insights_insight.reason — the same human-readable text shown in the Vault for this insight. Never null. Example: 'Background app usage detected'.
org_ids String Array of UUIDs of the organizations this row is visible under: the session's student's organizations (from public.one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Each element joins to an organization id. Example: ['1a2b3c4d-1111-2222-3333-444455556666'].

Join Keys

  • session_id: Join with Sessions dataset to get session details, timing, and student information
  • org_ids: Array of organization IDs the user belongs to; used for org-scoped filtering

Class Enrollments

Purpose

Links students to the classes they are enrolled in (the real OneRoster class enrollments), one row per enrollment, with the enrollment's effective dates so consumers can reconstruct class history over time. Only student-role enrollments are included. Subject and grade are exposed as arrays because the class can carry more than one of each. Use begin_date/end_date to answer point-in-time questions such as "which classes was the student enrolled in on date D".

Fields

Field Name Data Type Description
enrollment_id String Unique identifier of the class enrollment, a UUID from one_roster_enrollment.id. Primary key of this dataset; never null. One row exists per student class enrollment. Example: 'b3f1c2a4-7d8e-4f10-9a2b-6c5d4e3f2a1b'.
student_id String UUID of the enrolled student, from one_roster_enrollment.user_id. Never null; only student-role enrollments are included. Joins to students.id and to student_schools.student_id. Example: '7c9e6679-7425-40de-944b-e07fc1f90ae7'.
class_id String UUID of the class the student is enrolled in, from one_roster_enrollment.class_id. Never null. Joins to classes.id. Example: '3f2504e0-4f89-41d3-9a0c-0305e82c3301'.
class_title String Human-readable title of the class, from one_roster_class.title. Never null. Example: 'Grade 4 Mathematics, Section A'.
course_id String UUID of the course this class is an offering of, from one_roster_class.course_id. Null when the class is not linked to a course. Joins to courses.id. Example: 'a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d'.
course_title String Human-readable title of the course the class belongs to, from one_roster_course.title. Null when the class has no linked course (course_id is null). Example: 'Mathematics, Grade 4'.
school_id String UUID of the school (organization) the class is held at, from one_roster_class.school_id. Null when the class records no school. Joins to schools.id. Example: '1a2b3c4d-1111-2222-3333-444455556666'.
school_name String Human-readable name of the school the class is held at, from one_roster_organization.name. Null when the class has no school (school_id is null). Example: 'Lincoln Elementary School'.
role String Enrollment role of the person, from one_roster_enrollment.role. Always 'student' in this dataset; non-student enrollments are filtered out. Never null. Example: 'student'.
is_primary Boolean Whether this is the student's primary enrollment in the class, from one_roster_enrollment.primary. True for the primary enrollment, false otherwise. Never null. Example: true.
begin_date Date Calendar date the enrollment became effective, in YYYY-MM-DD form, from one_roster_enrollment.begin_date. Null when no start date was recorded. Use with end_date for point-in-time membership. Example: '2026-08-15'.
end_date Date Calendar date the enrollment ended, in YYYY-MM-DD form, from one_roster_enrollment.end_date. Null means the enrollment is ongoing (no end recorded). Example: '2027-06-12'.
status String Lifecycle status of the enrollment, from one_roster_enrollment.status. Allowable values are 'active', 'inactive', and 'tobedeleted'. Never null. Example: 'active'.
subject_ids String Array of CASE subject UUIDs the class covers, aggregated distinctly from one_roster_class_subject. Exposed as an array because a class can carry more than one subject. Never null, but may be an empty array when the class has no subjects. Each element joins to case_subjects.id. Example: ['c1d2e3f4-1111-2222-3333-444455556666'].
grade_ids String Array of grade UUIDs the class targets, aggregated distinctly from one_roster_class_grade.placement_grade_id. Exposed as an array because a class can span more than one grade. Never null, but may be an empty array when the class has no grades. Each element joins to grades.id. Example: ['d4e5f6a7-1111-2222-3333-444455556666'].

Join Keys

  • student_id: Join with Students dataset to get student details
  • class_id: Join with Classes dataset to get class details
  • course_id: Join with Courses dataset to get course details
  • school_id: Join with Schools dataset to get school details
  • subject_ids: Array of CASE subject ids (join with Case Subjects via id)
  • grade_ids: Array of grade ids (join with Grades via id)

Classes

Purpose

Lists the classes (course sections) on the platform, one row per class, so consumers can resolve a class to its course, school, subject(s) and grade(s) without joining the raw roster tables. A class is a single offering of a course at a school; its subjects and grades are exposed as arrays because a class can carry more than one of each.

Fields

Field Name Data Type Description
id String Unique identifier of the class (course section), a UUID and the primary key of this dataset. Never null. Join class-scoped datasets such as Class Enrollments on class_id. Example: 'c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f'.
title String Human-readable title of the class as shown to users. Null when the class has no title configured; not guaranteed unique across schools or courses. Example: 'Algebra I - Period 3'.
class_code String External or school-assigned code for the class, carried over from the source roster. Null when no code was provided; useful for reconciling against a school's own systems. Example: 'MATH-101-P3'.
class_type String Scheduling type of the class. Allowable values are 'homeroom' and 'scheduled'; null when the source did not classify the class. Example: 'scheduled'.
course_id String Identifier of the course this class is a section of, a UUID. Null when the class is not tied to a course. Join with the Courses dataset on course_id. Example: '7f3a2b1c-9d8e-4f6a-b5c4-d3e2f1a09b8c'.
course_title String Human-readable title of the course this class belongs to, copied from the Courses record. Null when there is no linked course or its title is unset; join Courses on course_id for a guaranteed value. Example: 'Algebra I'.
school_id String Identifier of the school (organization) that offers the class, a UUID. Null when the class has no school assigned. Join with the Schools dataset on id. Example: '2b1a0c9d-8e7f-4a6b-b5c4-d3e2f1a09b8c'.
school_name String Human-readable name of the school that offers the class, copied from the organization record. Null when there is no linked school or its name is unset; join Schools on school_id for a guaranteed value. Example: 'Lincoln Elementary School'.
status String Lifecycle status of the class from OneRoster. Allowable values are 'active', 'inactive', and 'tobedeleted'; treat 'tobedeleted' as soft-deleted. Never null (defaults to 'active'). Example: 'active'.
subject_ids String Array of CASE subject identifiers (UUIDs) the class covers, aggregated and de-duplicated with nulls removed. Never null but can be an empty array when no subject is mapped. Join each element with the Case Subjects dataset on id. Example: '{9c8b7a6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d}'.
grade_ids String Array of grade identifiers (UUIDs) the class targets, aggregated and de-duplicated from the class's placement grades with nulls removed. Never null but can be an empty array when no grade is set. Join each element with the Grades dataset on id. Example: '{3d2c1b0a-9f8e-4d7c-b6a5-948372615f0e}'.

Join Keys

  • id: Primary key for joining class-scoped datasets (e.g. Class Enrollments via class_id)
  • course_id: Join with Courses dataset to get course details
  • school_id: Join with Schools dataset to get school details
  • subject_ids: Array of CASE subject ids (join with Case Subjects via id) the class covers
  • grade_ids: Array of grade ids (join with Grades via id) the class targets

Course Enrollments

Purpose

Links students to the courses they are taking, rolled up from class enrollments to the course level (enrollment -> class -> course), one row per student+course. Consumers usually care which courses a student is taking rather than the individual class sections, so the section detail is collapsed. begin_date is the earliest underlying begin and end_date is the latest known end, with a null end_date meaning the course is still ongoing. This dataset exposes only school and subject arrays and has no grade dimension, so there is no grade_ids column here; for grade level use Placement Results (per subject) or the grade arrays on Classes and Class Enrollments. It likewise has no application/learning-app dimension; application activity is captured per session in Students XP and Attempts.

Fields

Field Name Data Type Description
student_id String Identifier of the student taking the course, a UUID from one_roster_enrollment.user_id (student-role enrollments only). Never null; together with course_id it forms the grain of this dataset, one row per student+course. Join with the Students dataset on student_id. Example: 'a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d'.
course_id String Identifier of the course the student is taking, a UUID derived from one_roster_class.course_id rolled up to the course level. Never null (the source filters out classes with no course). Join with the Courses dataset on course_id. Example: '7f3a2b1c-9d8e-4f6a-b5c4-d3e2f1a09b8c'.
course_title String Human-readable title of the course, copied from the Courses record. Null when the linked course is missing or has no title; join Courses on course_id when you need a guaranteed name. Example: 'Algebra I'.
school_ids String Array of school identifiers (UUIDs) at which the student takes any class for this course, aggregated and de-duplicated across the rolled-up class enrollments with nulls removed. Never null but can be an empty array when no school is recorded. Join each element with the Schools dataset on id. Example: '{2b1a0c9d-8e7f-4a6b-b5c4-d3e2f1a09b8c}'.
subject_ids String Array of CASE subject identifiers (UUIDs) covered by the course, aggregated and de-duplicated across the rolled-up classes with nulls removed. Never null but can be an empty array when the course has no subject mapping. Join each element with the Case Subjects dataset on id. Example: '{9c8b7a6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d}'.
begin_date Date Earliest begin date across the student's underlying class enrollments for this course, i.e. when the student first started the course, as a calendar date. Null when none of the underlying enrollments carry a begin date. Example: '2025-08-25'.
end_date Date Latest end date across the student's underlying class enrollments for this course, as a calendar date. Null means the course is still ongoing: it is set to null whenever any underlying enrollment has no end date, otherwise it is the maximum end date. Example: '2026-06-12'.
has_primary Boolean Whether at least one of the student's underlying class enrollments for this course is marked primary (true) or none is (false). Null only when no underlying enrollment records a primary flag. Indicates the student's main placement in the course. Example: true.
class_count Integer Number of distinct classes (course sections) the student is enrolled in for this course, counted across the rolled-up enrollments. Never null and always at least 1. Example: 2.

Join Keys

  • student_id: Join with Students dataset to get student details
  • course_id: Join with Courses dataset to get course details
  • school_ids: Array of school ids the student takes this course at (join with Schools via id)
  • subject_ids: Array of CASE subject ids for the course (join with Case Subjects via id)

Courses

Purpose

Provides information about curriculum courses and their relationship to subjects. This dataset enables analysis of course-level organization, subject alignment, and curriculum structure within the educational hierarchy.

Fields

Field Name Data Type Description
id String Unique identifier for the course
subject_id String Unique identifier for the subject containing this course
title String Course title (defaults to 'N/A' if neither name nor description is available)

Join Keys

  • id: Primary key for joining with course-related datasets (units, lessons, tests, etc.)
  • subject_id: Join with Subjects dataset to get subject details

Curriculum Items

Purpose

Provides curriculum framework item data including courses, sections, topics, levels, and standards. Each record represents a curriculum item with its classification and descriptive information, enabling analysis of curriculum structure and linking mastery data to specific learning outcomes.

Fields

Field Name Data Type Description
curriculum_item_id String Unique identifier for the curriculum item
curriculum_item_title String Full statement/description of the curriculum item (e.g., course name, section name)
curriculum_item_code String Human-readable code for the curriculum item (e.g., standard code like "CCSS.MATH.1.OA.1"). This is the item's short label/code — there is no separate "label" or "code" column.
curriculum_item_type String Type/category of the curriculum item (e.g., course, section, topic, level, standard). This is the item's classification — there is no separate "classification" or "category" column.

Join Keys

  • curriculum_item_id: Join with Students Mastery dataset to link student mastery to curriculum items

Grades

Purpose

Reference (dimension) dataset of grade levels, aligned with CEDS (Common Education Data Standards) education levels: one row per grade level with its code, human-readable label, and sort order. Use it to label and order grades and to resolve a grade id to its name. This is the canonical list of grade levels, not a student's assigned grade: to find which grade a student is in, use Placement Results (the student's placed grade per subject); this dataset has no student, subject, or date columns.

Fields

Field Name Data Type Description
id String Identifier of the grade level, a UUID from placement_grade.id. Never null; it is the primary key of this reference dataset, one row per grade level. Other datasets reference it as their grade id (e.g. Placement Results). Example: '6d5c4b3a-2e1f-4a0b-9c8d-7e6f5a4b3c2d'.
grade_identifier String CEDS education-level code for the grade, from placement_grade.grade_primary_identifier. Drawn from the CEDS vocabulary such as 'PK' (pre-kindergarten), 'KG' (kindergarten), '01' through '12', and 'PS' (postsecondary). Never null. Example: 'KG'.
label String Human-readable label for the grade level, from placement_grade.label, suitable for display. Never null. Example: 'Kindergarten' (or 'Grade 1', 'Grade 12').
order_number Integer Integer ordinal that orders grade levels from earliest to latest, from placement_grade.order_number; unique across grades, so sorting by it yields correct grade precedence (e.g. Kindergarten before Grade 1). Never null. Example: 1.

Join Keys

  • id: Primary key for joining with Placement Results and other grade-referencing datasets

Guides

Purpose

Provides core guide (educator) identification and contact information. Contains only users who hold a 'teacher' or 'principal' role — the same educator relationship types surfaced as guides in the Student Guides dataset. This is the foundational dataset for resolving an educator's details (e.g. the guide referenced by Student Guides), the educator-side counterpart to the Students dataset.

Fields

Field Name Data Type Description
id String Unique identifier of the guide (educator), a UUID from one_roster_user.id. Primary key, never null. Join target for guide_id on the student_guides dataset. Example: '7c9e6679-7425-40de-944b-e07fc1f90ae7'.
name String Full display name of the guide, built as given_name then family_name from one_roster_user. Never null, though it may carry only one part when the other name field is empty. Example: 'Maria Gonzalez'.
email String Email address of the guide, from one_roster_user.email. Null when the user record has no email on file. Example: 'maria.gonzalez@school.example.edu'.
org_ids String Array of UUIDs of the organizations this row is visible under: the guide's organizations (from one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no guides, and when it is set only guides whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the guide's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Each element joins to an organization id. Example: ['1a2b3c4d-1111-2222-3333-444455556666'].

Join Keys

  • id: Primary key for resolving a guide's details (e.g. join from Student Guides via guide_id)
  • org_ids: Array of organization IDs the user belongs to; used for org-scoped filtering

Learning App Subjects

Purpose

Provides the relationship between learning applications and their associated subjects. This dataset enables subject-level analysis of learning app usage, time tracking by subject, and filtering dashboards by subject within learning app contexts.

Fields

Field Name Data Type Description
learning_app_id String Unique identifier for the learning application (foreign key to learning_apps.id)
subject_title String Subject name associated with the learning application

Join Keys

  • learning_app_id: Foreign key for joining with learning_apps.id
  • subject_title: Can be matched with subjects.title for curriculum subject lookups

Learning Apps

Purpose

Provides information about learning applications integrated with the TimeBack platform. This dataset enables analysis of application usage patterns and supports filtering and grouping by specific learning tools.

Fields

Field Name Data Type Description
id String Unique identifier of the application, as a UUID. Primary key, copied from lti_application.id; never null. This is the join target for any learning_app_id across the analytics datasets (e.g. sessions.learning_app_id, student_journals.learning_app_id). Example: '7c9e6679-7425-40de-944b-e07fc1f90ae7'.
name String Display name of the application, from lti_application.name. Never null and unique across applications. Note this dataset is not restricted to learning apps: lti_application also holds assessment and internal application types, so a row here may represent any LTI application, not only a student-facing learning app. Example: 'Alpha Reading'.

Join Keys

  • id: Primary key for joining with any dataset that references learning applications (events, sessions, usage data, etc.)

Lessons

Purpose

Provides information about curriculum lessons available in the platform. This dataset enables analysis of lesson-level engagement, content organization, and curriculum coverage.

Fields

Field Name Data Type Description
id String Unique identifier for the lesson
title String Lesson title (defaults to 'N/A' if neither name nor description is available)

Join Keys

  • id: Primary key for joining with lesson-related datasets (attempts, questions, sessions, etc.)

Placement Results

Purpose

Provides placement test results showing each student's placement status and assigned grade level per subject, one row per student+subject. Each record enables analysis of placement progress, grade distribution, and assessment completion rates. A grade is assigned only once the placement reaches Completed, so grade_id is null while a placement is still NotStarted or InProgress.

Fields

Field Name Data Type Description
student_id String Identifier of the student the placement is for, a UUID from placement_student_subject_placement.student_id. Never null; together with subject_id it forms the grain, one row per student+subject. Join with the Students dataset on student_id. Example: 'a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d'.
subject_id String Identifier of the CASE subject the student was placed in, a UUID. Never null. Join with the Case Subjects dataset on id. Example: '9c8b7a6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d'.
grade_id String Identifier of the grade level the student is currently placed at for the subject, a UUID. Null when the placement has not yet determined a grade, for example while status is NotStarted or InProgress. Join with the Grades dataset on id. Example: '3d2c1b0a-9f8e-4d7c-b6a5-948372615f0e'.
placement_status String Status of the placement process for this student and subject. Allowable values are 'NotStarted', 'InProgress', and 'Completed'; a grade_id is normally present only once 'Completed'. Never null (defaults to 'NotStarted'). Example: 'Completed'.
last_updated DateTime Timestamp of the most recent change to this placement record, from date_last_modified. Use it to find the latest placement state or detect recent activity. Null only when the source never set a modification time. Example: '2026-02-09T14:30:00Z'.
org_ids String Array of UUIDs of the organizations this row is visible under: the student's organizations (from one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Used for filtering rather than as a strict join key. Example: ['2b1a0c9d-8e7f-4a6b-b5c4-d3e2f1a09b8c'].

Join Keys

  • student_id: Join with Students dataset to get student demographic and profile information
  • subject_id: Join with Case Subjects dataset to get subject details
  • grade_id: Join with Grades dataset to get grade level details (nullable)
  • org_ids: Array of organization IDs the user belongs to; used for org-scoped filtering

Proctoring Insights

Purpose

Provides detailed proctoring insight events for learning sessions, capturing individual confirmed proctoring violations with their type, timing, duration, and the per-instance description shown in the Vault. Only includes external-facing proctoring insight types from proctored sessions where is_visible is true. Insight types that require review (per insights_config) are only included if they have a TruePositive review result. Each record represents a single proctoring event (e.g., Help From Another Person, Unauthorized App Use, Unauthorized Device Use) identified during a session.

Fields

Field Name Data Type Description
session_id String Identifier of the session this proctoring event occurred in, from insights_session.caliper_session_id. Rows exist only for proctored sessions (is_proctored = TRUE). Never null. Joins to sessions.id. Example: 'urn:uuid:3f2504e0-4f89-41d3-9a0c-0305e82c3301'.
insight_type String Slug identifying the kind of proctoring event, from insights_type.slug (insight types in the Proctoring category with visibility = 'external'). Never null. Allowable values are HelpFromAnotherPerson, ProctoringHelpFromAnotherPerson, ProctoringUnauthorizedAppUse, ProctoringUnauthorizedDeviceUse, UnauthorizedAppUse, UnauthorizedDeviceUse. New proctoring types may be added without code changes. Example: 'UnauthorizedAppUse'.
started_at_time DateTime Timestamp the proctoring event started, in UTC ISO-8601 format, from insights_insight.started_at_time. Never null. Always ≤ ended_at_time. Named started_at_time on the insight datasets, not start_time as on the sessions dataset. Example: '2026-06-17T09:55:00.000Z'.
ended_at_time DateTime Timestamp the proctoring event ended, in UTC ISO-8601 format, from insights_insight.ended_at_time. Never null. Always ≥ started_at_time. Named ended_at_time on the insight datasets, not end_time as on the sessions dataset. Example: '2026-06-17T09:55:15.000Z'.
duration_sec Decimal Duration of the proctoring event in whole seconds, computed as round(extract(epoch from (ended_at_time - started_at_time))). Never null. Example: 15.
description String Per-instance contextual description of the proctoring event, sourced from insights_insight.reason — the same human-readable text shown in the Vault for this insight. Never null. Example: 'Background app usage detected'.
org_ids String Array of UUIDs of the organizations this row is visible under: the session's student's organizations (from public.one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Each element joins to an organization id. Example: ['1a2b3c4d-1111-2222-3333-444455556666'].

Join Keys

  • session_id: Join with Sessions dataset to get session details, timing, and student information
  • org_ids: Array of organization IDs the user belongs to; used for org-scoped filtering

Question Tests

Purpose

Bridge dataset linking assessment questions to the tests they belong to, one row per (question, test) pair, sourced from the Caliper 'isPartOf' relationship. The same question can be reused across more than one test, so this is a true many-to-many relationship and a question may appear in several rows; query this dataset instead of expecting a single test on the Questions dataset. Only relationships whose endpoints are real question and test entities are included, so every test_id resolves to a row in the Tests dataset (dangling identifiers are excluded).

Fields

Field Name Data Type Description
question_id String Identifier of the question, a UUID (or a persistent URL) from caliper_assessment_item.id. Never null; with test_id it forms the grain of this dataset, one row per question+test pair. Join with the Questions dataset on question_id. Example: '30083978-fd4d-4c24-a276-9a9779d355a6'.
test_id String Identifier of a test the question is part of, from caliper_assessment.id, resolved through the question's 'isPartOf' relationship. Never null and always resolvable to the Tests dataset. A question reused across multiple tests yields one row per test. Join with the Tests dataset on test_id. Example: 'https://app.athena.learnwith.ai/lesson/009062fa-7bdb-4edd-a4e0-32d01cb770ea/mastery-practice'.

Join Keys

  • question_id: Join with the Questions dataset to get question details
  • test_id: Join with the Tests dataset to get test details

Questions

Purpose

One row per assessment question (Caliper assessment item), with the question's title and type. Use it to identify a question. A question can belong to more than one test, so its test is not a column here; join the Question Tests dataset on id to resolve a question's test(s), and from there the Test Parents dataset to place it in the curriculum hierarchy. This dataset is identity only: it carries no per-student answer, score, time-spent, redirect, or worked-example data (those live in the question-response and results datasets), and no difficulty, subject, or standard-alignment fields (subject and standard come from the CASE framework via the curriculum item).

Fields

Field Name Data Type Description
id String Identifier of the assessment question, a UUID v4 (or a persistent URL) from caliper_assessment_item.id. Never null; it is the grain of this dataset, one row per question. Join with question-level datasets (responses, results) on this id. Example: 'a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d'.
title String Human-readable title of the question, taken from the Caliper entity's name, falling back to its description, then to the literal 'N/A' when neither is recorded. Never null: the value is 'N/A' exactly when both name and description are missing. Example: 'Solve for x: 2x + 3 = 11' (or 'N/A').
type String The question's content type, copied from caliper_assessment_item.media_type. It is a free-form string rather than a fixed enumeration; in this dataset it labels the question's delivery format, with observed values such as 'quiz' and 'guiding' rather than strict IANA media types. Null when the source item records no media type. Example: 'quiz'.

Join Keys

  • id: Primary key for joining with question-level datasets (responses, results, per-question performance, Question Tests)

Recommendations

Purpose

Provides consumer-visible coaching recommendation data for students, including generation metadata, delivery status, and student feedback. Enables analysis of recommendation volume, delivery rates, feedback sentiment distribution, and source effectiveness across organizations. Only recommendations deliverable to the student are included; internal (staff-only) recommendations are excluded at the view boundary and never reach a consumer.

Fields

Field Name Data Type Description
id String Unique identifier of the recommendation, as a UUID, from insights_recommendation.id. Primary key, never null. Example: 'd4c3b2a1-6f5e-8b7a-0d9c-2f1e4b3a6c5d'.
student_id String UUID of the student the recommendation is for, from insights_recommendation.user_id. Never null. Joins to students.id. Example: 'b3f1c2a4-7d8e-4f10-9a2b-6c5d4e3f2a1b'.
type String The kind of recommendation, from insights_recommendation.type. Free-form string, not a closed enum; new types may appear without code changes. Never null. Observed value: 'daily-coaching'. Example: 'daily-coaching'.
source String The system or process that produced the recommendation, from insights_recommendation.source. Free-form string, not a closed enum. Never null. Observed values: 'vault-agent', 'manual', 'app-generated'. Example: 'vault-agent'.
source_reference_id String Identifier of the originating record in the source system, e.g. the agent execution id, from insights_recommendation.source_reference_id. Free-form string. Null when the source records no reference. Example: 'exec_01H8XK4P2Q'.
title String Optional short title for the recommendation, from insights_recommendation.title, set by the source system. Null when the source provides no title. Example: 'Try a shorter session tomorrow'.
visibility String Who may see the recommendation, from insights_recommendation.visibility. Enum, never null. The source column allows 'internal' (staff-only) and 'student' (deliverable to the student), but this view filters to 'student' at the boundary, so every row here is 'student' — internal recommendations are excluded and never reach a consumer. Example: 'student'.
content String The recommendation message text in plain markdown, from insights_recommendation.content. Never null. Example: 'Great focus today! Tomorrow, try starting with math while your energy is high.'
date Date Calendar date on which the recommendation was generated, in YYYY-MM-DD form, derived as date(generated_at). Used for daily aggregation. Never null. Example: '2026-06-17'.
generated_at DateTime Timestamp the source produced the recommendation, in UTC ISO-8601 format, from insights_recommendation.generated_at. Never null. Example: '2026-06-17T06:00:00.000Z'.
delivered_at DateTime Timestamp the student first saw the recommendation, in UTC ISO-8601 format, from insights_recommendation.delivered_at. Null until the recommendation has been delivered to and seen by the student. Example: '2026-06-17T07:12:30.000Z'.
feedback_sentiment String The student's feedback sentiment on the recommendation, from insights_recommendation.feedback_sentiment. Enum. Allowable values: 'POSITIVE' and 'NEGATIVE'. Null when the student has not given feedback. Example: 'POSITIVE'.
feedback_text String Optional free-text feedback the student left on the recommendation, from insights_recommendation.feedback_text. Null when no feedback text was provided. Example: 'This helped me plan my morning.'
feedback_at DateTime Timestamp the student submitted feedback, in UTC ISO-8601 format, from insights_recommendation.feedback_at. Null when no feedback has been submitted. Example: '2026-06-17T08:00:00.000Z'.
org_ids String Array of UUIDs of the organizations this row is visible under: the student's organizations (from public.one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Each element joins to an organization id. Example: ['1a2b3c4d-1111-2222-3333-444455556666'].

Join Keys

  • id: Primary key for the recommendation
  • student_id: Join with Students dataset to get student details
  • org_ids: Array of organization IDs the student belongs to; used for org-scoped filtering

Resource Relations

Purpose

Provides relationship data between resources in the curriculum hierarchy. Each record represents a directional relationship from a source resource to a destination resource, enabling analysis of curriculum structure, content organization, and hierarchical navigation between entities like courses, units, lessons, tests, and questions.

Fields

Field Name Data Type Description
source_resource_id String Unique identifier for the source resource in the relationship
destination_resource_id String Unique identifier for the destination resource in the relationship
relationship_type String Type of relationship between resources (e.g., 'isPartOf' indicates the source is contained within the destination)
item_order Integer Ordering/sequence of the source resource within its relationship to the destination (nullable)

Join Keys

  • source_resource_id: Join with any resource dataset (Courses, Units, Lessons, Tests, Questions, etc.) using their id field
  • destination_resource_id: Join with any resource dataset to get the related/parent resource details

School Usage Stats

Purpose

Per-school usage rollup, one row per school, giving the student count, total learning-app time, and total waste time so consumers can compare schools (e.g. a district parent org comparing its child schools) without aggregating the raw session and insight tables. A student attached to more than one school contributes to each of those schools, so totals across schools can exceed platform totals. Waste time uses the same visibility and review rules as the Waste Insights dataset.

Fields

Field Name Data Type Description
school_id String UUID of the school this usage rollup is for, from one_roster_organization.id. Never null; one row per school. Joins to schools.id (use schools.parent_id for district rollups). Example: '1a2b3c4d-1111-2222-3333-444455556666'.
school_name String Human-readable name of the school, from one_roster_organization.name. Never null. Example: 'Lincoln Elementary School'.
student_count Integer Number of distinct students attached to the school, counted across both organization role and class enrollment. Never null; 0 when no students are attached. A student attached to more than one school is counted in each school's row. Example: 327.
total_app_time_sec Decimal Total learning-app session time in whole seconds, summed across the school's students, computed from caliper_session as sum(round(extract(epoch from (ended_at_time - started_at_time)))) over sessions with both timestamps set. Never null; 0 when there are no completed sessions. Example: 1284560.
total_waste_time_sec Decimal Total waste time in whole seconds, summed across the school's students, using the same visibility and review rules as the Waste Insights dataset (external, visible, and review-confirmed insights only). Never null; 0 when no waste insights qualify. Example: 84230.

Join Keys

  • school_id: Join with Schools dataset to get school details (and parent_id for district rollups)

Schools

Purpose

Lists the schools (educational institutions) on the platform so consumers can look up a school by its human-readable name without joining the operational roster tables. Each row is one school, with the parent organization (e.g. the district it belongs to) resolved to a readable name and a count of the students attached to it.

Fields

Field Name Data Type Description
id String Unique identifier of the school, a UUID equal to the underlying one_roster_organization.id. Primary key, never null. Join target for school-scoped datasets such as student_schools.school_id and school_usage_stats.school_id. Example: '1a2b3c4d-1111-2222-3333-444455556666'.
name String Human-readable name of the school, from one_roster_organization.name. Never null. Example: 'Lincoln Elementary School'.
identifier String External (SIS-issued) identifier for the school, from one_roster_organization.identifier. Null when the school has no external identifier recorded. Example: 'SCH-00042'.
parent_id String UUID of the parent organization the school belongs to (typically its district), from one_roster_organization.parent_id. Null when the school has no parent. Joins to the organization hierarchy; a parent that is itself a school joins to schools.id. Example: '9f8e7d6c-1111-2222-3333-444455556666'.
parent_name String Human-readable name of the parent organization, from the parent one_roster_organization.name. Null when the school has no parent (parent_id is null). Example: 'Springfield Unified District'.
status String Lifecycle status of the school, from one_roster_organization.status. Allowable values are 'active', 'inactive', and 'tobedeleted'. Never null. Example: 'active'.
student_count Integer Number of distinct students attached to the school, counted across both organization role and class enrollment. Never null; 0 when no students are attached. A student attached to more than one school is counted in each. Example: 327.

Join Keys

  • id: Primary key for joining school-scoped datasets (e.g. Student Schools via school_id)
  • parent_id: Parent organization the school belongs to, if any (e.g. its district)

Sessions

Purpose

Provides detailed information about learning sessions, including timing, duration, and proctoring data. This dataset enables analysis of student engagement patterns, time-on-task, and session-based learning activities across different applications.

Fields

Field Name Data Type Description
id String Unique identifier of the learning session, as recorded by Caliper. Sourced from caliper_session.id; the value is a Caliper session identifier, typically an IRI such as 'urn:uuid:...' or a bare UUID. Primary key, never null. Joins to session_id on the waste_insights, proctoring_insights, cheating_insights, and student_journals datasets. Example: 'urn:uuid:3f2504e0-4f89-41d3-9a0c-0305e82c3301'.
student_id String UUID of the student who owned this session, from caliper_session.user_id (the Person who initiated the session). Joins to students.id. Null when the underlying Caliper session has no associated person. Example: 'b3f1c2a4-7d8e-4f10-9a2b-6c5d4e3f2a1b'.
learning_app_id String Identifier of the application that hosted this session, from caliper_session.client_id (the hosting SoftwareApplication). Joins to learning_apps.id. Note this value derives from the Caliper client identifier, a different key space from student_journals.learning_app_id (which comes from insights_session.application_id). Null when the session records no hosting application. Example: '7c9e6679-7425-40de-944b-e07fc1f90ae7'.
date Date Calendar date on which the session started, in YYYY-MM-DD form, derived as date(start_time). Used for daily grouping. Null only when start_time is null. Example: '2026-06-17'.
start_time DateTime Timestamp the session started, in UTC ISO-8601 format. For native sessions (Caliper SessionEvent with action 'Started'), this is that event's eventTime. For auto-attached sessions (created when activity events tagged with urn:tag arrive without a parent session — see #2044), this is the eventTime of the first activity event in the cluster. Never null. Always ≤ end_time. Example: '2026-06-17T09:42:18.451Z'.
end_time DateTime Timestamp the session ended, in UTC ISO-8601 format. For native sessions this is the eventTime of the Caliper SessionEvent that ended or logged out the session; for auto-attached sessions (see #2044) it is extended to the eventTime of the latest activity event in the cluster, within a 1-hour inactivity window. Null while the session is still running or was never properly closed — in that case duration_sec is also null. When set, always ≥ start_time. Example: '2026-06-17T10:15:02.122Z'.
duration_sec Decimal Wall-clock length of the session in whole seconds, computed as round(extract(epoch from (end_time - start_time))). Null when end_time is null (the session is still running or was never properly closed). Named duration_sec on this dataset — note the waste_insights dataset names its equivalent waste_duration_sec. Example: 1964.
webcam_enabled Boolean Whether the webcam was enabled for this session. Sourced from insights_session.webcam_enabled and coalesced to FALSE when the session has no insights_session row, so it is never null. Only meaningfully true for proctored sessions that produced an insights record. Example: true.
is_proctored Boolean Whether this session was run under proctoring. Sourced from insights_session.is_proctored and coalesced to FALSE when the session has no insights_session row, so it is never null. Example: false.
org_ids String Array of UUIDs of the organizations this row is visible under: the session's student's organizations (from public.one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Each element joins to an organization id. Example: ['1a2b3c4d-1111-2222-3333-444455556666'].

Join Keys

  • id: Primary key for joining with event-level or session-related datasets
  • student_id: Join with Students dataset to get student details
  • learning_app_id: Join with Learning Apps dataset to get application details
  • org_ids: Array of organization IDs the user belongs to; used for org-scoped filtering

Sessions Cheating

Purpose

Provides aggregated cheating violation time data for learning sessions, capturing total confirmed cheating event duration per session. Only includes external-facing cheating insight types where is_visible is true. Insight types that require review (per insights_config) are only included if they have a TruePositive review result. Overlapping cheating events are merged to avoid double-counting. This dataset enables analysis of cheating violation severity across sessions.

Fields

Field Name Data Type Description
session_id String Caliper session id (caliper_session_id of the insights_session) this cheating total is aggregated for; one row per session. Joins to the Sessions dataset on its id to get session timing and the student. Never null. Example: '7f3c1a2b-9d8e-4c6f-b1a0-2e3d4c5b6a70'.
cheating_duration_sec Decimal Total confirmed cheating-violation time for the session in whole seconds, the rounded sum of all qualifying cheating insight durations with overlapping events merged so simultaneous violations are not double-counted. Counts only external, visible cheating insights (and review-gated ones only when confirmed TruePositive). Zero is not emitted — a session with no cheating time produces no row — so the value is always > 0 and never null. Example: 184.
org_ids String Array of UUIDs of the organizations this row is visible under: the session's student's organizations (from one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Used for filtering rather than as a strict join key. Example: ['1a2b3c4d-1111-2222-3333-444455556666'].

Join Keys

  • session_id: Join with Sessions dataset using the id field to get session details, timing, and student information
  • org_ids: Array of organization IDs the user belongs to; used for org-scoped filtering

Sessions Proctoring

Purpose

Provides aggregated proctoring violation time data for learning sessions, capturing total confirmed proctoring event duration per session. Only includes external-facing proctoring insight types from proctored sessions where is_visible is true. Insight types that require review (per insights_config) are only included if they have a TruePositive review result. Overlapping proctoring events are merged to avoid double-counting. This dataset enables analysis of proctoring violation severity across sessions.

Fields

Field Name Data Type Description
session_id String Caliper session id (caliper_session_id of the insights_session) this proctoring total is aggregated for; one row per proctored session. Joins to the Sessions dataset on its id to get session timing and the student. Never null. Example: '7f3c1a2b-9d8e-4c6f-b1a0-2e3d4c5b6a70'.
proctoring_duration_sec Decimal Total confirmed proctoring-violation time for the session in whole seconds, the rounded sum of all qualifying proctoring insight durations with overlapping events merged so simultaneous violations are not double-counted. Counts only external, visible proctoring insights on proctored sessions (and review-gated ones only when confirmed TruePositive). Zero is not emitted — a session with no proctoring time produces no row — so the value is always > 0 and never null. Example: 95.
org_ids String Array of UUIDs of the organizations this row is visible under: the session's student's organizations (from one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Used for filtering rather than as a strict join key. Example: ['1a2b3c4d-1111-2222-3333-444455556666'].

Join Keys

  • session_id: Join with Sessions dataset using the id field to get session details, timing, and student information
  • org_ids: Array of organization IDs the user belongs to; used for org-scoped filtering

Sessions Waste

Purpose

Provides aggregated waste time data for learning sessions, capturing non-productive or off-task time identified by the insights system. Includes external insight types flagged as waste (engagement, proctoring, and cheating categories). Only includes insights where is_visible is true. Insight types that require review (per insights_config) are only included if they have a TruePositive review result. This dataset enables analysis of student focus, distraction patterns, and effective learning time across sessions.

Fields

Field Name Data Type Description
session_id String Caliper session id (caliper_session_id of the insights_session) this waste total is aggregated for; one row per session. Joins to the Sessions dataset on its id to get session timing and the student. Never null. Example: '7f3c1a2b-9d8e-4c6f-b1a0-2e3d4c5b6a70'.
waste_duration_sec Decimal Total non-productive (off-task) time for the session in whole seconds, the rounded sum of all qualifying waste insight durations. Counts only external, visible insight types flagged as waste (spanning engagement, proctoring, and cheating categories, and review-gated ones only when confirmed TruePositive). Zero is not emitted — a session with no waste time produces no row — so the value is always > 0 and never null. Example: 240.
org_ids String Array of UUIDs of the organizations this row is visible under: the session's student's organizations (from one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Used for filtering rather than as a strict join key. Example: ['1a2b3c4d-1111-2222-3333-444455556666'].

Join Keys

  • session_id: Join with Sessions dataset using the id field to get session details, timing, and student information
  • org_ids: Array of organization IDs the user belongs to; used for org-scoped filtering

Student Guides

Purpose

Links students to their guides (educators) so consumers can answer "who is student X's guide" directly without reconstructing it from the raw agent table. A guide relationship is stored in one_roster_user_agent with the student as the source and the educator as the agent; this view keeps only the educator relationship types ('teacher' and 'principal') and excludes family relationships (parent, guardian) and peer/administrative links. A student with more than one guide (or the same guide over more than one period) appears once per row.

Full history is preserved: a guide relationship that ends is end-dated (end_date set, status inactive) rather than deleted. A distinct new relationship is a new row; re-establishing the same student/guide/type reopens that relationship's period (a partial unique index keeps at most one open period per relationship). Use begin_date/end_date for point-in-time questions such as "who was student X's guide on date D" (begin_date null = open start, end_date null = ongoing). assigned_date (row creation) remains as the timestamp the row was first recorded. org_ids reflects the student's current organizations (ended role memberships are excluded from org scoping).

Fields

Field Name Data Type Description
student_id String UUID of the student the guide is assigned to, from one_roster_user_agent.source_user_id. Never null. Joins to students.id. Example: '7c9e6679-7425-40de-944b-e07fc1f90ae7'.
student_name String Full display name of the student, built as given_name then family_name from one_roster_user. Never null, though it may carry only one part when the other name field is empty. Example: 'Jordan Lee'.
guide_id String UUID of the guide (educator) assigned to the student, from one_roster_user_agent.agent_user_id. Never null. Joins to guides.id. Example: 'b3f1c2a4-7d8e-4f10-9a2b-6c5d4e3f2a1b'.
guide_name String Full display name of the guide, built as given_name then family_name from one_roster_user. Never null, though it may carry only one part when the other name field is empty. Example: 'Maria Gonzalez'.
relationship_type String Type of guide relationship, from one_roster_user_agent.relationship_type. Allowable values in this dataset are 'teacher' and 'principal'; family relationships (parent, guardian) and other link types are excluded. Never null. Example: 'teacher'.
status String Lifecycle status of the guide relationship, from one_roster_user_agent.status. Allowable values are 'active', 'inactive', and 'tobedeleted'. A relationship that has ended is 'inactive' with end_date set. Never null. Example: 'active'.
begin_date Date Calendar date the guide relationship became effective, in YYYY-MM-DD form, from one_roster_user_agent.begin_date. Null when no start date was recorded (open start). Use with end_date for point-in-time membership. Example: '2026-08-15'.
end_date Date Calendar date the guide relationship ended, in YYYY-MM-DD form, from one_roster_user_agent.end_date. Null means the relationship is ongoing (no end recorded). Example: '2027-06-12'.
assigned_date DateTime Timestamp the relationship row was created, in UTC ISO-8601 format, from one_roster_user_agent.date_created. The timestamp the row was first recorded; use begin_date for the effective start of the relationship. Never null. Example: '2026-08-15T13:20:05.000Z'.
last_modified_date DateTime Timestamp the relationship row was last modified, in UTC ISO-8601 format, from one_roster_user_agent.date_last_modified. Never null; equals assigned_date when the row has never been updated. Example: '2026-09-01T08:05:42.000Z'.
org_ids String Array of UUIDs of the organizations this row is visible under: the student's organizations (from one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Each element joins to an organization id. Example: ['1a2b3c4d-1111-2222-3333-444455556666'].

Join Keys

  • student_id: Join with Students dataset to get student details
  • guide_id: Join with Guides dataset (via id) to resolve the guide's details
  • org_ids: Array of organization IDs the student belongs to; used for org-scoped filtering

Student Journals

Purpose

Provides journal entries captured during learning sessions for externally visible journal types. This dataset enables analysis of student reflections, self-reported observations, and qualitative feedback recorded through the platform.

Fields

Field Name Data Type Description
id String Unique identifier of the journal entry, as a UUID, from insights_insight.id (a Journal-slug insight). Primary key, never null. Example: 'a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d'.
student_id String UUID of the student who wrote the journal entry, from insights_session.user_id. Never null. Joins to students.id. Example: 'b3f1c2a4-7d8e-4f10-9a2b-6c5d4e3f2a1b'.
session_id String Identifier of the session in which the journal was captured, from insights_session.caliper_session_id. Never null. Joins to sessions.id. Example: 'urn:uuid:3f2504e0-4f89-41d3-9a0c-0305e82c3301'.
learning_app_id String UUID of the application in which the journal was created, from insights_session.application_id. Never null. Joins to learning_apps.id. Note this derives from insights_session.application_id (an lti_application FK), a different key space from sessions.learning_app_id (which comes from caliper_session.client_id). Example: '7c9e6679-7425-40de-944b-e07fc1f90ae7'.
journal_text String The free-text body of the journal entry the student recorded, from insights_insight.reason. Plain text, never null. Example: 'Today I finally understood long division after re-watching the lesson.'
date Date Calendar date on which the journal entry was created, in YYYY-MM-DD form, derived as date(timestamp). Used for daily grouping. Never null. Example: '2026-06-17'.
timestamp DateTime Timestamp the journal entry was recorded, in UTC ISO-8601 format, from insights_insight.started_at_time. Never null. Example: '2026-06-17T09:42:18.451Z'.
org_ids String Array of UUIDs of the organizations this row is visible under: the student's organizations (from public.one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Each element joins to an organization id. Example: ['1a2b3c4d-1111-2222-3333-444455556666'].

Join Keys

  • id: Primary key for the journal entry
  • student_id: Join with Students dataset to get student details
  • session_id: Join with Sessions dataset using the id field to get session details and timing
  • learning_app_id: Join with Learning Apps dataset to get application details
  • org_ids: Array of organization IDs the user belongs to; used for org-scoped filtering

Student Schools

Purpose

Links students to the schools they belong to, so consumers can answer "which students are attached to school X" directly without reconstructing membership from the raw roster tables. A student attaches to a school in two ways, and both are covered here: through their organization role (primary or secondary) and through enrollment in a class held at the school. The link_kind column makes the attachment type explicit so the two can be told apart, and begin_date/end_date expose when the attachment was active so consumers can reconstruct a student's school history over time. A student attached to one school in more than one way (or over more than one period) appears once per distinct attachment.

Fields

Field Name Data Type Description
student_id String UUID of the student attached to the school, from one_roster_role.user_id or one_roster_enrollment.user_id. Never null. Joins to students.id. Example: '7c9e6679-7425-40de-944b-e07fc1f90ae7'.
school_id String UUID of the school the student is attached to, from one_roster_organization.id (organizations of type 'school'). Never null. Joins to schools.id. Example: '1a2b3c4d-1111-2222-3333-444455556666'.
school_name String Human-readable name of the school the student is attached to, from one_roster_organization.name. Never null. Example: 'Lincoln Elementary School'.
link_kind String How the student attaches to the school. Allowable values are 'primary_role' (primary organization role), 'secondary_role' (secondary organization role), and 'enrollment' (enrolled in a class held at the school). Never null. Example: 'enrollment'.
begin_date Date Calendar date the attachment became effective, in YYYY-MM-DD form, from the role's or enrollment's begin_date. Null when no start date was recorded. Use with end_date for point-in-time membership. Example: '2026-08-15'.
end_date Date Calendar date the attachment ended, in YYYY-MM-DD form, from the role's or enrollment's end_date. Null means the attachment is ongoing (no end recorded). Example: '2027-06-12'.
org_ids String Array of UUIDs of the organizations this row is visible under: the student's organizations (from one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Each element joins to an organization id. Example: ['1a2b3c4d-1111-2222-3333-444455556666'].

Join Keys

  • student_id: Join with Students dataset to get student details
  • school_id: Join with Schools dataset to get school details
  • org_ids: Array of organization IDs the student belongs to; used for org-scoped filtering

Student Start Dates

Purpose

One row per student giving the three canonical "start date" anchors in one place, so a consumer does not have to reconstruct them from roles, enrollments, and assessment results. admission_date comes from the student's primary school role (falling back to any school role); earliest_enrollment_date is the earliest class-enrollment begin date; earliest_map_date is the date of the student's first completed MAP standardized assessment. Each anchor is independent and any of them can be null when the underlying record does not exist. This dataset carries only these date anchors and the org-scoping array; it has no subject, grade, school, or score columns.

Fields

Field Name Data Type Description
student_id String Identifier of the student, a UUID restricted to users holding the 'student' role. Never null; it is the grain of this dataset, one row per student. Join with the Students dataset on student_id. Example: 'a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d'.
admission_date Date Admission date from the student's primary school role, falling back to any school role, as a calendar date. Currently backfilled from the role's begin date as a transitional proxy until authoritative admission data is ingested, so it may equal earliest_enrollment_date. Null when the student has no school role carrying an admission date. Example: '2025-08-25'.
earliest_enrollment_date Date Earliest class-enrollment begin date across the student's student-role enrollments, as a calendar date: when the student first started any class. Null when none of the student's enrollments record a begin date. Example: '2025-09-02'.
earliest_map_date Date Date of the student's first completed MAP standardized assessment (the earliest active gradebook assessment result that carries a report URL), as a calendar date. Null when the student has no completed MAP result. Example: '2025-09-15'.
org_ids String Array of UUIDs of the organizations this row is visible under: the student's organizations (from one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Used for filtering rather than as a strict join key. Example: ['2b1a0c9d-8e7f-4a6b-b5c4-d3e2f1a09b8c'].

Join Keys

  • student_id: Join with the Students dataset to get student details
  • org_ids: Array of organization IDs the student belongs to; used for org-scoped filtering

Students

Purpose

Provides core student identification and contact information. Contains only users who hold a 'student' role (educators, guides, and family members are excluded — see the Guides dataset for educators). This is the foundational dataset for joining student-related data across all other datasets in the analytics environment.

Fields

| Field Name | Data Type | Description | | :---------- | :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | --- | --- | ---------------------------------------------------------------------------------------------------------------------------------------------- | | id | String | Unique identifier of the student, as a UUID. Primary key, copied from one_roster_user.id; never null. This is the value other datasets reference as student_id (sessions, recommendations, student_journals, waste/proctoring/cheating insights via their session). Example: 'b3f1c2a4-7d8e-4f10-9a2b-6c5d4e3f2a1b'. | | name | String | The student's full display name, formed by concatenating the given and family names from their SIS-issued OneRoster user record as given_name | | ' ' | | family_name (single space separator). Both source columns are required, so this is never null. Not guaranteed unique. Example: 'Ada Lovelace'. | | email | String | The student's email address, taken verbatim from the OneRoster user record. Case-insensitive (stored as citext) and unique across users; never null. Example: 'ada.lovelace@school.edu'. | | org_ids | String | Array of UUIDs of the organizations this row is visible under: the student's organizations (from public.one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Each element joins to an organization id (one_roster organizations). Example: ['1a2b3c4d-1111-2222-3333-444455556666','5e6f7a8b-7777-8888-9999-aaaabbbbcccc']. |

Join Keys

  • id: Primary key for joining with any student-related dataset (performance, events, enrollments, etc.)
  • org_ids: Array of organization IDs the user belongs to; used for org-scoped filtering

Students Enrollments

Purpose

DEPRECATED — prefer the Student Schools dataset, which links students to schools with an explicit link_kind (primary role, secondary role, or enrollment) and a joinable school_id. This view reports role-based membership across every organization type (school, district, department, and so on), one row per student-organization role, keyed only by the organization's name and not by a joinable id; it is not a class enrollment. It carries no school_id, subject, grade, or class column. For school linkage use Student Schools; for the courses or subjects a student is enrolled in use Course Enrollments. Retained temporarily for backward compatibility and will be removed once consumers migrate.

Fields

Field Name Data Type Description
student_id String Identifier of the student, a UUID from one_roster_role.user_id. Never null; with organization_name it forms the grain, one row per student-organization role. Join with the Students dataset on student_id. Example: 'a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d'.
organization_name String Display name of an organization the student holds a role in (any organization type, not specifically a school), from one_roster_organization.name. This is a name string, not a joinable id, so organizations that share a name are indistinguishable here; use the Student Schools dataset when a school id is needed. Never null. Example: 'Alpha High School'.
org_ids String Array of UUIDs of the organizations this row is visible under: the student's organizations (from one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Used for filtering rather than as a strict join key. Example: ['2b1a0c9d-8e7f-4a6b-b5c4-d3e2f1a09b8c'].

Join Keys

  • student_id: Join with the Students dataset to get student details
  • org_ids: Array of organization IDs the student belongs to; used for org-scoped filtering

Students Mastery

Purpose

Mastery achievements earned by students, one row per mastery credential: a student's measured mastery of a single CASE curriculum item (a learning standard or objective). Restricted to standard- and curriculum-mastery credentials. Use it for "how well has this student mastered this item" and learning-gap analysis. Mastery is keyed by curriculum item, not by subject or grade: there is no subject or grade column here. To reach the subject, join curriculum_item_id to the curriculum item and on to Case Subjects; for a student's grade level use Placement Results (per subject) or the Grades reference dataset. This dataset is mastery-credential level and carries no per-attempt or per-session detail (use Attempts and Students XP for that).

Fields

Field Name Data Type Description
student_id String Identifier of the student who earned the mastery credential, a UUID from clr_achievement_credential.credential_subject_id (OneRosterUser.id). Never null; with curriculum_item_id it identifies the mastery record. Join with the Students dataset on student_id. Example: 'a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d'.
mastery_percentage Decimal Mastery level as a percentage from 0 to 100, computed as the credential's result_value (a 0-to-1 progress fraction toward the mastery achievement) multiplied by 100, rounded to two decimals. Null when the credential carries no result_value. Example: 87.50.
curriculum_item_id String Identifier of the CASE curriculum item (CFItem: a learning standard or objective) this mastery is measured against, from clr_achievement.cf_item_id. This is a curriculum-item id, not a subject or grade. Null when the underlying achievement is not aligned to a CASE item. Join to the curriculum item on its identifier, then to Case Subjects for the subject. Example: '3f2e1d0c-9b8a-4c7d-8e6f-5a4b3c2d1e0f'.
mastery_timestamp DateTime Timestamp the mastery credential was originally awarded, from clr_achievement_credential.awarded_date, in UTC. Use it to place mastery on a timeline (e.g. highest item mastered as of a date). Null when the original award date was not preserved on the credential. Example: '2026-04-18T14:05:22.000Z'.
learning_app_id String Identifier of the learning application whose curriculum contains the mastered item, resolved via the item's CASE document to lti_application_curriculum_scope.lti_application_id. Null when the item's document maps to no application. Join with the Learning Apps dataset on learning_app_id. Example: '9c8b7a6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d'.
org_ids String Array of UUIDs of the organizations this row is visible under: the student's organizations (from one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Used for filtering rather than as a strict join key. Example: ['2b1a0c9d-8e7f-4a6b-b5c4-d3e2f1a09b8c'].

Join Keys

  • student_id: Join with the Students dataset to get student demographic and profile information
  • curriculum_item_id: Join with the curriculum item (CASE CFItem); from there reach Case Subjects for the subject
  • learning_app_id: Join with the Learning Apps dataset to get application details
  • org_ids: Array of organization IDs the student belongs to; used for org-scoped filtering

Students Xp

Purpose

Provides a comprehensive record of experience points (XP) earned by students across different learning applications and sessions. This dataset tracks all XP transactions, enabling analysis of student engagement patterns, learning progression, and gamification effectiveness. Each row is the XP total for a student within one learning app, session, and day, linked back to its originating Caliper event.

Fields

Field Name Data Type Description
student_id String Identifier of the student who earned the XP, a UUID from tb_xp_ledger.user_id. Never null. Join with the Students dataset on student_id. Example: 'a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d'.
learning_app_id String Identifier of the learning application in which the XP was earned, a UUID from tb_xp_ledger.application_id. Never null (every ledger entry is attributed to an application). Join with the Learning Apps dataset on id. Example: '5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d'.
session_id String Identifier of the learning session the XP was earned in, taken from the originating Caliper event. Null when the source event has no session. Join with the Sessions dataset on session_id. Example: '6e5d4c3b-2a19-4087-9f6e-5d4c3b2a1908'.
date Date Calendar date on which the XP was earned, derived from the ledger entry's creation timestamp. Null only when that timestamp is missing. Rows are aggregated per student, app, session, and date. Example: '2026-03-14'.
total_value Decimal Total experience points earned for this student, app, session, and date, summed across the underlying ledger entries. Never null; typically positive, can be zero, and may be negative where the ledger records a correction. Example: 150.
org_ids String Array of UUIDs of the organizations this row is visible under: the student's organizations (from one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Used for filtering rather than as a strict join key. Example: ['2b1a0c9d-8e7f-4a6b-b5c4-d3e2f1a09b8c'].

Join Keys

  • student_id: Join with Students dataset to get student demographic and profile information
  • learning_app_id: Join with Learning Apps dataset to get application details and metadata
  • session_id: Join with Sessions dataset to get session context, timing, and related activities
  • org_ids: Array of organization IDs the user belongs to; used for org-scoped filtering

Subjects

Purpose

Provides information about curriculum subjects available in the platform. This dataset enables analysis of subject-level organization, content categorization, and high-level curriculum structure.

Fields

Field Name Data Type Description
id String Unique identifier for the subject
title String Subject title (defaults to 'N/A' if neither name nor description is available)

Join Keys

  • id: Primary key for joining with subject-related datasets (courses, units, lessons, etc.)

Test Parents

Purpose

Bridge dataset linking tests to their parent curriculum resources, one row per (test, parent) pair, sourced from the Caliper 'isPartOf' relationship. A test's parent is not a single fixed level: it can be a topic, section, course, lesson, level, unit, or other curriculum resource, and a test can have more than one parent, so this is a true many-to-many relationship. The parent_type column tells you which kind of resource each parent is, so you join the matching dataset. Only relationships whose parent is a real curriculum resource are included. Note: the same logical parent may currently appear under more than one identifier form in the source data, so a test may show duplicate-looking parents; identifier canonicalisation is tracked upstream.

Fields

Field Name Data Type Description
test_id String Identifier of the test, from caliper_assessment.id. Never null; with parent_id it forms the grain of this dataset, one row per test+parent pair. Join with the Tests dataset on test_id. Example: 'https://app.athena.learnwith.ai/lesson/009062fa-7bdb-4edd-a4e0-32d01cb770ea/mastery-practice'.
parent_id String Identifier of a parent curriculum resource the test belongs to, a UUID (or a persistent URL) from caliper_assignable_digital_resource.id, resolved through the test's 'isPartOf' relationship. Never null. Use parent_type to pick the dataset to join (e.g. Courses when parent_type is 'curriculum/course', Lessons when 'curriculum/lesson'). Example: '88405b15-2d9f-11f1-82c5-0e986e48a3f9'.
parent_type String The parent resource's content type, copied from caliper_assignable_digital_resource.media_type. A free-form string rather than a fixed enumeration; observed values include 'curriculum/topic', 'curriculum/section', 'curriculum/course', 'curriculum/level', 'curriculum/lesson', and 'curriculum/unit'. Tells you which dataset to join parent_id against. Null when the source resource records no media type. Example: 'curriculum/topic'.

Join Keys

  • test_id: Join with the Tests dataset to get test details
  • parent_id: Join with the dataset matching parent_type (Courses, Units, Lessons, etc.) to get the parent's details

Tests

Purpose

Provides information about assessments, one row per test. This dataset enables analysis of test-level performance, assessment organization, and curriculum alignment. A test's place in the curriculum is not a single lesson: its parent can be a topic, section, course, lesson, level, or unit, and a test can have more than one parent, so the parent is not a column here; join the Test Parents dataset on id to resolve a test's parent(s) and their type.

Fields

Field Name Data Type Description
id String Identifier of the test (Caliper assessment), a UUID (or a persistent URL) from caliper_assessment.id. Never null; it is the grain of this dataset, one row per test. Join with test-level datasets (questions via Question Tests, attempts, results, Test Parents) on this id. Example: 'https://app.athena.learnwith.ai/lesson/009062fa-7bdb-4edd-a4e0-32d01cb770ea/mastery-practice'.
title String Human-readable title of the test, taken from the Caliper entity's name, falling back to its description, then to the literal 'N/A' when neither is recorded. Never null: the value is 'N/A' exactly when both name and description are missing. Example: 'Mastery Practice' (or 'N/A').

Join Keys

  • id: Primary key for joining with test-related datasets (questions, attempts, results, Test Parents, etc.)

Unit Courses

Purpose

Bridge dataset linking curriculum units to the courses they belong to, one row per (unit, course) pair, sourced from the Caliper 'isPartOf' relationship. A unit can belong to more than one course, so this is a true many-to-many relationship and a unit may appear in several rows; query this dataset instead of expecting a single course on the Units dataset. Only relationships whose endpoints are real curriculum entities are included (a unit with no recorded course parent has no row here).

Fields

Field Name Data Type Description
unit_id String Identifier of the unit, a UUID from caliper_assignable_digital_resource.id (media_type 'curriculum/unit'). Never null; with course_id it forms the grain of this dataset, one row per unit+course pair. Join with the Units dataset on unit_id. Example: '1f977081-014b-4bc7-99eb-cf49b526f418'.
course_id String Identifier of a course the unit belongs to, a UUID from caliper_assignable_digital_resource.id (media_type 'curriculum/course'), resolved through the unit's 'isPartOf' relationship. Never null. A unit with multiple course parents yields one row per course. Join with the Courses dataset on course_id. Example: 'dd66c2a7-d200-11ec-829e-12bc5a81f3ad'.

Join Keys

  • unit_id: Join with the Units dataset to get unit details
  • course_id: Join with the Courses dataset to get course details

Units

Purpose

Provides information about curriculum units, one row per unit. This dataset enables analysis of unit-level organization and curriculum structure within the educational hierarchy. A unit can belong to more than one course, so the parent course is not a column here; join the Unit Courses dataset on id to resolve a unit's course(s).

Fields

Field Name Data Type Description
id String Identifier of the unit, a UUID from caliper_assignable_digital_resource.id (media_type 'curriculum/unit'). Never null; it is the grain of this dataset, one row per unit. Join with unit-level datasets (lessons, tests, Unit Courses) on this id. Example: '1f977081-014b-4bc7-99eb-cf49b526f418'.
title String Human-readable title of the unit, taken from the Caliper entity's name, falling back to its description, then to the literal 'N/A' when neither is recorded. Never null: the value is 'N/A' exactly when both name and description are missing. Example: 'Unit 1: Foundations' (or 'N/A').

Join Keys

  • id: Primary key for joining with unit-related datasets (lessons, tests, questions, Unit Courses, etc.)

Waste Insights

Purpose

Provides detailed waste time insights for learning sessions, capturing individual waste events with their duration, type, timing, and the per-instance description shown in the Vault. Includes external insight types flagged as waste (engagement, proctoring, and cheating categories). Only includes insights where is_visible is true. Insight types that require review (per insights_config) are only included if they have a TruePositive review result. Each record represents a single insight/distraction event identified during a session, enabling granular analysis of waste patterns, distraction types, and their impact on learning time.

Fields

Field Name Data Type Description
waste_duration_sec Decimal Duration of the waste/distraction event in whole seconds, computed as round(extract(epoch from (ended_at_time - started_at_time))). Never null (the insight's start and end timestamps are required). Named waste_duration_sec on this dataset, not duration_sec as on the sessions and attempts datasets. Example: 42.
waste_type String Slug identifying the kind of waste/distraction event, from insights_type.slug — every type included here has is_waste = TRUE. Never null. Allowable values are the waste insight-type slugs, including engagement slugs such as AwayFromSeat, Idling, EyesOffScreen, Socializing, NonLearningContent, InappropriateExternalHelp, SupplementalLearning, IgnoringHelp, SkipAssessment, AbandonedAssessment, TopicShopping, plus the proctoring-category waste slugs UnauthorizedAppUse and UnauthorizedDeviceUse. New waste types may be added without code changes. Example: 'EyesOffScreen'.
session_id String Identifier of the session this waste event occurred in, from insights_session.caliper_session_id. Never null. Joins to sessions.id. Example: 'urn:uuid:3f2504e0-4f89-41d3-9a0c-0305e82c3301'.
started_at_time DateTime Timestamp the waste event started, in UTC ISO-8601 format, from insights_insight.started_at_time. Never null. Always ≤ ended_at_time. Named started_at_time on the insight datasets, not start_time as on the sessions and attempts datasets. Example: '2026-06-17T09:50:12.000Z'.
ended_at_time DateTime Timestamp the waste event ended, in UTC ISO-8601 format, from insights_insight.ended_at_time. Never null. Always ≥ started_at_time. Named ended_at_time on the insight datasets, not end_time as on the sessions and attempts datasets. Example: '2026-06-17T09:50:54.000Z'.
description String Per-instance contextual description of the waste event, sourced from insights_insight.reason — the same human-readable text shown in the Vault for this insight. Never null. Example, for a TopicShopping event: 'You started "Lesson A" but switched to "Lesson B" before finishing — that time was wasted.'
org_ids String Array of UUIDs of the organizations this row is visible under: the session's student's organizations (from public.one_roster_role) intersected with the caller's allowed scope. Drives org-scoped row filtering: the view is fail-closed, so when the app.allowed_org_ids session setting is unset the view returns no rows, and when it is set only rows whose organizations intersect it are returned. The emitted array is that intersection, so it never exceeds the caller's scope and may be a subset of the student's full membership (and may be empty for an internal/unrestricted caller). The array itself is never null: it is the empty array {} when nothing is in scope. Each element joins to an organization id. Example: ['1a2b3c4d-1111-2222-3333-444455556666'].

Join Keys

  • session_id: Join with Sessions dataset to get session details, timing, and student information
  • org_ids: Array of organization IDs the user belongs to; used for org-scoped filtering