【问题标题】:Spotfire Between two values calculated columnSpotfire 两个值之间的计算列
【发布时间】:2018-12-16 22:34:59
【问题描述】:

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

我想要达到的就是这个。如果[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:

【问题讨论】:

    标签: calculated-columns spotfire


    【解决方案1】:

    "... [Final] 列的值在 10,000 欧元和 34,999 之间..."

    您能否将公式的那部分更改为: ... AND [Final] &gt; 10000 AND [Final] &lt; 34999 THEN ...

    如果您希望它具有包容性,请将运算符更改为 &lt;=&gt;= 或将数字分别向下和向上增加 1。

    【讨论】:

    • 嗨,Mark P。非常感谢您的帮助。
    • 嗨,马克。抱歉,我输入了如下CASE WHEN ([Part of Group ?]="") AND ([ISPG Grouped]="RUBU") AND ([Final]&gt;=10000) AND ([Final]&lt;=34999) THEN [Final] / 100 * 4 ELSE NULL END 的语法,但我仍然没有得到我想要的响应。该公式现在有错误,但我创建的新列中没有值。看新照片
    • 您能否查看其他列,看看它们是否因某种原因导致案例以NULL 退出?有满足这个条件的记录吗?
    • 嗨,Mark P:是的,有一条记录满足此条件 C000096 在 RUBU 中有超过 15,000 个,并且不是组的一部分,因此它应该给我回复和答案,但仍然没有出现在新列。
    • @PhilipConnell 您能否验证“ISPG Grouped”或“Part of Group”中没有空格?该记录的列?
    【解决方案2】:

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

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

    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
    

    正如您在此处看到的,第二个条件比第三个条件更严格,因此某些情况在这里会失败,但对于第三种情况评估为真。

    如果你将when 1=1 then 1 放在CASE 表达式的顶部,那么你看到的唯一值就是1。同样,如果你把它放在最后......这相当于说ELSE 1因为 1 总是等于 1,在地球上 :)

    【讨论】:

    • 是的,没错。这就是我在上面的最后一条评论中想要表达的意思。谢谢你把它换成不同的形式。希望对 OP 有所帮助!
    • 您好 Simon 和 Mark:很抱歉回复晚了,感谢您的回复。我已经输入了 Simons 代码,但我仍然收到空白。我相信这是因为行数远低于 10,000 和 34999 的参数我认为 final 的 SUM 应该在某处的语法中,但我不确定在哪里,你能看看语法,我认为它需要的是当最终的总和在 10,000 和 34,999 之间时 /100 * 4
    • @PhilipConnell 你可能想要最终 OVER x 行的总和?
    • @Simon:OVER 和 SUM 路线似乎也不起作用。我什至简化了语法,但仍然没有结果。简化的语法是CASE WHEN ([Part of Group ?]="Not In Group") AND ([ISPG Grouped]="RUBU") AND ([New Sales Value]&gt;=22000) THEN [New Sales Value] / 100 * 5 ELSE NULL END 仍然没有结果。抱歉,我休年假的回复晚了。
    • 你使用了哪个求和函数@PhilipConnell
    猜你喜欢
    • 1970-01-01
    • 2017-12-18
    • 2020-06-30
    • 2016-12-10
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多