spotfire 列中的计算
Calculations within a spotfire column
我的公司决定使用 spotfire,然后任命我为 spotfire guru(因为我在那里),现在我正在弄清楚。我们使用非常大的数据集(我问的是几百万行)。无论如何,该列是 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中解决不了的就是这个。感谢所有帮助。
更新: 感谢您提供时间戳列和说明。我仍然需要使用我创建的 [Row]
列,因为我想确保事情以正确的顺序进行,而时间戳不够精细,无法确保这一点。如果您的实际数据集中有秒或毫秒的时间戳,我建议在 [Row]
.
上使用它
就是说,我没有看到与原始结果有太大差异,而且我认为我在下面的回答几乎完全有效。最大的区别是 [Delta Z]
的空白行位于数据集的顶部而不是底部。我已经通过将表达式更改为:
来解决这个问题
Abs([Z] - First([Z]) OVER Previous([Row]))
这是结果 table。 [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 下拉列表。
首先,欢迎来到 Whosebug。以后请准备好提供完整的Minimally Complete, Verifiable Example。就 Spotfire 而言,这意味着我可以将其复制粘贴到 Spotfire 中的样本数据集(文本),包括显示预期结果的列。您可以在 Excel 或记事本中创建它。请理解我抽出时间来帮助您解决问题,并要求您必须尽可能简单地帮助我解决问题。
其次,欢迎来到Spotfire!我跟你学的一样。我强烈建议让您的雇主支付 TIBCO Spotfire 在线课程的费用,因为它们将为使用该工具提供很好的理解基础。
除此之外,我对您的数据集做出了以下假设,因为您尚未完全回答我关于您的数据集的问题。如果我的假设不正确,请回答我关于你的数据集的问题。
- 没有列表示某种顺序,例如时间戳或行号
- 您不希望数据集的最后一行有任何结果
为了满足您的要求,首先我需要创建一个列来删除上面的假设 #1。我将此列命名为 [Row]
,它的表达式很简单:
RowId()
这将输出该行的文字行号(与 BaseRowId()
函数相反,它显示 visual 行号,在任何标记和过滤器被删除之后应用)。
我创建这个是因为为了将行相互比较,Spotfire 需要某种指示器来指示哪一行在下一行之前。
然后我使用以下表达式创建了第二列 [Delta Z]
:
Abs([Z] - First([Z]) OVER Next([Row]))
换句话说,"for each row, take the current value of [Z]
for that row and subtract it from the first value of [Z]
found over all of the following rows (i.e., the next row)."
这会产生以下结果:
Z Row Delta Z
0.24157 1 0.03424
0.27581 2 0.03195
0.24386 3 0.000149999999999983
0.24371 4
您可以通过该可视化的“属性”对话框在任何 table 可视化中隐藏 [Row]
,但您不能将其完全删除。
我的公司决定使用 spotfire,然后任命我为 spotfire guru(因为我在那里),现在我正在弄清楚。我们使用非常大的数据集(我问的是几百万行)。无论如何,该列是 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中解决不了的就是这个。感谢所有帮助。
更新: 感谢您提供时间戳列和说明。我仍然需要使用我创建的 [Row]
列,因为我想确保事情以正确的顺序进行,而时间戳不够精细,无法确保这一点。如果您的实际数据集中有秒或毫秒的时间戳,我建议在 [Row]
.
就是说,我没有看到与原始结果有太大差异,而且我认为我在下面的回答几乎完全有效。最大的区别是 [Delta Z]
的空白行位于数据集的顶部而不是底部。我已经通过将表达式更改为:
Abs([Z] - First([Z]) OVER Previous([Row]))
这是结果 table。 [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 下拉列表。
首先,欢迎来到 Whosebug。以后请准备好提供完整的Minimally Complete, Verifiable Example。就 Spotfire 而言,这意味着我可以将其复制粘贴到 Spotfire 中的样本数据集(文本),包括显示预期结果的列。您可以在 Excel 或记事本中创建它。请理解我抽出时间来帮助您解决问题,并要求您必须尽可能简单地帮助我解决问题。
其次,欢迎来到Spotfire!我跟你学的一样。我强烈建议让您的雇主支付 TIBCO Spotfire 在线课程的费用,因为它们将为使用该工具提供很好的理解基础。
除此之外,我对您的数据集做出了以下假设,因为您尚未完全回答我关于您的数据集的问题。如果我的假设不正确,请回答我关于你的数据集的问题。
- 没有列表示某种顺序,例如时间戳或行号
- 您不希望数据集的最后一行有任何结果
为了满足您的要求,首先我需要创建一个列来删除上面的假设 #1。我将此列命名为 [Row]
,它的表达式很简单:
RowId()
这将输出该行的文字行号(与 BaseRowId()
函数相反,它显示 visual 行号,在任何标记和过滤器被删除之后应用)。
我创建这个是因为为了将行相互比较,Spotfire 需要某种指示器来指示哪一行在下一行之前。
然后我使用以下表达式创建了第二列 [Delta Z]
:
Abs([Z] - First([Z]) OVER Next([Row]))
换句话说,"for each row, take the current value of [Z]
for that row and subtract it from the first value of [Z]
found over all of the following rows (i.e., the next row)."
这会产生以下结果:
Z Row Delta Z
0.24157 1 0.03424
0.27581 2 0.03195
0.24386 3 0.000149999999999983
0.24371 4
您可以通过该可视化的“属性”对话框在任何 table 可视化中隐藏 [Row]
,但您不能将其完全删除。