Spotfireを使い始めたばかりで、特定の計算列を作成する方法を理解するのに少し苦労しています。OVER関数を使用する必要があることはかなり確信していますが、それを完全に理解しておらず、インターウェブ上にドキュメントや例はほとんどありません。
これが私が扱っているデータのサンプルです:
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
私が作成しようとしている列は、パス値に基づいています。したがって、場所、ウェーハ、およびxy座標ごとに、pass = 1の場合は常に、bin値をその行の新しい列にコピーします。また、同じpass = 1 bin値を、passがNAではない一致する場所、ウェーハ、xy座標にコピーする必要があります。これが私が見たいものです:
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
ビンをpass = 1の行にコピーしますが、pass = 2の行はコピーしません。
の[bin]
場合[pass] = "NA"
に値が発生しないように編集し、全体を次のIf()
ように囲みます。
If([pass]!="NA", First(If([pass]="1",String([bin]),"NA")) OVER (Intersect([loc],[wafer],[x],[y])), "NA")
あなたは正しい方向に進んでいると思いますが、これは本当に単純な表現ではありません!これが私が思いついたものです:
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])
これらの4つの列の一意の組み合わせごとに、「ノード」の階層を作成します(以下のリンク先のドキュメントを参照)。 データのサイズによっては、が原因で、これは非常に遅い式になる場合があることに注意してくださいIntersect(...)
。データがいつ更新されるかを計算するのに長い時間がかかる場合は、2つの列を使用するとより良い結果が得られる可能性があります。
[ID]
これは単に Concatenate([loc], [wafer], [x], [y])
[Result]
これは上記の答えですが、最後が次のようになっている点が異なります(1つの列でのみ比較している... OVER [ID]
ためIntersect()
、使用する必要はありません)。OVER関数の例とドキュメントについては、Advanced CustomExpressionsのSpotfireヘルプファイルを確認してください。私はそれがまだ完全に理解できないことを知っています。OVER関数は脳にとって少しストレッチです:)
最初の試みにコンテキストを追加し、それが機能しなかった理由を追加するだけです。
の値について[bin]
は計算を行っていないため、次の場合を使用して単純化します。
WHEN [pass] = "1" THEN [bin]
もちろん、[pass] != "1"
他のケースを指定していないので、あなたが持っている式は、のときに値を返しません。これを修正するには、次のようなものが必要です。
CASE
WHEN [pass] = "1" THEN [bin]
WHEN [pass] != "NA" THEN ...
ELSE null
END
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加