2016-09-06 180 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