Spotfire在两个值之间计算的列

时间:2018-07-09 09:27:22

标签: calculated-columns spotfire

我有一个计算列,请参见下面的语法。

我想要实现的是这个。如果[Part of Group ?]中有一段文本,而[ISPG Grouped]列中有RUBU或CABU,则占[Final]列的10%。但是我也想说的是,如果[Part of Group ?]中没有文本,并且[ISPG Grouped]列中有RUBU,而[Final]列的值在10,000欧元至34,999之间,则得到[Final]列的4%

这是我到目前为止的语法

CASE  WHEN ([Part of Group ?]!="") AND ([ISPG Grouped]="RUBU") THEN [Final] / 100 * 10 
WHEN ([Part of Group ?]!="") AND ([ISPG Grouped]="CABU") THEN [Final] / 100 * 10
WHEN ([Part of Group ?] ="") AND ([ISPG Grouped]="RUBU") AND [Final] <> 10000 34999 THEN [Final] / 100 * 4
ELSE NULL END

34,999后发生错误,有关更多详细信息,请参见下面的图片1

基本上我不知道如何在两个值之间执行If In,然后执行功能:-)

图片1: enter image description here

2 个答案:

答案 0 :(得分:2)

“ ... [最终]列的值在10,000欧元和34,999之间...”

您能否将公式的这一部分更改为: ... AND [Final] > 10000 AND [Final] < 34999 THEN ...

如果希望包含在内,请将运算符更改为<=>=,或者分别将数字向下和向上增加1。

答案 1 :(得分:1)

Mark P的答案将解决语法错误,但是您的CASE逻辑上有缺陷。满足条件后,CASE表达式将退出。它不会检查其余条件,因此这里的条件 order 很重要。

第一行:WHEN ([Part of Group ?]!="") AND ([ISPG Grouped]="RUBU") THEN将导致对最后一行从不进行评估,因为它包含相同的最小条件,并且将退出。要解决此问题,请交换它们。

CASE  
    WHEN ([Part of Group ?]!="") AND ([ISPG Grouped]="CABU") THEN [Final] / 100 * 10
    WHEN ([Part of Group ?] ="") AND ([ISPG Grouped]="RUBU") AND [Final] > 10000 AND [Final] < 34999 THEN [Final] / 100 * 4
    WHEN ([Part of Group ?]!="") AND ([ISPG Grouped]="RUBU") THEN [Final] / 100 * 10 
ELSE NULL END

正如您在此处看到的那样,第二个条件比第三个条件更具限制性,因此某些情况在此处会失败,但对于第三个情况则为true。

如果将when 1=1 then 1放在CASE表达式的顶部,那么您将看到的唯一值是1。类似地,如果将其放在最后……则等于说ELSE 1,因为地球上1总是等于1:)