Aggregating List elements with the Same values in Alumio

Hi @dawid.kazibut

Welcome to the Alumio forum.

You can group objects with the same criteria, such as the same MerchantProductNo, by using the Group Records transformer.

Result:

{
  "Lines": {
    "5666": [
      {
        "Id": 80,
        "Quantity": 1,
        "MerchantProductNo": "5666"
      }
    ],
    "5895": [
      {
        "Id": 79,
        "Quantity": 1,
        "MerchantProductNo": "5895"
      },
      {
        "Id": 80,
        "Quantity": 1,
        "MerchantProductNo": "5895"
      }
    ]
  }
}

Then, you can loop through the Lines array to get the aggregate of the Quantity value of the grouped records. We suggest to use JMESPath sum function to do so.

Values of the Value setter.

{
  "Id": "&{[].Id | [0]}",
  "Quantity": "&{[].Quantity | sum(@)}",
  "MerchantProductNo": "&{[].MerchantProductNo | [0]}"
}

Result:

{
  "Lines": {
    "5666": {
      "0": {
        "Id": 80,
        "Quantity": 1,
        "MerchantProductNo": "5666"
      },
      "result": {
        "Id": 80,
        "Quantity": 1,
        "MerchantProductNo": "5666"
      }
    },
    "5895": {
      "0": {
        "Id": 79,
        "Quantity": 1,
        "MerchantProductNo": "5895"
      },
      "1": {
        "Id": 80,
        "Quantity": 1,
        "MerchantProductNo": "5895"
      },
      "result": {
        "Id": 79,
        "Quantity": 2,
        "MerchantProductNo": "5895"
      }
    }
  }
}

Then, we should remove the non-aggregated objects, as you will only need the result property.

Result:

{
  "Lines": {
    "5666": {
      "Id": 80,
      "Quantity": 1,
      "MerchantProductNo": "5666"
    },
    "5895": {
      "Id": 79,
      "Quantity": 2,
      "MerchantProductNo": "5895"
    }
  }
}

The Lines array is now an object (associated array) whose keys are strings. We can convert it to an indexed array using a mapper called “List: Get values”.

Result:

{
  "Lines": [
    {
      "Id": 79,
      "Quantity": 2,
      "MerchantProductNo": "5895"
    },
    {
      "Id": 80,
      "Quantity": 1,
      "MerchantProductNo": "5666"
    }
  ]
}
1 Like