【问题标题】:Calculations within a spotfire column点火列中的计算
【发布时间】:2018-08-07 13:18:39
【问题描述】:

我的公司决定使用 Spotfire,然后任命我为 Spotfire 大师(因为我当时在那里),现在我正在解决这个问题。我们使用非常大的数据集(我问的是几百万行)。无论如何,该列是 Z 数据,每个顺序单元之间的差异将显示它所代表的机器移动了多远。例如:

Name    Time Stamp         X      Y     Lat     Long      Z         Delta Z
Name    28.3.2018 10:59 0,02438 0,02888 60,49   26,96   0,037794693 
Name    28.3.2018 10:59 0,02671 0,03768 60,49   26,96   0,046186649 0,00839
Name    28.3.2018 10:59 0,02409 0,0294  60,49   26,96   0,038009053 0,00818
Name    28.3.2018 11:00 0,02676 0,03768 60,49   26,96   0,046215582 0,00821
Name    28.3.2018 11:00 0,02393 0,02941 60,49   26,96   0,037915604 0,00830
Name    28.3.2018 11:00 0,02669 0,03761 60,49   26,96   0,046117981 0,00820
Name    28.3.2018 11:00 0,02341 0,02966 60,49   26,96   0,037785496 0,00833
Name    28.3.2018 11:00 0,02673 0,03758 60,49   26,96   0,046116692 0,00833
Name    28.3.2018 11:00 0,02329 0,0297  60,49   26,96   0,037742736 0,00837
Name    28.3.2018 11:00 0,02205 0,0306  60,49   26,96   0,037716873 0,00003

所以,上面是我从 excel 中获取的输出中的几行转储。我在源数据(即 JSON)上运行一个 python 脚本,它输出上面的内容,除了我需要计算的最后两列。我可以使用 Spotfire 来制作 Z 列(这是简单的毕达哥拉斯,因为 X 和 Y 沿着参考点并向上),但我需要的是一天中 Z(delta Z)的变化。在excel中它很容易,因为公式是“=ABS(G3-G2)”,然后将它粘贴到整个列中,它变成“=ABS(G4-G3)”,“=ABS(G5-G4)”等等。由于文件太大,我无法在excel中制作它。

该公式不会将第一个 Z 作为固定的锚点,而是沿用每个 Z。然后数据让我看到机器在特定时期内移动了多远。

这是我无法在 Spotfire 中解决的问题。感谢所有帮助。

【问题讨论】:

  • 您能否展示一下您的预期结果?我想我明白了,但我不想给你一个错误的答案:)
  • 另外,如果您的数据集中还有与日期或某种顺序相关的任何其他列,也请包含在内很有用
  • 我添加了一个屏幕截图...希望对您有所帮助。
  • 这仍然没有真正显示您的预期结果。您想在第 1 行的该列中看到什么?最后一排呢?是否存在暗示行顺序的列,例如时间戳?
  • 我希望创建一个新列,其中包含 .0241457-.27581 的结果。在下一个单元格中向下 .24368 - 27581 依此类推。我将调用 Delta Z。samein excel 将是 =(e2-e1) (e 是第 5 列)。现在有意义吗?

标签: calculated-columns spotfire


【解决方案1】:

更新:感谢您提供时间戳列和说明。我仍然需要使用我创建的[Row] 列,因为我想确保事情按正确的顺序进行,而时间戳的粒度不足以确保这一点。如果您的实际数据集中有一个以秒或毫秒为单位的时间戳,我建议您在 [Row] 上使用它。

也就是说,我看不出与原始结果有太大差异,我认为我在下面的回答几乎仍然完全有效。最大的不同是[Delta Z] 的空白行位于数据集的顶部而不是底部。我通过将表达式更改为:

Abs([Z] - First([Z]) OVER Previous([Row]))

这是结果表。 [Delta Z] 是您在上面发布的结果栏,[DZ_1] 是我的新栏:

DeltaZ    Z              Row  DZ_1
          0.037794693    1    
0.00839   0.046186649    2    0.008391956
0.00818   0.038009053    3    0.008177596
0.00821   0.046215582    4    0.008206529
0.0083    0.037915604    5    0.008299978
0.0082    0.046117981    6    0.008202377
0.00833   0.037785496    7    0.008332485
0.00833   0.046116692    8    0.008331196
0.00837   0.037742736    9    0.008373956
0.00003   0.037716873    10   2.5863000000001E-05

顺便说一句,您可以通过转到编辑»列属性,选择有问题的列,选择Formatting 选项卡,最后根据需要设置 Decimals 下拉菜单。


首先,欢迎来到 StackOverflow。请在未来准备好提供完整的Minimally Complete, Verifiable Example。就 Spotfire 而言,这意味着我可以复制粘贴到 Spotfire 中的示例数据集(以文本形式),其中包括显示预期结果的列。您可以在 Excel 或记事本中创建它。请理解,我正在抽出时间来帮助您解决问题,并要求您必须尽可能让我这样做。

第二,欢迎来到 Spotfire!我学的和你一样。我强烈建议您要求您的雇主为 TIBCO Spotfire 在线课程付费,因为它们将为使用该工具提供很好的理解基础。

除此之外,由于您尚未完全回答我有关您的数据集的问题,因此我对您的数据集做出了以下假设。如果我的假设不正确,请回答我关于您的数据集的问题。

  1. 没有指示某种顺序的列,例如时间戳或行号
  2. 您不希望数据集的最后一行有任何结果

为了满足您的要求,首先我需要创建一个列来删除上面的假设 #1。我将此专栏称为[Row],其表达方式很简单:

RowId()

这将输出该行的文字行号(与 BaseRowId() 函数相反,它在应用任何标记和过滤器后显示 visual 行号)。

我之所以创建这个是因为为了将行相互比较,Spotfire 需要某种指示符,表明哪一行在下一行之前。

然后我创建了第二列[Delta Z],其表达式如下:

Abs([Z] - First([Z]) OVER Next([Row]))

换句话说,“对于每一行,取该行的[Z] 的当前值,然后从在所有后续行(即下一行)中找到的[Z] 的第一个值中减去它。”

这会产生以下结果:

Z          Row     Delta Z
0.24157    1       0.03424
0.27581    2       0.03195
0.24386    3       0.000149999999999983
0.24371    4    

您可以通过该可视化的“属性”对话框在任何表格可视化中隐藏[Row],但不能完全删除它。

【讨论】:

  • 感谢您的宝贵时间。我已经学到了一些东西,需要时间戳。有一个,它是解析源 JSON 数据的 python 的一部分。非常感谢您的时间,我会查看您的解决方案,因为它似乎发布了一些我需要学习的新问题。
  • 太棒了 :) 如果您还有其他问题,我们很乐意澄清或完善答案。如果您确实发现它解决了问题,那么请考虑接受它是正确的,这样我就可以获得那些甜蜜的互联网积分;)
  • 另外,如果您决定参加 TIBCO 培训但不知道从哪里开始,我可以推荐一些课程并将您连接到我们的培训部门。如果是这种情况,请通过我个人资料中的电子邮件地址与我联系
  • 如果没问题,我会按照您的建议再次编辑问题,这样会更清楚,因为数学没有给出我需要的结果。我
  • 我终于看到了这个。非常感谢您的帮助,前面提到的甜蜜投票是您的。
猜你喜欢
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多