2015-10-06 157 views
0

我剛開始使用Spotfire,並且在確定如何創建特定計算列方面遇到了一些困難時間。我很確定我需要使用OVER函數,但是我還沒有弄明白,並且幾乎沒有任何文檔或互聯網上的示例。Spotfire中另一列中基於計算列的基於關閉值的值

這裏的數據樣本我的工作:

loc  wafer x y pass bin 
T25  10  2 37 1  13 
T25  10  2 37 2  6 
CMI  10  2 37 NA  13 
T25  10  2 37 NA  13 
T25  10  2 38 1  13 
T25  10  2 38 2  13 
CMI  10  2 38 NA  13 
T25  10  2 38 NA  13 
T25  10  2 70 1  1 
T25  10  2 70 2  4 
CMI  10  2 70 NA  1 
CMI  10  2 70 NA  1 
T25  10  2 70 NA  1 
T25  10  2 70 NA  1 

我試圖創建的列將根據斷通的價值。因此,對於每個位置,晶圓和x-y座標,只要pass = 1,我想將bin值複製到該行的新列中。我還希望將相同的pass = 1 bin值複製到匹配位置,wafer,x-y座標,其中pass不是NA。這是我想看到的內容:

loc  wafer x y pass bin newCol 
T25  10  2 37 1  13 13 
T25  10  2 37 2  6 13 
CMI  10  2 37 NA  13 NA 
T25  10  2 37 NA  13 NA 
T25  10  2 38 1  13 13 
T25  10  2 38 2  13 13 
CMI  10  2 38 NA  13 NA 
T25  10  2 38 NA  13 NA 
T25  10  2 70 1  1 1 
T25  10  2 70 2  4 1 
CMI  10  2 70 NA  1 NA 
CMI  10  2 70 NA  1 NA 
T25  10  2 70 NA  1 NA 
T25  10  2 70 NA  1 NA 

我目前的表達式如下:

CASE 
    WHEN [pass] = "1" THEN Concatenate([bin]) OVER ([location],[wafer],[x],[y]) 
END 

它複製斌與通= 1的所有行,但不是傳球= 2行。

回答

1

編輯避免使[bin]值時[pass] = "NA",環繞在If()像這樣整個事情:

If([pass]!="NA", First(If([pass]="1",String([bin]),"NA")) OVER (Intersect([loc],[wafer],[x],[y])), "NA") 

我認爲你是在正確的軌道上,但是這ISN」真的是一個簡單的表達!這裏就是我想出了:

First(If([pass]="1",String([bin]),"NA")) OVER (Intersect([loc],[wafer],[x],[y])) 

讓我們打破這:

  • First(...)選擇,因爲我們想,好了,第一個結果!內聯If()將返回NA的每一行中[pass] != 1,你可以通過改變First()Concatenate()
  • If([pass] = "1", String([bin]), "NA")可以確保我們只有史以來記錄[bin]NA值觀察此。沒有這個,我們的結果將包含[bin]的所有值 - 請嘗試刪除If()並查看!
  • OVER Intersect([loc], [wafer], [x], [y])爲這四列的每個唯一組合創建一個「節點」層次結構(請參閱下面鏈接的文檔)。

注意,取決於你的數據的大小,這可能是一個非常緩慢的表現,由於Intersect(...)。如果你發現,它需要很長的時間,當數據被刷新來計算,你可能會有更好的結果與兩列:

  1. [ID]這簡直是Concatenate([loc], [wafer], [x], [y])
  2. [Result]這是上面的回答,但結束看起來... OVER [ID](我們並不需要使用Intersect()因爲我們只在單個列比較)

的文檔上與前在功能OVER請檢查Spotfire幫助文件Advanced Custom Expressions。我知道這還不是完全可以理解的。 OVER功能有點大腦:)


只是一些背景添加到您的第一次嘗試,爲什麼它不工作牽強:

因爲你沒有做任何的計算對於[bin]的值,則通過使用下面的情況下簡化:

WHEN [pass] = "1" THEN [bin] 
當然

,你有沒有返回任何時[pass] != "1"值,因爲沒有指定任何其它情況下的表達。要解決這個問題,你需要這樣的事情:

CASE 
    WHEN [pass] = "1" THEN [bin] 
    WHEN [pass] != "NA" THEN ... 
    ELSE null 
END 
+0

感謝所有的指針。這非常有幫助!所以,當我運行這個時,它將bin值添加到沒有傳遞值的行中。我怎樣才能讓它忽略沒有傳遞值的行?因此,例如,它的未來出像: LOC晶片的xy通倉NEWCOL T25 10 2 37 1 13 13 T25 10 2 37 2 6 13 CMI 10 2 37 NA 13 NA T25 10 2 37 NA 13 13 –

+0

我沒有意識到會出來看起來很奇怪。基本上,第四行(不包括標題)的newCol值將出現在13而不是NA。 –

+0

gotcha!我更新了答案,以反映該要求:) – niko