使用 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
感谢您的宝贵时间和帮助!
这里有一个解决方案。
- 插入计算列
RowId()
并将其命名为 RowId
- 插入计算列
If(Mod([RowId],3)=0,[RowId] / 3,Ceiling([RowId] / 3))
并将其命名为 Groups
- 插入计算列
Sum([value]) OVER ([Groups])
并将其命名为 运行 Sum
- 插入计算列
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 逻辑,您将否定所有其他行。
我在 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
感谢您的宝贵时间和帮助!
这里有一个解决方案。
- 插入计算列
RowId()
并将其命名为 RowId - 插入计算列
If(Mod([RowId],3)=0,[RowId] / 3,Ceiling([RowId] / 3))
并将其命名为 Groups - 插入计算列
Sum([value]) OVER ([Groups])
并将其命名为 运行 Sum - 插入计算列
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 逻辑,您将否定所有其他行。