Spotfire - 在交叉表中将一行值与另一行值分开

时间:2016-02-18 04:12:38

标签: ironpython spotfire

我有一个交叉表,显示了几个月内销售的水果,如下所示:
Table 1]

现在,我想看一个表格(如下所示),它将一个单元格与另一个单元格划分为一个特定的列:
Table 2]

请通过OVER声明告诉我。

更新

@Chris - 我已经在访问中转换了我的原始表,并可以在Spotfire中创建下面的交叉表可视化。

注意:销售的苹果,销售的橙子,销售的西瓜现在在应用转化后是单独的柱子。

Cross table visualization

但是,我希望以下面的格式看到交叉表。

Transposed table

如果可能,请告诉我。如果可以使用Iron Python脚本实现这一点,我就可以了。

谢谢!

1 个答案:

答案 0 :(得分:1)

由于您的数据格式很粗,我原来的答案不起作用。我保留了答案作为其中的一部分,以防它帮助其他人,见下文。

通过更新,您似乎已设法使用所需数据创建交叉稳定。虽然如果能在行,列和测量轴上显示精确的轴表达式会很有帮助,但我可以尝试说明如何根据需要在交叉表中转置数据。请参阅最后一节以获得解释。

使用高瘦的格式,您将无法使用OVER表达式,因为您希望进行显式比较(至少我不认为这是可能的)。首先,我想指出你必须以某种方式决定你想要比较哪些水果,或者你可能想要比较所有这些水果。确切的解决方案取决于您的实际用例以及您需要的动态。

可能的解决方案:

在你的crosstable中,将你的行轴定义为(列名):

<[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]

这是一个关于如何使用我自己的非常小的虚拟数据集的链接: Example crosstable result

您可以将其与文本区域中的用户控件结合使用,也可以使用 $ map()表达式函数,以便在需要时使其更具动态性。 如果你想要很多动态行为,你可能需要改为使用数据函数。

旧答案

以下是我的原始答案,其中包括对此案例中不适用的数据的推定。如果其他人确实有这种情况,请保持在这里。

在表1中,您有两个分类轴,一个用于时间,一个用于水果。你所展示的措施是销售水果的数量。

在表2中我会说你只有一个分类轴,时间。之后,您有两个测量值,您的行轴将是'(列名)'。

措施将是苹果的数量除以橙子的数量,以及橙子的数量除以西瓜的数量。如果您右键单击测量轴并转到自定义表达式,则可能会出现以下情况:

Sum([Apples]) / Sum([Oranges]) as [Apples vs. Oranges], 
Sum([Oranges]) / Sum([Watermelons]) as [Oranges vs. Watermelons]

另外,转到属性 - &gt;根据自己的喜好格式化和设置百分比格式。

在交叉表中转置

从截图中了解起来有点难,所以我猜猜你的轴表达式是什么。即使我猜错了,无论初始状态如何,相同的方法都适用。您只需要将行轴与列轴交换。您可以使用轴选择器,或从自定义表达式编辑器复制和粘贴来完成此操作。如果这是您从一开始就拥有的那种配置: Original crosstable configuration

然后通过交换轴表达式,这就是你得到的: Transposed crosstable configuration