Spotfire:基于其他列的计算列的公式

时间:2017-06-16 09:50:34

标签: spotfire

我需要创建一个计算列,根据其他两列的值计算前一行值的差异。

例如。考虑4列,如下所示。 Col B和Col C有日期值,Col A作为一些唯一值,Col D将有一些数值用于计算所需的列,这样当Col B = Col C和Col D的相应值必须是取下并减去Col D值,直到下一次Col B = Col C出现。

表的图像(PS:我无法以可复制的方式复制整个表格,因为格式会变得混乱)

enter image description here

我需要输出如下:即当日期值相等时,[COL B] = [COL C](即20-12-2016 15:40),那么我必须考虑COL D的对应值并减去138,直到下一个类似的事件发生。下一个出现的值是12-01-2017 15:40,然后它应该减去161,这继续和它的动态。

请注意:对于[COL B] = [COL C]之前的值,那些相应的值应与COL D相同,或者如果COL C的值为NULL或BLank,那么它也应该像COL D一样突出显示在绿色。

输出要求(如黄色) enter image description here

我在spotfire中使用了以下代码

if([COL B] is Not NULL,If([COL B]=[COL C],First[COL D] - [COL D]),[COL D])

,但由于要减去的值是动态的,我无法实现它。 任何帮助表示赞赏

@ Ksp585:请在下面找到错误计算的屏幕截图:绿色链接后的下一个值应为751(2638-3389),而不是根据之前的计算(3389-22 = 3367)计算为3367错误:

enter image description here

1 个答案:

答案 0 :(得分:2)

@Nischey Anand-请尝试以下解决方案。

第1步:添加'row_id'列

RowId()

第2步:使用以下自定义表达式

插入计算列
If([Column C] is not null,Sum([Column D]) over ([row_id]) - first([Column D]) over ([Column C]),[Column D])

以下是最终输出:

enter image description here

希望这有帮助!

根据提供的其他详细信息更新答案:

使用以下自定义表达式添加计算列。

If(Sum(If([Column B]=[Column C],[Column D])) over ([Column C]) is not null,[Column D] - Sum(If([Column B]=[Column C],[Column D])) over ([Column C]),[Column D])

以下是更新的最终输出表:

enter image description here

希望这能解决你的问题!