Need help on making aggregation on sail code with filter

Hi,

 

I want to perform some group by operation on sail code on required dataset with some filters.

 

Do we have any way to do that on sail code not on expression rules ?

 

Actually i have received bulk data set from one view and i want to use one list of one field value to traverse whole dataset, so just fo that details i don't want to hit database again, for that i want to do group on existing dataset only, so if we have any option for grouping on sail code plz suggest.

 

Regards

Saurav

  Discussion posts and replies are publicly visible

Parents
  • 0
    Certified Lead Developer

    You should use query entity with aggregation as has been suggested. However, in the interests of answering the question, here's some sample code that uses union(), a!forEach() and wherecontains() to do a group by and sum across a dictionary - hope it helps.

     

    load(
      local!data: {
        {name: "snake",value: 54},
        {name: "badger",value: 40},
        {name: "badger",value: 60},
        {name: "mushroom",value: 70},
        {name: "snake",value: 49},
        {name: "mushroom",value: 50},
        {name: "snake",value: 9},
        {name: "mushroom",value: 34},
        {name: "badger",value: 75},
        {name: "snake",value: 23},
        {name: "mushroom",value: 85},
        {name: "mushroom",value: 23},
        {name: "mushroom",value: 85},
        {name: "snake",value: 23},
        {name: "badger",value: 1},
        {name: "snake",value: 45},
        {name: "badger",value: 36},
        {name: "mushroom",value: 64},
        {name: "badger",value: 32},
        {name: "badger",value: 84},
        {name: "mushroom",value: 99},
        {name: "snake",value: 13},
        {name: "snake",value: 23},
        {name: "snake",value: 13}
      },
      a!forEach(
        items: union(
          local!data.name,
          local!data.name
        ),
        expression: {
          name: fv!item,
          value: sum(
            index(
              local!data.value,
              wherecontains(
                fv!item,
                /* casting to string because local!data is a dictionary */
                /* and wherecontains() can't handle two different types */
                touniformstring(
                  local!data.name
                )
              ),
              0
            )
          )
        }
      )
    )

    Edit: just noticed that this is basically the same as the code  has posted, which is also correct :)

Reply
  • 0
    Certified Lead Developer

    You should use query entity with aggregation as has been suggested. However, in the interests of answering the question, here's some sample code that uses union(), a!forEach() and wherecontains() to do a group by and sum across a dictionary - hope it helps.

     

    load(
      local!data: {
        {name: "snake",value: 54},
        {name: "badger",value: 40},
        {name: "badger",value: 60},
        {name: "mushroom",value: 70},
        {name: "snake",value: 49},
        {name: "mushroom",value: 50},
        {name: "snake",value: 9},
        {name: "mushroom",value: 34},
        {name: "badger",value: 75},
        {name: "snake",value: 23},
        {name: "mushroom",value: 85},
        {name: "mushroom",value: 23},
        {name: "mushroom",value: 85},
        {name: "snake",value: 23},
        {name: "badger",value: 1},
        {name: "snake",value: 45},
        {name: "badger",value: 36},
        {name: "mushroom",value: 64},
        {name: "badger",value: 32},
        {name: "badger",value: 84},
        {name: "mushroom",value: 99},
        {name: "snake",value: 13},
        {name: "snake",value: 23},
        {name: "snake",value: 13}
      },
      a!forEach(
        items: union(
          local!data.name,
          local!data.name
        ),
        expression: {
          name: fv!item,
          value: sum(
            index(
              local!data.value,
              wherecontains(
                fv!item,
                /* casting to string because local!data is a dictionary */
                /* and wherecontains() can't handle two different types */
                touniformstring(
                  local!data.name
                )
              ),
              0
            )
          )
        }
      )
    )

    Edit: just noticed that this is basically the same as the code  has posted, which is also correct :)

Children
No Data