11-24-2021 03:00 AM
Hi Everyone,
I need help on an expression solution. The “sum” should be the sum of the value(s) of “key2” from previous records till the current record within the array.
I’m trying to make it using the “reduce” function.
Input:
[
{
"key1": "value1",
"key2": 10
},
{
"key1": "value2",
"key2": 20
},
{
"key1": "value3",
"key2": 30
}
]
Expected Output:
[
{
"key1": "value1",
"key2": 10,
"sum": 10
},
{
"key1": "value2",
"key2": 20,
"sum": 30
},
{
"key1": "value3",
"key2": 30,
"sum": 60
}
]
Solved! Go to Solution.
11-24-2021 04:09 AM
Here’s a corrected version of the expression:
$array.map((x,index)=> index==0 ? x.extend({sum:x.key2}) : x.extend({sum:$array.slice(0,index+1).reduce((acc,curr)=> acc+curr.key2,0)}))
Let me know if this works for you, and I will explain in details on how the expression works.
11-24-2021 03:18 AM
Hey @spinaka,
If the records are in an array, than use the following expression:
$array.reduce((acc,curr)=> acc+curr.key2, 0)
Or if you are able, you can split the array and use the Aggregate snap with SUM function selected.
Regards,
Bojan
Blockquote
11-24-2021 03:24 AM
Hi @bojanvelevski, Thanks for the response.
This Aggregation just gives the sum of all the values that is 60., but we need the cumulative sum in every record as shown in the example output.
sum = sum in the previous record + key2 in the current record.
11-24-2021 04:09 AM
Here’s a corrected version of the expression:
$array.map((x,index)=> index==0 ? x.extend({sum:x.key2}) : x.extend({sum:$array.slice(0,index+1).reduce((acc,curr)=> acc+curr.key2,0)}))
Let me know if this works for you, and I will explain in details on how the expression works.
11-24-2021 06:55 AM
This is perfect @bojanvelevski
I was trying with index, map and your expression is better than mine. 🙂
Would you mind explaining the reduce function used here?