使用 Spotfire 中的计算列计算每组的总值

calculate the total value for each group using Calculated Column in Spotfire

我在 Spotfire 中使用计算列计算行的总和时遇到问题。

例如原始数据如下,原始数据table按id排序,对于每种类型,顺序为2,3,0。

id       type value state
 1        1    12   2
 2        1    7    3
 3        1    10   0
 4        2    11   2
 5        2    6    3
 6        3    9    0
 7        3    7    2
 8        3    5    3
 9        2    9    0
 10       1    7    2
 11       1    3    3
 12       1    2    0

对于(2,3,0)的每个循环的类型,我想求和,那么结果可能是:

 id       type value state  cycle time 
 1        1    12   2
 2        1    7    3
 3        1    10   0        29
 4        2    11   2
 5        2    6    3
 6        3    7    2             
 7        3    5    3
 8        3    9    0        21
 9        2    9    0        26
 10       2    7    2
 11       2    3    3
 12       2    2    0        12

注意:只有状态为0的行才会有和值,我认为当我们订购type时更容易看到规则:

 id       type value state  cycle time 
 1        1    12   2
 2        1    7    3
 3        1    10   0        29
 4        2    11   2
 5        2    6    3
 9        2    9    0        26
 10       2    7    2
 11       2    3    3
 12       2    2    0        12
 6        3    7    2             
 7        3    5    3
 8        3    9    0        21

感谢您的宝贵时间和帮助!

这里有一个解决方案。

  1. 插入计算列 RowId() 并将其命名为 RowId
  2. 插入计算列 If(Mod([RowId],3)=0,[RowId] / 3,Ceiling([RowId] / 3)) 并将其命名为 Groups
  3. 插入计算列 Sum([value]) OVER ([Groups]) 并将其命名为 运行 Sum
  4. 插入计算列 If([state] = 0,[RunningSum]) 并将其命名为 OnlyState=0

这里唯一要真正解释的是#2。按照您在示例中列出的方式对数据进行排序,基于 RowId,每个组的最后一行应该可以被 3 整除。我们必须这样做,因为您的类型字段对于任何给定类型都可以有多个组。 RowId 3、6、9、12 等的模数都为 0,因为它们可以被 3 整除。这标志着每组中的最后一行。如果它是最后一行,我们只需将它设置为 RowId / 3。这给了我们组 1、2、3、4 等...对于不能被 3 整除的行,我们将它们四舍五入到最接近的整数除数...这将是集合中的最后一行。

最后计算的列是我知道如何只获取您关心的值的唯一方法。如果您在其他任何地方使用 If [state] = 0 逻辑,您将否定所有其他行。