【问题标题】:Spotfire - Dividing one row value with another in a cross tableSpotfire - 在交叉表中将一个行值与另一个值相除
【发布时间】:2016-05-30 02:26:33
【问题描述】:

我有一个交叉表,显示了月份销售的水果,如下所示:

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

请让我知道是否可以使用 OVER 语句。


更新:

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

注意:在应用转换后,售出的苹果、售出的橙子、售出的西瓜现在是单独的列。

Cross table visualization

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

Transposed table

如果可能,请告诉我。如果这可以通过 Iron Python 脚本实现,那我很好。

谢谢!

【问题讨论】:

    标签: ironpython spotfire


    【解决方案1】:

    由于您的数据采用高瘦格式,因此我的原始答案无效。我保留了答案作为其中的一部分,以防它对其他人有所帮助,请参见下文。

    通过您的更新,您似乎已经成功地创建了一个包含所需数据的交叉表。如果您可以在行轴、列轴和度量轴上显示精确的轴表达式会很有帮助,但我可以尝试说明如何根据需要转置交叉表中的数据。有关说明,请参阅最后一节。

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

    可能的解决方案:

    在您的交叉表中,将您的行轴定义为(列名):

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

    以下是我自己的非常小的虚拟数据集的外观链接:

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


    旧答案

    以下是我的原始答案,其中包括关于在这种情况下不适用的数据的假设。如果其他人确实有这种情况,请保留在这里。

    在表 1 中,您有两个分类轴,一个代表时间,一个代表水果。而你显示的衡量标准是销售水果的数量。

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

    衡量标准是苹果数除以橙子数,以及橙子数除以西瓜数。如果您右键单击测量轴并转到自定义表达式,您会得到类似的内容:

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

    另外,转到属性 -> 格式并根据自己的喜好设置百分比格式。

    在交叉表中转置

    从您的屏幕截图中有点难以理解,所以我会猜测您的轴表达式是什么。即使我猜错了,同样的方法也适用于初始状态。您只需要将行轴与列轴交换。您可以使用轴选择器来完成此操作,或者从自定义表达式编辑器中复制和粘贴。如果这是您从一开始就有的配置:

    然后通过交换轴表达式,您将得到:

    【讨论】:

    • 感谢克里斯的解决方案。澄清一下,苹果、橙子等是“水果类型”列的一部分。它们不是单独的列。我正在尝试除 sum([Fruit Type].[apples])/sum([Fruit Type].[oranges])。我不确定如何在自定义表达式中引用特定列中的行项。
    • @ksp:在这种情况下,我的回答不正确。我会让它留在那里,让它成为一个例子,以防另一个人的数据以我假设的方式结构化。在这种情况下,OVER 语句将无法为您提供您想要的东西,您需要更多地处理您的数据(据我所知)。我可以给出更详细的新答案,但解决方案的复杂性取决于您希望它有多灵活。
    • @Chris- 我在我原来的问题中添加了更多细节。请检查并让我知道我正在寻找的解决方案是否可行。谢谢!
    • @ksp:在您的新示例中,如果“跨表可视化”是一个交叉表,您只需将行轴和列轴表达式相互切换即可获得“转置表”。
    • @Chris- 我试过这样做。 sum([Apples sold])、sum([oranges sold]) 等每个月都会跨列重复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多