1. Total hours logged
| Task | Owner | Start | Due | Hours |
| Design | Alice | 2024-01-01 | 2024-01-05 | 8 |
| Develop | Bob | 2024-01-03 | 2024-01-10 | 15 |
| Test | Alice | 2024-01-06 | 2024-01-12 | 5 |
=REDUCE(0, INDEX({"Task","Owner","Start","Due","Hours";"Design","Alice","2024-01-01","2024-01-05",8;"Develop","Bob","2024-01-03","2024-01-10",15;"Test","Alice","2024-01-06","2024-01-12",5}, ,5), LAMBDA(acc,val, acc+val))
Result: 28
The INDEX call extracts the fifth column (Hours) as the array {8;15;5}. REDUCE starts with 0, then adds each hour value to the accumulator, yielding 0+8=8, 8+15=23, 23+5=28. The final result is the total hours across all tasks.
2. Latest due date
| Task | Owner | Start | Due | Hours |
| Design | Alice | 2024-01-01 | 2024-01-05 | 8 |
| Develop | Bob | 2024-01-03 | 2024-01-10 | 15 |
| Test | Alice | 2024-01-06 | 2024-01-12 | 5 |
=REDUCE(DATE(1900,1,1), INDEX({"Task","Owner","Start","Due","Hours";"Design","Alice","2024-01-01","2024-01-05",8;"Develop","Bob","2024-01-03","2024-01-10",15;"Test","Alice","2024-01-06","2024-01-12",5}, ,4), LAMBDA(acc,val, IF(val>acc, val, acc)))
Result: 2024-01-12
The fourth column (Due) supplies the dates {2024-01-05;2024-01-10;2024-01-12}. REDUCE begins with a very early sentinel date and keeps the larger of the accumulator and each new date. After processing all rows, the accumulator holds the latest due date, 12 January 2024.
3. List unique owners
| Task | Owner | Start | Due | Hours |
| Design | Alice | 2024-01-01 | 2024-01-05 | 8 |
| Develop | Bob | 2024-01-03 | 2024-01-10 | 15 |
| Test | Alice | 2024-01-06 | 2024-01-12 | 5 |
=REDUCE("", INDEX({"Task","Owner","Start","Due","Hours";"Design","Alice","2024-01-01","2024-01-05",8;"Develop","Bob","2024-01-03","2024-01-10",15;"Test","Alice","2024-01-06","2024-01-12",5}, ,2), LAMBDA(acc,val, IF(ISNUMBER(SEARCH(val,acc)), acc, IF(acc="", val, acc&", "&val))))
Result: Alice, Bob
The second column (Owner) yields {"Alice";"Bob";"Alice"}. REDUCE starts with an empty string. For each owner, the LAMBDA checks whether the name already appears in the accumulator using SEARCH; if not, it appends the name (adding a comma when needed). The final string contains each distinct owner exactly once.