按类别划分的 Spotfire DenseRank,我是否使用 OVER?

Spotfire DenseRank by category, do I use OVER?

我正在尝试对 spotfire 中的一些数据进行排名,但在编写计算它的公式时遇到了一些麻烦。这是我正在使用的内容的细分。

分组:测试组

SNP:我正在查看的 SNP

计数:特定 SNP 的计数

我想做的是对组内每个 SNP 的平均计数进行排名。因此,然后我可以看到,在一个组中,哪个 SNP 排名第一、第二等

谢谢!

TL;DR 免责声明: 您可以这样做,但如果您经常更换十字架 table,这可能会成为一个巨大的麻烦。确保在任何修改后仔细检查逻辑是否符合您的预期。 谨慎行事。

您似乎要寻找的自定义表达式的基础如下:

Max(DenseRank(Count() OVER (Intersect([Group],[SNP])),"desc",[Group]))

这给出了总行数而不是平均值;我不确定 "Count" 是否应该是一个专栏。如果你真的想把它变成一个平均值,一定要相应地调整。

如果您只有左侧嵌套的组和 SNP,则大功告成。

第一期,当你想过滤它的时候,它只给你过滤集中那些的密集排名。在某些情况下,这很好,也是您正在寻找的;在其他情况下,事实并非如此。如果您希望它快速保持其值,而不考虑过滤,您可以使用相同的逻辑,但将它放在计算列中,而不是放在自定义表达式中。然后,在您的 CrossTable 聚合中,获取计算列值的最大值。

计算列:

DenseRank(Count() OVER (Intersect([Group],[SNP])),"desc",[Group])

第二期:您想通过 Group 和 SNP 以外的其他方式进行调整。也许,例如,按日期?如果您将日期放在顶部,它将显示每个月的相同数字——总数字。这不是特别有用。

在一定程度上,Spotfire 的 Custom Expressions 可以处理这种修改。如果您在使用单个列之间切换,您可以使用以下内容:

Max(DenseRank(Count() OVER (Intersect([${Axis.Columns.ShortDisplayName}],[Group],[SNP])),"desc",[Group],[${Axis.Columns.ShortDisplayName}]))

这会自动从顶部拉入该列,并显示每个单独处理日期的排名。

但是,如果您开始嵌套、使用层次结构、重命名您的列或进行多个聚合并在顶部抛出(列名),您将开始不得不为自定义表达式付出大量代价。您需要围绕 Axis.Column 进行某种形式的字符串替换,或者使用表达式而不是短名称,并摆脱嵌套等

任何复杂层都需要这种分析,所以如果您的最终用户有权修改枢轴 table...老实说,我可能不会给他们这个专栏。

第三个问题: 我不知道这是否是一个问题,但是你说 "Average Counts" -- 平均每天?每月?

取平均值时,您需要决定,例如,一个月是该月的总天数还是特定付款人拥有数据的天数。无论您决定聚合它,请确保您在正确的级别上进行聚合。

郑重声明,我喜欢这个问题的前提;这是我以前认为有用的东西,但从未花时间尝试实现,因为对列进行排序或将 table 限制为仅显示前 10 个值要简单得多