根据另一列 - Spotfire排名日期

时间:2018-02-22 21:45:13

标签: spotfire

在使用自定义表达式时,是否有人知道如何绕过使用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()

2 个答案:

答案 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()绝对是正确的解决方案。