使用表达式更改框颜色

时间:2019-04-19 17:41:42

标签: sql reporting-services

我有2列包含数据。如果超过25%,第1列我想变成绿色,如果超过10,第2列我想变成绿色。如果第2列是绿色,我不希望它改变第1列的颜色,反之亦然。

这是第1列

=IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value > 0.2199 , "SpringGreen" , IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value < 0.2199 , "White" , 0))

下面是我目前在第2列中的内容。

=IIF(Fields!New_Strategic_Devices_Qty.Value>=ReportItems!newstratgoal.Value,"LimeGreen", iif(ReportItems!pull_through_percent.Value >0.2199,"White","DimGray"))

2 个答案:

答案 0 :(得分:0)

我不确定在同时满足两个条件时您期望如何处理颜色-Column1> 25%和Column2>10。我会 ass u 在这种情况下,第1列优先。

对于第一列的 BackgroundColor 属性,您将拥有

=IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value > 0.25, 
    "SpringGreen", 
    "White")

对于第二列,您确实需要第一列颜色的额外IIF来检查第一列颜色

=IIF(Fields!New_Strategic_Devices_Qty.Value >= ReportItems!newstratgoal.Value, 
    IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value > 0.25, 
        "LimeGreen",
        "White"))

顺便说一句,对于您给出的表达式,您不需要第二个IIF,除非值为EXACLTY 21.99%,否则它将被第一个IIF的ELSE覆盖。颜色0仍然可能会产生错误。

=IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value > 0.2199 , 
    "SpringGreen" , 
    IIF(Fields!New_Strategic_Devices_Qty.Value / Fields!New_and_Upgrade_Postpaid_phones.Value < 0.2199 , "White" , 0))

我更喜欢薄荷奶油以绿色突出显示。

答案 1 :(得分:0)

在我看来,您需要两次编写相同的公式,这在可读性和维护方面都是不好的做法。我有一个解决方案供您优化正在处理的设计。

您将要在“组属性”上使用“变量”并在此处设置表达式。完成后,您可以使用以下语法在报表主体中引用这些变量作为表达式:=Variables!myVariableName.Value。定义了组变量后,实现要定义的逻辑应该会更简单。您可以在[Field Expression][Color Expression]中引用组变量。

我还建议使用SWITCH而不是IIF,switch更易读,并且更容易在表达式中定义更多规则。以下是一些使用switch的示例。请不要担心最后一个表达式中的ELSE条件需要'true'才能评估隐式条件。

我希望这对您的解决方案有所帮助。

两篇参考文章

组变量,表达式演示

[fxSal_PositiveResult]:
=SWITCH(
    (
        Fields!SAL27.Value= 0
        OR  (Fields!SAL27.Value= 1 AND Fields!SAL28.Value= -1)
        OR  (Fields!SAL27.Value= -2 AND Fields!SAL28.Value<> 1)
    ), Fields!SAL27.Value
    ,true, Fields!SAL28.Value
)

[fxCampy_PositiveResult]:
=SWITCH(
    (
        Not(IsNothing(Fields!CAM11.Value))
    ), Fields!CAM11.Value
    ,true, Fields!CAM12.Value
)

演示,屏幕截图

enter image description here