Spotfire:用计算列中的先前值填充空值
Spotfire: Fill nulls with previous value in calculated column
我做了一个案例陈述,基本上告诉我不同区域在不同日期的不同井的时间是 open/partially open/closed。但这只会定期更改,因此我想与以前的状态值一起进行的状态更改之间有几个空值。理想情况下,我希望在与 case 语句相同的计算中进行计算,但您显然不能在那里使用循环参数,所以我可以创建一个新列来执行此操作,但我仍然无法填补空白.
下面是我的数据集的简化版本,当前输出在“1st”和“2a”列中return当井下没有任何东西时为 0,如果部分移植则为 0.5,并且如果它被消隐,则为 1。现在,如果那个月那个井没有变化,我只是在 return 的 case 语句中有一个 null。
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
下面是我希望“1st”和“2a”列的状态。
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 语句,因为我得到的输入 zone/size 数据比我在这里显示的要复杂一些,所以有一个辅助 '如有必要,可以接受“第 1 次填充”和“2a 次填充”列。
..
如果有人 wants/needs 它,我当前在最简单区域中的案例陈述示例如下:
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 表示它被消隐,其他都是端口大小,因此代码与简化数据示例不完全匹配。)
任何人都可以给我的任何帮助将不胜感激!!!如果您需要任何其他信息,请告诉我。
第 1 次填充尝试使用此方法,第 2 次填充采用相同的模式:
SN(LastValidBefore([1st]),0)
LastValidBefore 取当前值之前的最后一个有效值。
SN 在没有这样的有效值的地方(在开头)放一个零。
盖亚
我想我明白了!我将其用于“第一个填充”列。
SN(last([1st]) OVER (Intersect([Well],AllPrevious([Date]))),0)
非常感谢盖亚的启发!
我做了一个案例陈述,基本上告诉我不同区域在不同日期的不同井的时间是 open/partially open/closed。但这只会定期更改,因此我想与以前的状态值一起进行的状态更改之间有几个空值。理想情况下,我希望在与 case 语句相同的计算中进行计算,但您显然不能在那里使用循环参数,所以我可以创建一个新列来执行此操作,但我仍然无法填补空白.
下面是我的数据集的简化版本,当前输出在“1st”和“2a”列中return当井下没有任何东西时为 0,如果部分移植则为 0.5,并且如果它被消隐,则为 1。现在,如果那个月那个井没有变化,我只是在 return 的 case 语句中有一个 null。
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
下面是我希望“1st”和“2a”列的状态。
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 语句,因为我得到的输入 zone/size 数据比我在这里显示的要复杂一些,所以有一个辅助 '如有必要,可以接受“第 1 次填充”和“2a 次填充”列。
..
如果有人 wants/needs 它,我当前在最简单区域中的案例陈述示例如下:
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 表示它被消隐,其他都是端口大小,因此代码与简化数据示例不完全匹配。)
任何人都可以给我的任何帮助将不胜感激!!!如果您需要任何其他信息,请告诉我。
第 1 次填充尝试使用此方法,第 2 次填充采用相同的模式:
SN(LastValidBefore([1st]),0)
LastValidBefore 取当前值之前的最后一个有效值。 SN 在没有这样的有效值的地方(在开头)放一个零。
盖亚
我想我明白了!我将其用于“第一个填充”列。
SN(last([1st]) OVER (Intersect([Well],AllPrevious([Date]))),0)
非常感谢盖亚的启发!