在使用自定义表达式时,是否有人知道如何绕过使用OVER函数RANK或订购日期的Spotfire限制?
提供一点背景,我试图根据以下数据识别或标记租约1,2,3等。例如,因为我们在左栏中看到两次63,我想返回1从2016年1月1日和2016年8月1日开始,确定两种不同的租约。然后是1和2表示72,1表示140表示一个。不幸的是,OVER函数只能用于聚合方法,而且我不知道另一种方法来产生我正在寻找的结果。
class ProfileScreen(Screen):
pass
class Main_app(Screen):
pass
AppKv = Builder.load_file("App.kv")
class MyApp(App):
def build(self):
return AppKv
if __name__ == '__main__':
MyApp().run()
答案 0 :(得分:3)
使用此:
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
答案 1 :(得分:1)
请将@ blakeoft的答案视为正确答案!
表示,作为一个FYI,First()
被视为聚合方法,和 OVER
语句可以包含在If()
内!所以你可以用如下表达式来完成同样的事情:
If([Lease_From] = First([Lease_From]) OVER ([Tenant]), 1, 2)
当您以这种方式组合If()
和OVER
时,您可以获得一些非常酷且强大的可视化,但是您确实无法有效地标记数据。这是因为表达式是从If()
而不是OVER
的上下文中评估的;换句话说,所有行都被考虑,而不是仅考虑所选行。
你可以用一些黑魔法(AKA数据函数)解决这个问题,但它有点人为。
再次,在这种情况下,Rank()
绝对是正确的解决方案。