8/23

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:

  1. Filter out all students whose city is "Pune".
  2. Normalize the remaining records by changing "Mumbai" to "Bangalore".
  3. Add a grade field based on the student's score:
  4. 90+ → "A"
  5. 70–89 → "B"
  6. Below 70 → "C"
  7. 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!variableName for 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