使用Over with Intersect和Previous的Spotfire意外结果

时间:2018-09-03 04:37:24

标签: spotfire

我想用上一行中的值创建一个新列。在原始表中,这些行用“ 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无法在原始“深度”列中识别出该顺序?

第二个问题:如果进行中间等级计算是否是必要步骤,是否有更优雅的方式编写表达式(例如,在一个表达式中执行而不是创建一个中间列)?

0 个答案:

没有答案