Spotfire - 在交叉 table 中将一行值与另一行值相除
Spotfire - Dividing one row value with another in a cross table
我有一个十字table,它显示了跨月销售的水果,如下所示:
现在,我希望看到一个 table(如下所示),它将一个单元格与另一个单元格划分为特定列:
如果可以使用 OVER 语句,请告诉我。
更新:
@Chris - 我已经在访问中转换了我的原始 table 并且可以在 Spotfire 中创建下面的交叉 table 可视化。
注意:应用转换后,已售出的苹果、已售出的橙子、已售出的西瓜现在是单独的列。
Cross table visualization
但是,我希望看到下面格式的十字table。
Transposed table
如果可行,请告诉我。如果这可以通过 Iron Python 脚本实现,我可以接受。
谢谢!
由于你的数据是高瘦格式,我原来的答案没有用。我将答案保留为其中的一部分,以防对其他人有所帮助,请参阅下文。
通过您的更新,您似乎已经成功地创建了一个包含您想要的数据的交叉table。虽然如果您可以在行轴、列轴和度量轴上显示精确的轴表达式会很有帮助,但我可以尝试说明如何根据需要在交叉 table 中转置数据。请参阅最后一节的解释。
对于高瘦格式,您将无法使用 OVER 表达式,因为您希望进行显式比较(至少我认为这是不可能的)。首先,我想指出,您必须以某种方式决定要将哪些水果相互比较,或者您可能想要比较所有水果。确切的解决方案将取决于您的实际用例是什么以及您需要它的动态程度。
可能的解决方案:
在你的十字table中,将你的行轴定义为(列名):
<[Axis.Default.Names]>
把你的时间轴放在列轴上,比如:
<BinByDateTime([Time],"Year.Month",1)>
在您的测量轴上,您现在将添加您感兴趣的所有比较,例如:
Sum(if([Fruit]="Apple", [Sold],null)) / Sum(if([Fruit]="Watermelon",[Sold],null)) as [Apples vs Watermelons],
Sum(if([Fruit]="Orange",[Sold],null)) / Sum(if([Fruit]="Watermelon",[Sold],null)) as [Oranges vs Watermelons]
下面是 link 我自己的非常小的虚拟数据集的样子:
您可以将其与文本区域中的用户控件结合使用,如果需要,也许可以使用 $map() 表达式函数使其更加动态。
如果你想要很多动态行为,你可能需要改为使用数据函数。
旧答案
以下是我的原始答案,其中包括对不适用于这种情况的数据的推定。如果其他人确实有这种情况,请保留在这里。
在 table 1 中,您有两个分类轴,一个用于时间,一个用于水果。你显示的指标是水果的销售量。
在 table 2 我会说你只有一个分类轴,时间。之后,您有两个测量值,您的行轴将是“(列名)”。
衡量标准是苹果数除以橙子数,以及橙子数除以西瓜数。如果您右键单击测量轴并转到自定义表达式,您将看到类似的内容:
Sum([Apples]) / Sum([Oranges]) as [Apples vs. Oranges],
Sum([Oranges]) / Sum([Watermelons]) as [Oranges vs. Watermelons]
此外,转到“属性”->“格式”并根据自己的喜好设置百分比格式。
交叉转置 table
看你的截图有点难理解,我猜猜你的轴表达式是什么。即使我猜错了,无论初始状态如何,同样的方法都适用。您只需要将行轴与列轴交换即可。您可以使用轴选择器或从自定义表达式编辑器中复制和粘贴来完成此操作。如果这是您从一开始就拥有的配置:
然后通过交换轴表达式,这就是你得到的:
我有一个十字table,它显示了跨月销售的水果,如下所示:
现在,我希望看到一个 table(如下所示),它将一个单元格与另一个单元格划分为特定列:
如果可以使用 OVER 语句,请告诉我。
更新:
@Chris - 我已经在访问中转换了我的原始 table 并且可以在 Spotfire 中创建下面的交叉 table 可视化。
注意:应用转换后,已售出的苹果、已售出的橙子、已售出的西瓜现在是单独的列。
Cross table visualization
但是,我希望看到下面格式的十字table。
Transposed table
如果可行,请告诉我。如果这可以通过 Iron Python 脚本实现,我可以接受。
谢谢!
由于你的数据是高瘦格式,我原来的答案没有用。我将答案保留为其中的一部分,以防对其他人有所帮助,请参阅下文。
通过您的更新,您似乎已经成功地创建了一个包含您想要的数据的交叉table。虽然如果您可以在行轴、列轴和度量轴上显示精确的轴表达式会很有帮助,但我可以尝试说明如何根据需要在交叉 table 中转置数据。请参阅最后一节的解释。
对于高瘦格式,您将无法使用 OVER 表达式,因为您希望进行显式比较(至少我认为这是不可能的)。首先,我想指出,您必须以某种方式决定要将哪些水果相互比较,或者您可能想要比较所有水果。确切的解决方案将取决于您的实际用例是什么以及您需要它的动态程度。
可能的解决方案:
在你的十字table中,将你的行轴定义为(列名):
<[Axis.Default.Names]>
把你的时间轴放在列轴上,比如:
<BinByDateTime([Time],"Year.Month",1)>
在您的测量轴上,您现在将添加您感兴趣的所有比较,例如:
Sum(if([Fruit]="Apple", [Sold],null)) / Sum(if([Fruit]="Watermelon",[Sold],null)) as [Apples vs Watermelons],
Sum(if([Fruit]="Orange",[Sold],null)) / Sum(if([Fruit]="Watermelon",[Sold],null)) as [Oranges vs Watermelons]
下面是 link 我自己的非常小的虚拟数据集的样子:
您可以将其与文本区域中的用户控件结合使用,如果需要,也许可以使用 $map() 表达式函数使其更加动态。 如果你想要很多动态行为,你可能需要改为使用数据函数。
旧答案
以下是我的原始答案,其中包括对不适用于这种情况的数据的推定。如果其他人确实有这种情况,请保留在这里。
在 table 1 中,您有两个分类轴,一个用于时间,一个用于水果。你显示的指标是水果的销售量。
在 table 2 我会说你只有一个分类轴,时间。之后,您有两个测量值,您的行轴将是“(列名)”。
衡量标准是苹果数除以橙子数,以及橙子数除以西瓜数。如果您右键单击测量轴并转到自定义表达式,您将看到类似的内容:
Sum([Apples]) / Sum([Oranges]) as [Apples vs. Oranges],
Sum([Oranges]) / Sum([Watermelons]) as [Oranges vs. Watermelons]
此外,转到“属性”->“格式”并根据自己的喜好设置百分比格式。
交叉转置 table
看你的截图有点难理解,我猜猜你的轴表达式是什么。即使我猜错了,无论初始状态如何,同样的方法都适用。您只需要将行轴与列轴交换即可。您可以使用轴选择器或从自定义表达式编辑器中复制和粘贴来完成此操作。如果这是您从一开始就拥有的配置:
然后通过交换轴表达式,这就是你得到的: