首页 > 解决方案 > 使用 Over 与 Intersect & Previous 的 Spotfire 意外结果

问题描述

我想创建一个新列,其中的值取自前一行。这些行在原始表中由“ID”标记并按“深度”排序。这是我认为应该这样做的自定义表达式,但是我得到了意想不到的结果,其中某些行没有从前一行中获取值。

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  

在我看来,这个问题可能与 Depth 列的顺序有关。作为一种解决方法,如果我首先计算一个排名列(称为“RankColumn”),我可以成功获得预期的结果

Rank([Depth],[ID])

然后我使用计算出的排名来计算 over 语句

Max([Value]) over Intersect([ID],Previous([RankColumn]))

第一个问题:为什么 Spotfire 不能识别原始 Depth 列中的顺序?

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

标签: spotfire

解决方案


推荐阅读