SSRS 条件格式(使用 AND 和 OR)

SSRS conditional formatting (Using AND and OR)

我有一个关于我目前正在尝试实施的复杂条件格式的问题。代码是:

=iif(Fields!ACT.Value = "N/V", "No Color",
iif(Fields!ACT.Value = "N/K", "No Color",
iif(Fields!ACT.Value = "N/A", "No Color",
iif(Fields!NUM.Value < Fields!SHORT.Value , "Yellow", 
iif(Fields!NUM.Value > Fields!INC.Value, "Orange", 
iif((isnothing(Fields!ACT.Value <> "N/A" and Fields!NUM.Value) or isnothing(Fields!ACT.Value <> "N/K" and Fields!NUM.value) or isnothing(Fields!ACT.Value <> "N/V" and Fields!NUM.Value)), "Purple", "No Color"))))))

在它引用 isnothing 的最后一个 IIF 之前一切正常。我尝试了很多不同的方法来解决它,发生的事情是它要么不将紫色应用于任何空白单元格,要么将紫色应用于所有空白单元格,即使它们是 N/A、N/K 或 N/V。 谁能阐明为什么会发生这种情况?我试过只处理那一行代码并忽略其余代码但没有成功。

谢谢

戴夫

第一个问题是:

isnothing(Fields!ACT.Value <> "N/A" and Fields!NUM.Value) or isnothing(Fields!ACT.Value <> "N/K" and Fields!NUM.value) or isnothing(Fields!ACT.Value <> "N/V" and Fields!NUM.Value)

总是return True 因为内部布尔表达式总是不为空。

其次:您可以使用 switch 而不是 iif 的组合。

所以,我认为,你应该试试这个表达式:

=Switch
(
    Fields!ACT.Value = "N/V", "No Color",
    Fields!ACT.Value = "N/K", "No Color",
    Fields!ACT.Value = "N/A", "No Color",
    Fields!NUM.Value < Fields!SHORT.Value, "Yellow", 
    Fields!NUM.Value > Fields!INC.Value, "Orange", 
    IsNothing(Fields!NUM.Value), "Purple",
    True, "No Color"
)

编辑:

我根据您最后的评论更改了表达式代码。

别忘了,switch 中的条件顺序很重要The Switch function returns the value associated with the first expression in a series that evaluates to true (c)MSDN (https://msdn.microsoft.com/en-us/library/ms157328(v=sql.105).aspx)

所以你应该 IsNothing 表达式在最后一个顺序,仅在默认值之前。

你最后一个带有 IsNothing 函数的 Iif 语句没有写在正确的上下文中,因为 IsNothing 函数中的条件总是 return true.

此外,使用 NOT IN 子句重写 OR 条件以缩小代码并提高可读性。

=Switch
(
    Fields!ACT.Value IN ("N/V", "N/K", "N/A"), "No Color",
    Fields!NUM.Value < Fields!SHORT.Value, "Yellow", 
    Fields!NUM.Value > Fields!INC.Value, "Orange", 
    IsNothing(Fields!NUM.Value) and (Fields!ACT.Value NOT IN ("N/A", "N/K", "N/V"), "Purple",
    True, "No Color"
)

想想你的表达方式,避免互相重叠。