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"
)
想想你的表达方式,避免互相重叠。
我有一个关于我目前正在尝试实施的复杂条件格式的问题。代码是:
=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"
)
想想你的表达方式,避免互相重叠。