根据另一列对日期进行排名 - 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()
绝对是正确的解决方案。
有谁知道如何绕过 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()
绝对是正确的解决方案。