2016-09-06 109 views
1

我对Spotfire中使用计算列的行的总计算有一个问题。使用Spotfire中的计算列计算每个组的总值

例如,原始数据如下,原始表格是按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将具有总和值,我认为这将是更容易看到的规则,当我们订购类型

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

以下是您的解决方案。

  1. 插入计算列RowId()并将其命名为ROWID
  2. 插入计算列If(Mod([RowId],3)=0,[RowId]/3,Ceiling([RowId]/3))并将其命名为
  3. 插入计算列Sum([value]) OVER ([Groups])并将其命名为运行总和
  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逻辑,则取消所有其他行。

enter image description here

+0

嗨感谢您的解决方案,但实际上该表的默认顺序排序ID,当我插入ROWID列,这是相同的与您正在将不得不id列 – ZAWD

+0

@ZAWD在将数据导入spotfire之前对数据进行排序。这是没有办法的。 – scsimon

+0

okok,谢谢,我只是在csv文档中试过,然后再将它导入spotfire,它工作:) – ZAWD