我有一个关于我目前正在尝试实施的复杂条件格式的问题。代码是:
default_scope -> { includes(:organizations).order('organizations.name , username') }
这一切都很好,直到它引用的最后一个IIF没有。我已经尝试了许多不同的东西来解决它,并且发生的事情是它不会将紫色应用于任何空白的细胞,或者它将紫色应用于所有空白细胞,即使它们是N / A, N / K或N / V. 谁能解释为什么会发生这种情况?我试过处理那一行代码然后忽略其余的但没有成功。
由于
戴夫
答案 0 :(得分:1)
第一个问题是:
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)
始终返回True
,因为内部布尔表达式始终不为null。
第二:您可以使用iif
而不是switch
的组合。
所以,我想,你应该尝试这个表达式:
=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
表达最后的顺序,只能在默认值之前。
答案 1 :(得分:1)
带有IsNothing
函数的上一个IsNothing
语句未写入正确的上下文中,因为true
函数中的条件始终返回=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"
)
。
此外,使用NOT IN子句重写OR条件以缩小代码并使其更具可读性。
$pipeline = [
['$match' =>
$criteria->getCondition()],
['$group' =>
['_id' => '$order_id', 'total' => ['$sum' => '$'.$column]]]
];
$this->getDbConnection()->aggregate('ticket_cache', $pipeline);
想想你的表达,以避免彼此重叠。