blob: 357cee1eed26f7678fbafb6e3f4a38277cc1cce1 [file] [log] [blame]
dataset studentsSummary over s : Student {
column id: s.ID
column name: s.name
column phone: s.contact.phone
column items_completed: s.grades.size
column final_grade : s.getFinalGrade()
column course_outcome {
if (final_grade < 50) {
return "fail";
}
else if (final_grade < 70) {
return "good";
}
else if (final_grade < 90) {
return "notable";
}
else {
return "excellent";
}
}
}
@cached
operation Student getFinalGrade() {
return self.grades
.collect(g | g.points * g.item.percentage)
.sum() / 100;
}
dataset studentsContact over s : Student {
properties [ID as StudentId, name]
reference contact[email, phone]
}
dataset remoteStudents over s : Student {
guard: s.isRemote
properties[ID, name]
}
dataset finalExamAssistants over s : Student
from : Student.all.select(s |
s.grades.exists(g | g.item.name == "Final Exam")) {
properties[ID, name]
}
dataset studentGrades over s : Student {
properties[ID, name]
grid {
keys: EvaluationItem.all
header: key.name
body: s.grades.selectOne(g | g.item == key)?.points
}
column final_grade : s.getFinalGrade()
}
dataset numbers over n from : 1.to(5) {
column number : n
column squared : n * n
grid {
keys: 2.to(5)
header: "times_" + key
body: n * key
}
}
dataset gradesDetails over g : Grade {
properties[points]
reference item[name]
from student : g.eContainer {
column id : student.ID
column final_grade : student.getFinalGrade()
column grade_lowerthan_final : g.points < final_grade
}
}
dataset studentGradesPostProcessed over s : Student {
properties[ID]
@fillNulls 0
grid {
keys: EvaluationItem.all
header: key.name
body: s.grades.selectOne(g | g.item == key)?.points
}
column final_grade : s.getFinalGrade()
@normalize 100
column final_grade_normalized : final_grade
}