Give list of student data. Filter, Transform, Grade, and Rank Students
Medium
You are given a list of student records, where each record contains id, name, city, and score.
Write an Appian expression to perform the following operations sequentially:
- Filter out all students whose city is "Pune".
- Normalize the remaining records by changing "Mumbai" to "Bangalore".
- Add a grade field based on the student's score:
- 90+ → "A"
- 70–89 → "B"
- Below 70 → "C"
- Sort the final list by grade ascending (A → B → C). For students with the same grade, sort by score descending.
Use intermediate local variables for each step. The expression must work dynamically for any list of student records and must not rely on hardcoded indices.
Example input:
{
a!map(id: 1, name: "John", city: "Pune", score: 95),
a!map(id: 2, name: "Sam", city: "Mumbai", score: 82),
a!map(id: 3, name: "Ravi", city: "Pune", score: 91),
a!map(id: 4, name: "Anu", city: "Delhi", score: 60),
a!map(id: 5, name: "Priya", city: "Mumbai", score: 90),
a!map(id: 6, name: "Karan", city: "Bangalore", score: 55),
a!map(id: 7, name: "Meena", city: "Delhi", score: 88),
a!map(id: 8, name: "Arjun", city: "Pune", score: 70)
}
Output:
{
a!map(id: 5, name: "Priya", city: "Bangalore", score: 90, grade: "A"),
a!map(id: 2, name: "Sam", city: "Bangalore", score: 82, grade: "B"),
a!map(id: 7, name: "Meena", city: "Delhi", score: 88, grade: "B"),
a!map(id: 4, name: "Anu", city: "Delhi", score: 60, grade: "C"),
a!map(id: 6, name: "Karan", city: "Bangalore", score: 55, grade: "C")
}
ri! Rule Inputs
ri!dataList of Map{
a!map(id: 1, name: "John", city: "Pune", score: 95),
a!map(id: 2, name: "Sam", city: "Mumbai", score: 82),
a!map(id: 3, name: "Ravi", city: "Pune", score: 91),
a!map(id: 4, name: "Anu", city: "Delhi", score: 60),
a!map(id: 5, name: "Priya", city: "Mumbai", score: 90),
a!map(id: 6, name: "Karan", city: "Bangalore", score: 55),
a!map(id: 7, name: "Meena", city: "Delhi", score: 88),
a!map(id: 8, name: "Arjun", city: "Pune", score: 70)
}Example 1 — Case 1
Input: ri!data
{
a!map(id: 1, name: "John", city: "Pune", score: 95),
a!map(id: 2, name: "Sam", city: "Mumbai", score: 82),
a!map(id: 3, name: "Ravi", city: "Pune", score: 91),
a!map(id: 4, name: "Anu", city: "Delhi", score: 60),
a!map(id: 5, name: "Priya", city: "Mumbai", score: 90),
a!map(id: 6, name: "Karan", city: "Bangalore", score: 55),
a!map(id: 7, name: "Meena", city: "Delhi", score: 88),
a!map(id: 8, name: "Arjun", city: "Pune", score: 70)
}Output:
{
a!map(id: 5, name: "Priya", city: "Bangalore", score: 90, grade: "A"),
a!map(id: 7, name: "Meena", city: "Delhi", score: 88, grade: "B"),
a!map(id: 2, name: "Sam", city: "Bangalore", score: 82, grade: "B"),
a!map(id: 4, name: "Anu", city: "Delhi", score: 60, grade: "C"),
a!map(id: 6, name: "Karan", city: "Bangalore", score: 55, grade: "C")
}Example 2 — Case 2
Input: ri!data
{
a!map(id: 5, name: "Naruto", city: "Hyderabad", score: 70),
a!map(id: 2, name: "Sakura", city: "Pune", score: 82),
a!map(id: 7, name: "Kakashi", city: "Bangalore", score: 92),
a!map(id: 6, name: "Itachi", city: "AndhraPradeh", score: 99),
a!map(id: 4, name: "Sasuke", city: "Delhi", score: 60),
a!map(id: 21, name: "Danzon", city: "Pune", score: 90),
a!map(id: 72, name: "Karin", city: "Chennai", score: 76)
}Output:
{
a!map(id: 6, name: "Itachi", city: "AndhraPradeh", score: 99, grade: "A"),
a!map(id: 7, name: "Kakashi", city: "Bangalore", score: 92, grade: "A"),
a!map(id: 72, name: "Karin", city: "Chennai", score: 76, grade: "B"),
a!map(id: 5, name: "Naruto", city: "Hyderabad", score: 70, grade: "B"),
a!map(id: 4, name: "Sasuke", city: "Delhi", score: 60, grade: "C")
}Example 3 — Case 3
Input: ri!data
{
a!map(id: 5, name: "Test 1", city: "Hyderabad", score: 60),
a!map(id: 7, name: "Test 2", city: "Bangalore", score: 70),
a!map(id: 6, name: "Test 3", city: "AndhraPradeh", score: 90)
}Output:
{
a!map(id: 6, name: "Test 3", city: "AndhraPradeh", score: 90, grade: "A"),
a!map(id: 7, name: "Test 2", city: "Bangalore", score: 70, grade: "B"),
a!map(id: 5, name: "Test 1", city: "Hyderabad", score: 60, grade: "C")
}Appian Expression Tips
- • Use
ri!variableNamefor rule inputs - • Use
a!localVariables(local!x: …, body)for locals - • Use
a!forEach(items: …, expression: fv!item)to iterate - • Use
where()/reject(fn!isnull, list)to filter