docs: students analytics blog post
This commit is contained in:
@@ -6,7 +6,7 @@ date: '2024-10-11'
|
||||
author: Rotimi Best
|
||||
avatar: /blog/best.jpg
|
||||
role: Founder
|
||||
tags: ['Launch Week', 'Custom Domains']
|
||||
tags: ['Launch Week', 'Custom Domains', 'Company Update']
|
||||
published: true
|
||||
---
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ date: '2024-10-07'
|
||||
author: Rotimi Best
|
||||
avatar: /blog/best.jpg
|
||||
role: Founder
|
||||
tags: ['Launch Week']
|
||||
tags: ['Launch Week', 'Company Update']
|
||||
published: true
|
||||
---
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ date: '2024-10-09'
|
||||
author: Rotimi Best
|
||||
avatar: /blog/best.jpg
|
||||
role: Founder
|
||||
tags: ['Launch Week', 'Self-host']
|
||||
tags: ['Launch Week', 'Self-host', 'Company Update']
|
||||
published: true
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
---
|
||||
title: 'Introducing Student Analytics'
|
||||
description: 'You can now view analytics on your students, including their last login date, course completion status, and more.'
|
||||
imageUrl: 'https://assets.cdn.clsrio.com/blog/students-analytics.png'
|
||||
date: '2024-12-31'
|
||||
author: Rotimi Best
|
||||
avatar: /blog/best.jpg
|
||||
role: Founder
|
||||
tags: ['Analytics', 'Company Update']
|
||||
published: true
|
||||
---
|
||||
|
||||

