我想用上一行中的值创建一个新列。在原始表中,这些行用“ ID”标记,并按“ Depth”排序。这是我认为应该执行的自定义表达式,但是在某些行未从前一行中获取值的情况下,我得到了意外的结果。
Max([Value]) over Intersect([ID],Previous([Depth]))
这是一个示例表,其中包含我的预期结果和上面表达式给出的实际结果。
ID Depth Value Expected Actual
Object1 0 0.02
Object1 3033 68.87 0.02
Object1 3349 70.82 68.87
Object1 3538 70.65 70.82
Object1 3791 70.38 70.65 70.65
Object1 4044 69.31 70.38 70.38
Object1 4297 71.13 69.31 69.31
Object1 4549 70.9 71.13
Object1 4802 70.59 70.9
Object1 5055 71.56 70.59
Object1 5307 71.34 71.56 71.56
Object1 5560 71.32 71.34
Object1 6381 71.5 71.32
Object1 6444 71.62 71.5 71.5
Object1 6544 71.86 71.62 71.62
Object2 0 0.02
Object2 962 267.58 0.02 0.02
Object2 1024 276.67 267.58 267.58
Object2 1213 273.11 276.67 276.67
Object2 1529 275.56 273.11 273.11
Object2 1593 275.96 275.56 275.56
Object2 1656 275.15 275.96 275.96
Object2 2854 278.35 275.15 275.15
Object2 3107 276.45 278.35
Object2 3359 270.83 276.45
Object2 4370 272.89 270.83
Object2 4623 271.93 272.89
Object2 4877 269.93 271.93
Object2 5504 270.51 269.93
Object2 5538 270.38 270.51 270.51
Object2 5541 270.37 270.38 270.38
Object2 5688 269.8 270.37
在我看来,这个问题可能与“深度”列的顺序有关。解决方法是,如果我首先计算一个等级列(称为“ RankColumn”),则可以成功获得预期的结果
Rank([Depth],[ID])
然后我使用计算出的排名计算over语句
Max([Value]) over Intersect([ID],Previous([RankColumn]))
第一个问题:为什么Spotfire无法在原始“深度”列中识别出该顺序?
第二个问题:如果进行中间等级计算是否是必要步骤,是否有更优雅的方式编写表达式(例如,在一个表达式中执行而不是创建一个中间列)?