spotfire - 根据 Spotfire 中另一列中的值计算的列

标签 spotfire

我刚刚开始使用 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  

我尝试创建的列将基于传递值。因此,对于每个位置、晶圆和 x-y 坐标,每当 pass=1 时,我想将 bin 值复制到该行的新列中。我还希望将相同的 pass=1 bin 值复制到匹配位置、晶圆、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

它将 bin 复制到 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()将为 [pass] != 1 的每一行返回一个 NA ,您可以通过更改 First() 来观察这一点至Concatenate()
  • If([pass] = "1", String([bin]), "NA")确保我们记录 [bin] 中的值或不适用。如果没有这个,我们的结果将包含 [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

关于spotfire - 根据 Spotfire 中另一列中的值计算的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32973102/

相关文章:

ironpython - 将 Spotfire 图形导出到 PowerPoint 的脚本

ironpython - spotfire 铁蟒 : Append new row to a data-table

visualization - 如何在 Spotfire 中的过滤器中隐藏特定值?

javascript - 是否可以在 spotfire 文本区域显示图像/消息以等待数据加载?

tomcat - Spotfire Server 是否对按需数据进行任何缓存?

jquery - 如何将页面上的 DIV 组与其他 div 对齐

ironpython - 如何在 Spotfire 中添加计算列并使用 IronPython 脚本执行计算

javascript - 当我将鼠标悬停在 Spotfire 可视化标题上时,有没有办法显示悬停/工具提示信息?

javascript - 从 json 数据渲染表格后,如何根据 Datatables.js 中的条件为每个单元格着色?

ironpython - 在 spotfire 中编辑数据表中的行值