2016-09-23 86 views
2

我對使用Spotfire中計算列的行的差異計算存在問題。計算Spotfire中特定行的同一列的差異

我想知道是否有可能創建一個計算列,將計算當前行與具有不同屬性的下一行之間的差異。 的試樣臺可以是這樣的:

enter image description here

結果可能是這樣的:

enter image description here

基本行是:

  1. 類型 = 1,然後計算其目前的差異及其下一個最近的行,其類型 = 0,則結​​果添加到新的計算列。
  2. 順便說一句,該值始終增加:)
  3. 例如,對於第一個結果,電流值是20,下一行是與0最近的類型,和下一行的值是22,那麼結果爲2
  4. 但下一個類型= 1時,電流值是25,和= 0其最接近的類型是在第六行中,所以結果可能是29-25 = 4

我我試過的方法:

  1. 我添加了一個新的ROWID列
  2. 然後嘗試代碼:

    if([type]=1),[value] - Sum([value]) OVER (PreviousPeriod([RowID])),null) 
    

,但它只是表明1型,沒有1型和0 :(

任何幫助的區別或建議將不勝感激:)

謝謝!

+0

確實VALUE總是隨着新行的增加而增加或者可以減少 – scsimon

+0

嗨,VALUE總是增加:) – ZAWD

+0

感謝您提供的信息@Zawd – scsimon

回答

4
  1. 插入一列RowId()並將其命名爲RowNum
  2. 插入一列有這個表達式:

([value] - first([value]) over (intersect(previous([type]),AllNext([RowNum])))) * -1

這裏是它的樣子。我將該列命名爲t1。您也可以忽略Val柱:

Results

說明:

這裏的技巧是限制OVER條款那些會在當前行後的值。此外,我們希望獲得符合我們標準的第一個,下一個可用價值。因此,我們取第一個值first([value]),它有以前的[type]。由於[type]沒有任何負值,因此這總是爲0,因此這會將我們正在使用的行限制爲使用previous([type])[type] = 1。現在,爲了僅限於當前行之後的行,我們使用AllNext([RowNum])Intersect聲明狀態取值滿足這兩個規則。所以看着RowNum = 4它是這樣評價的。

[value] = 25 
Previous([type])= 0 since current type is 1 
AllNext([RowNum]) = RowNum that is > our RowNum which is 4, so tow numbers 5 - 7 
The First([Value]) that meets these criteria is in RowNum = 6, which is 29 since it has [Type] = 0 and it's RowNum is > 4 
Note, Row 7 also meets this criteria but it isn't the First() one. 
Now, do the math... 25-29 = -4, and since you said the values always increase, we just multiply by -1 to get it in the format you wanted 
+0

非常感謝您的詳細解釋!真的很大的幫助! – ZAWD

+0

我很高興我可以幫忙@ZAWD OVER功能是Spotfire最困難的一種表達方式,讓我學習,所以我嘗試描述性的! – scsimon

+0

我真的很新,我想我可以更快地學習它,但很難在短時間內理解語法 – ZAWD

0

@ZAWD - 解決這個的另一種方法:

步驟1:插入計算列 'ROWID' 使用表達式RowId的()

步驟2:插入一計算列'test0'使用以下表達式

sum([Value]) over (Intersect(next([RowID]),Previous([Type]))) 

步驟3:插入計算的列 '測試' 使用表達式下面

[Value] - sum([test0]) over (Next([RowID])) 

步驟4:插入計算列 'myresult' 使用下面

Abs(If((Sum([Type]) over ([RowID])=1) and (Sum([Type]) over (Next([RowID]))=1),[test],[Value] - [test0])) 

注意表達式:' test0'和'test'列在後臺運行。他們不必被包含在主表

決賽桌看起來像下面:

enter image description here

此外,該解決方案工作正常取其責令值在我測試了這個解決方案與不同的情況下,似乎工作正常。