Spotfire: заполнить нулями предыдущее значение в вычисляемом столбце - PullRequest
0 голосов
/ 24 октября 2019

Я сделал конкретное заявление, чтобы в основном сказать мне, когда разные зоны открыты / частично открыты / закрыты для разных скважин в разные даты. Но это меняется только периодически, поэтому между изменениями статуса есть несколько нулевых значений, которые я хочу перенести в значение предыдущего статуса. В идеале я бы хотел, чтобы это было в том же расчете, что и в случае, но вы, очевидно, не можете использовать циклические аргументы там, поэтому я в порядке с созданием нового столбца для этого, но у меня все еще есть проблемы с заполнением пробелов,

Ниже приведена упрощенная версия моего набора данных: текущие выходы в столбцах «1-й» и «2а» возвращают 0, когда нет ничего внутри скважины, 0,5, если он частично портирован, и 1, если онгасятся. Прямо сейчас я просто в заявлении case возвращаю ноль, если в этом месяце нет изменений для этой скважины.

Well  Date    Zone In  Size In  Zone Out  Size Out    1st   2a
101  1/2019                     2a        blank             0
101  2/2019
101  3/2019    2a       blank                               1
101  4/2019    1st      port                          0.5   
101  5/2019                                           
101  6/2019                                           
101  7/2019                      1st      port        0     

Ниже приведен статус, который я хотел бы получить для столбцов «1-й» и «2а»,

Well  Date    Zone In  Size In  Zone Out  Size Out    1st   2a
101  1/2019                     2a        blank       0     0
101  2/2019                                           0     0
101  3/2019    2a       blank                         0     1
101  4/2019    1st      port                          0.5   1
101  5/2019                                           0.5   1
101  6/2019                                           0.5   1
101  7/2019                      1st      port        0     1

Или

Well  Date    Zone In  Size In  Zone Out  Size Out    1st   2a  1st filled  2a filled
101  1/2019                     2a        blank             0   0           0
101  2/2019                                                     0           0
101  3/2019    2a       blank                               1   0           1
101  4/2019    1st      port                          0.5       0.5         1
101  5/2019                                                     0.5         1
101  6/2019                                                     0.5         1
101  7/2019                      1st      port        0         0           1

Как я уже говорил ранее, я использую оператор case для этих столбцов, поскольку вводимые мной данные о зоне / размере немного сложнее. чем то, что я здесь показываю, поэтому наличие вторичных столбцов «1 заполнено» и «2a заполнено» приемлемо при необходимости.

..

Если кто-то хочет / нуждается в этом, примермое текущее утверждение case в простейшей зоне приведено ниже:

case    
when ([Zone In]="1st") and ([Port_Size In]=0) then 1   
when ([Zone In]="1st") and ([Port_Size In]!=0) then 0.5   
when [Zone Out]="1st" then 0  
else NULL  
end 

(во входных данных значение 0 означает, что оно пустое, все остальное - размер порта, поэтому код не совсем соответствует упрощенным даннымпример.)

Любая помощь, которую кто-либо может оказать мне, будет очень признательна !!! Пожалуйста, дайте мне знать, если вам нужна другая информация.

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Кажется, я понял! Я использовал это для колонки «1-й заполненный».

SN(last([1st]) OVER (Intersect([Well],AllPrevious([Date]))),0)

Большое спасибо за вдохновение, Гайя!

0 голосов
/ 28 октября 2019

Попробуйте это для 1-го заполненного, и тот же шаблон для 2a-заполненного:

SN (LastValidBefore ([1st]), 0)

LastValidBefore принимает последнее действительное значение перед текущим,SN ставит ноль там, где нет такого действительного значения (в начале).

Gaia

...