根据另一列对日期进行排名 - Spotfire

Ranking Dates Based on Another Column - Spotfire

有谁知道如何绕过 Spotfire 在使用自定义表达式时使用 OVER 函数对日期进行排名或排序的限制?

提供一点背景知识,我正在尝试根据以下数据将租约识别或标记为 1、2、3 等。例如,由于我们在左列中看到两次 63,我想 return a 1 和 a 2 来标识两个不同的租约,从 1/1/2016 和 8/1/2016 开始。然后是 1 和 2 代表 72,1 代表 140 等等。不幸的是,OVER 函数只能与聚合方法一起使用,我不知道还有另一种方法可以产生我正在寻找的结果。

Tenant Lease_From  Lease_To     Tenant_status
63     1/1/2016    1/31/2017    Current
63     8/1/2017    7/31/2018    Current
72     10/1/2016   7/31/2017    Current
72     8/1/2017    7/31/2018    Current
140    2/1/2017    7/31/2018    Current
149    8/1/2016    7/31/2017    Current
149    8/1/2017    7/31/2018    Current
156    1/15/2017   3/31/2018    Current
156    4/1/2018    3/31/2019    Current

使用这个:

Rank([Lease_From], [Tenant])

结果如下:

Tenant Lease_From  Lease_To     Tenant_status Rank([Lease_From], [Tenant])
63     1/1/2016    1/31/2017    Current       1
63     8/1/2017    7/31/2018    Current       2
72     10/1/2016   7/31/2017    Current       1
72     8/1/2017    7/31/2018    Current       2
140    2/1/2017    7/31/2018    Current       1
149    8/1/2016    7/31/2017    Current       1
149    8/1/2017    7/31/2018    Current       2
156    1/15/2017   3/31/2018    Current       1
156    4/1/2018    3/31/2019    Current       2

请考虑@blakeoft 的回答是否正确!

也就是说,作为 FYI,First() 被认为是一种聚合方法, OVER 语句可以包含在 [=13= 中]!所以你可以用像这样的表达式来完成同样的事情:

If([Lease_From] = First([Lease_From]) OVER ([Tenant]), 1, 2)

当您以这种方式组合 If()OVER 时,您可以获得一些非常酷和强大的可视化效果,但您确实失去了有效标记数据的能力。这是因为表达式是从 If() 而不是 OVER 的上下文中求值的;换言之,将考虑所有行,而不是仅考虑选定的行。

您可以使用一些黑魔法(又名数据函数)来解决这个问题,但这有点做作。

同样,在这种情况下,Rank() 绝对是正确的解决方案。