Неожиданный результат Spotfire с использованием Over с Intersect & Previous - PullRequest
0 голосов
/ 03 сентября 2018

Я хотел бы создать новый столбец со значениями, взятыми из предыдущей строки. Строки помечены «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  

Мне кажется, что проблема может быть связана с упорядочением столбца Глубина. В качестве обходного пути я могу успешно получить ожидаемый результат, если сначала вычислю столбец рейтинга (назовите его «RankColumn»)

Rank([Depth],[ID])

Затем я вычисляю утверждение over, используя вычисленный ранг

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

Первый вопрос: почему Spotfire не распознал порядок в исходном столбце Depth?

Второй вопрос: если выполнение вычисления промежуточного ранга является необходимым шагом, существует ли более элегантный способ записать выражение (например, сделать это в одном выражении, а не создавать промежуточный столбец)?

...