Skip to main content
December 5, 2023
Solved

Elimination rule

  • December 5, 2023
  • 3 replies
  • 0 views

a!localVariables(
local!data: {
     a!map(id: 1, classid: 1702116260, value: - 115),
     a!map(id: 2, classid: 1702116260, value: 190),
     a!map(id: 3, classid: 1702116260, value: - 190),
     a!map(id: 4, classid: 1702116260, value: 115),
     a!map(id: 5, classid: 1702116260, value: 210),
     a!map(id: 6, classid: 1702116260, value:104)
},

local!choiceLabels: {
          concat(1702116260, 104), 
          concat(1702116260, 210)
},

local!choicevalues: { 5, 6 },


local!choiceLabels
)

I want to eliminate all the rows in local!data that has a corresponding negative value and add their classid + value in choice labels and ids in choicevalues

e.g. value -115 with id 1 has value 115 with id 4... so both need excluded.

whereas values 104 and 210 has no corresponding negative fields to include those in choiceLabels/ choiceValues

Best answer by matthew.shutt

a!localVariables(
  local!data: {
    a!map(id: 1, classid: 1702116260, value: - 115),
    a!map(id: 2, classid: 1702116260, value: 190),
    a!map(id: 3, classid: 1702116260, value: - 190),
    a!map(id: 4, classid: 1702116260, value: 115),
    a!map(id: 5, classid: 1702116260, value: 210),
    a!map(id: 6, classid: 1702116260, value: 104)
  },
  reject(
    fn!isnull,
    a!forEach(
      local!data,
      a!localVariables(
        local!inverse: - fv!item.value,
        local!hasInverseInList: contains(
          tointeger(local!data.value),
          tointeger(local!inverse)
        ),
        if(local!hasInverseInList, null, fv!item)
      )
    )
  )
)

3 replies

matthew.shutt
December 5, 2023

a!localVariables(
  local!data: {
    a!map(id: 1, classid: 1702116260, value: - 115),
    a!map(id: 2, classid: 1702116260, value: 190),
    a!map(id: 3, classid: 1702116260, value: - 190),
    a!map(id: 4, classid: 1702116260, value: 115),
    a!map(id: 5, classid: 1702116260, value: 210),
    a!map(id: 6, classid: 1702116260, value: 104)
  },
  reject(
    fn!isnull,
    a!forEach(
      local!data,
      a!localVariables(
        local!inverse: - fv!item.value,
        local!hasInverseInList: contains(
          tointeger(local!data.value),
          tointeger(local!inverse)
        ),
        if(local!hasInverseInList, null, fv!item)
      )
    )
  )
)

ravib0008Author
December 14, 2023

Thanks Matt that worked, I need a slight variation where i need to do grouping by couple of fields and then sum those values- 

a!localVariables(
local!data: {
  a!map(id: 1, date: "12/2/2023", code: 1234, value: -120),
a!map(id: 2, date: "12/2/2023", code: 1234, value: 190),
a!map(id: 3, date: "12/2/2023", code: 1234, value: -190),
a!map(id: 4, date: "12/2/2023", code: 1234, value: 115),
a!map(id: 5, date: "12/4/2023", code: 1234, value: 210),
a!map(id: 7, date: "12/4/2023", code: 1234, value: -115),
a!map(id: 6, date: "12/4/2023", code: 3456, value: 104),
a!map(id: 8, date: "12/4/2023", code: 3456, value: 210),
a!map(id: 9, date: "12/5/2023", code: 1234, value: 104),
a!map(id: 10, date: "12/5/2023", code: 5678, value:115),
a!map(id: 11, date: "12/5/2023", code: 5678, value: 210),
a!map(id: 12, date: "12/5/2023", code: 1234, value:-104)
},

local!choiceLabels: {

/* I need logic to do GROUPING of local!data by date and code then SUM up those values add to the list where sum is > 0 */


   concat(12/2/2023, " ", 1234," " ,-120+190-190+115),
   concat(12/2/2023, " ", 1234," ", 210-115),
   concat(12/4/2023, " ", 3456," ", 104+210),
   concat(12/5/2023, " ", 1234," ", 104-104)   <-- SKIP THIS AS SUM (value)=0

   concat(12/5/2023, " ", 5678," ", 115+210)
},


local!choiceLabels
)

ranjiths050336
December 14, 2023

a!localVariables(
  local!data: {
    a!map(id: 1, date: "12/2/2023", code: 1234, value: -120),
    a!map(id: 2, date: "12/2/2023", code: 1234, value: 190),
    a!map(id: 3, date: "12/2/2023", code: 1234, value: -190),
    a!map(id: 4, date: "12/2/2023", code: 1234, value: 115),
    a!map(id: 5, date: "12/4/2023", code: 1234, value: 210),
    a!map(id: 7, date: "12/4/2023", code: 1234, value: -115),
    a!map(id: 6, date: "12/4/2023", code: 3456, value: 104),
    a!map(id: 8, date: "12/4/2023", code: 3456, value: 210),
    a!map(id: 9, date: "12/5/2023", code: 1234, value: 104),
    a!map(id: 10, date: "12/5/2023", code: 5678, value:115),
    a!map(id: 11, date: "12/5/2023", code: 5678, value: 210),
    a!map(id: 12, date: "12/5/2023", code: 1234, value:-104)
  },
  local!map: a!forEach(
    local!data,
    a!map(date: fv!item.date, code: fv!item.code)
  ),
  reject(
    fn!isnull,
    a!forEach(
      a!forEach(
        union(local!map, local!map),
        a!map(
          date: fv!item.date,
          code: fv!item.code,
          value: a!localVariables(
            local!date: fv!item.date,
            local!code: fv!item.code,
            sum(
              reject(
                fn!isNull,
                a!forEach(
                  local!data,
                  if(
                    and(
                      fv!item.date = local!date,
                      fv!item.code = local!code
                    ),
                    fv!item.value,
                    ""
                  )
                )
              )
            )
          )
        )
      ),
      if(fv!item.value = 0, "", fv!item)
    )
  )
)

 Hello [mention:7c981ff06b6b4a73b23f4218a5988bec:e9ed411860ed4f2ba0265705b8793d05] , try to concat the list which comes in result.