|
||||
_ClassroomIO Students Analytics_
|
||||
|
||||
As we end the year, we are excited to announce that we have added student analytics to our platform. This is a feature that we have been working on for a while and we are happy to finally launch it. With this new feature, you can better understand the progress of specific students in your course or your organisation.
|
||||
|
||||
## Audience Analytics
|
||||
|
||||
The audience page as you already know allows you to view the students in your **organisation**. With audience analytics, you can drill into each registered student of yours to understand the last time they logged in, all the courses they are enrolled in and the progress they have made.
|
||||
|
||||
<br />
|
||||
|
||||
<video
|
||||
loop
|
||||
muted
|
||||
autoplay
|
||||
preload="auto"
|
||||
autoPictureInPicture
|
||||
class="rounded-md" src="https://assets.cdn.clsrio.com/blog/organisation-student-analytics.mp4" controls
|
||||
>
|
||||
</video>
|
||||
|
||||
## Course Student Analytics
|
||||
|
||||
Further more, when you go into any course and go to the people tab, you can view all the students currently enrolled in that course. With this new release, you can now also drill into each enrolled student to see their course progress. You can see:
|
||||
|
||||
- The last time they logged in
|
||||
- The progress they have made in the course
|
||||
- The average grade they have received in the course
|
||||
- Their submitted assignments and the score they received
|
||||
|
||||
<br />
|
||||
|
||||
<video loop
|
||||
muted
|
||||
autoplay
|
||||
preload="auto"
|
||||
autoPictureInPicture
|
||||
class="rounded-md"
|
||||
src="https://assets.cdn.clsrio.com/blog/course-students-analytics.mp4" controls
|
||||
>
|
||||
</video>
|
||||
|
||||
## What's Next?
|
||||
|
||||
We are working on adding more analytics to the platform to help you better understand what's going on in your organisation. You will know the coutries of your students, their overall performance and more.
|
||||
|
||||
Give us feedback on what you think about this feature and what you would like to see next on [Discord](https://classroomio.com/discord).
|
||||
@@ -41,7 +41,7 @@
|
||||
<svelte:fragment slot="cell" let:row let:cell>
|
||||
{#if cell.key === 'name'}
|
||||
<Link
|
||||
class="flex items-center gap-2 text-black hover:text-black"
|
||||
class="flex items-center gap-2"
|
||||
href={`${$pageStore.url.href}/${row.id}/${$currentOrg.id}`}
|
||||
>
|
||||
<Avatar src={row.avatar_url} width="w-5" height="h-5" />
|
||||
|
||||
@@ -7,17 +7,16 @@
|
||||
import DeleteConfirmation from '$lib/components/Course/components/People/DeleteConfirmation.svelte';
|
||||
import InvitationModal from '$lib/components/Course/components/People/InvitationModal.svelte';
|
||||
import { deleteMemberModal } from '$lib/components/Course/components/People/store';
|
||||
import type { Person, ProfileRole } from '$lib/components/Course/components/People/types';
|
||||
import type { ProfileRole } from '$lib/components/Course/components/People/types';
|
||||
import { group } from '$lib/components/Course/store';
|
||||
import Select from '$lib/components/Form/Select.svelte';
|
||||
import IconButton from '$lib/components/IconButton/index.svelte';
|
||||
import { VARIANTS } from '$lib/components/PrimaryButton/constants';
|
||||
import PrimaryButton from '$lib/components/PrimaryButton/index.svelte';
|
||||
import RoleBasedSecurity from '$lib/components/RoleBasedSecurity/index.svelte';
|
||||
import { snackbar } from '$lib/components/Snackbar/store';
|
||||
import { ROLE_LABEL, ROLES } from '$lib/utils/constants/roles';
|
||||
import { t } from '$lib/utils/functions/translations';
|
||||
import { deleteGroupMember, updatedGroupMember } from '$lib/utils/services/courses';
|
||||
import { deleteGroupMember } from '$lib/utils/services/courses';
|
||||
import { profile } from '$lib/utils/store/user';
|
||||
import type { GroupPerson } from '$lib/utils/types';
|
||||
import {
|
||||
@@ -30,22 +29,12 @@
|
||||
StructuredListRow
|
||||
} from 'carbon-components-svelte';
|
||||
import TrashCanIcon from 'carbon-icons-svelte/lib/TrashCan.svelte';
|
||||
import copy from 'copy-to-clipboard';
|
||||
|
||||
let people: Array<GroupPerson> = [];
|
||||
let member: { id?: string; email?: string; profile?: { email: string } } = {};
|
||||
let shouldEditMemberId: string | null = null;
|
||||
let filterBy: ProfileRole = ROLES[0];
|
||||
let searchValue = '';
|
||||
|
||||
// function setPeople(people: Array<Person>) {
|
||||
// if (!Array.isArray(people)) return;
|
||||
|
||||
// people = (people || []).sort((a, b) => a.role_id - b.role_id);
|
||||
// console.log(`people changed`, people);
|
||||
// }
|
||||
|
||||
// function for the searchbar
|
||||
function filterPeople(_query, people) {
|
||||
const query = _query.toLowerCase();
|
||||
return people.filter((person) => {
|
||||
@@ -62,14 +51,6 @@
|
||||
await deleteGroupMember(member.id);
|
||||
}
|
||||
|
||||
async function editMemberId(person: Person) {
|
||||
await updatedGroupMember(
|
||||
{ assigned_student_id: person.assigned_student_id },
|
||||
{ id: person.id }
|
||||
);
|
||||
shouldEditMemberId = null;
|
||||
}
|
||||
|
||||
function sortAndFilterPeople(_people: Array<GroupPerson>, filterBy: ProfileRole) {
|
||||
people = (_people || [])
|
||||
.filter((person) => {
|
||||
@@ -98,23 +79,6 @@
|
||||
return `${obscuredUsername}@${domain}`;
|
||||
}
|
||||
|
||||
function handleEditStudentIdMode(personId: string) {
|
||||
shouldEditMemberId = personId;
|
||||
}
|
||||
|
||||
function copyToClipboard(studentAssignedId: string | null) {
|
||||
snackbar.success(`snackbar.people.success.copied`);
|
||||
|
||||
if (studentAssignedId) {
|
||||
copy(studentAssignedId);
|
||||
}
|
||||
}
|
||||
|
||||
const handleClick = () => {
|
||||
const url = $page.url.href + '?add=true';
|
||||
goto(url);
|
||||
};
|
||||
|
||||
function gotoPerson(person) {
|
||||
goto(`${$page.url.href}/${person.profile_id}`);
|
||||
}
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
: 'bg-yellow-200 text-yellow-700'
|
||||
}`}
|
||||
>
|
||||
{exercise.isCompleted ? $t('analytics.complete') : $t('analytics.incomplete')}
|
||||
{exercise.isCompleted ? $t('analytics.completed') : $t('analytics.incomplete')}
|
||||
</Tag>
|
||||
</div>
|
||||
{/key}
|
||||
|
||||
@@ -186,7 +186,7 @@
|
||||
}`}
|
||||
>
|
||||
{course.lessons_count === course.lessons_completed
|
||||
? $t('analytics.complete')
|
||||
? $t('analytics.completed')
|
||||
: $t('analytics.incomplete')}
|
||||
</Tag>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user