1

我有一个 sql 报告服务报告,显示我们所有商店的销售额等,它包括一个显示预算值百分比的列。我想要做的是如果值是>= .35然后使它成为单元格的背景Green,如果值是< .35 and > .30那么Yellow如果值是< .30 then Red

这真的让我很头疼,我似乎无法让它与所有 3 个范围一起工作。

我可以在单元格的背景颜色属性中放入表达式:

=IIF(Fields!ID__to_Budget.Value >= 0.35, "Green", "Red")

这行得通,但当然我没有任何黄色范围,任何低于 0.35 的东西都会变成红色。

我一直在尝试对背景颜色做一个嵌套表达式,如下所示:

=iif( (Fields!ID__to_Budget.Value >= 0.35), "Green",
      ( iif(Fields!ID__to_Budget.Value <0.35 and > 0.30, "Yellow",
         iif(Fields!ID__to_Budget.Value < 0.30 "Red", "White") ) ) )

但它抱怨“和> 0.30”部分的语法错误。

非常感谢兰斯

4

2 回答 2

9

你少了一个逗号。但是,嵌套 Iif 很痛苦,所以要执行简单的函数路由,我会使用Switch函数来代替,所以你不必嵌套任何东西——这样更容易获得正确的语法。

=Switch(
   Fields!ID__to_Budget.Value < 0.30, "Red",
   Fields!ID__to_Budget.Value < 0.35, "Yellow",
   Fields!ID__to_Budget.Value >= 0.35, "Green"
)

有关此函数的更多信息,请参阅Reporting Services 表达式示例

但在我看来,编码值的“严重性”在数据库中做得更好:

CREATE TABLE dbo.BudgetSeverity (
   FromValue decimal(20, 10) NOT NULL PRIMARY KEY CLUSTERED,
   ToValue decimal(20,10) NOT NULL,
   SeverityLevel tinyint NOT NULL
);
INSERT dbo.BudgetSeverity
VALUES
   (-9999999999, 0.3, 1),
   (0, 0.35, 2),
   (0.35, 9999999999, 3)
;

然后在你的数据集中,加入这个表。

SELECT
   ...,
   BS.SeverityLevel
FROM
   ...
   INNER JOIN dbo.BudgetSeverity BS
      ON B.ID__to_Budget >= BS.FromValue
      AND B.ID__to_Budget < BS.ToValue

最后,在您的报告中:

=Choose(Fields!SeverityLevel.Value, "Red", "Yellow", "Green")

这样您就可以更改严重性级别,而无需部署新报告。如果您不喜欢将其放入数据库的想法,您还有其他选择。在报告的代码部分,您可以编写一个简单的函数来根据传入的值返回颜色。然后您可以使用更容易管理的 Case 语句,并且您可以在不同的字段中重用此函数,如果发生变化,可以更轻松地一次更新所有这些。

于 2013-04-04T01:35:45.160 回答
0

和颜色在,最后没有iff clauseconditionRed

=iif(Fields!ID__to_Budget.Value >= 0.35, "Green",
     iif(Fields!ID__to_Budget.Value <0.35 &
          Fields!ID__to_Budget.Value> 0.30,"Yellow", 
         iif(Fields!ID__to_Budget.Value < 0.30, "Red","White") ) )
    )
于 2013-04-04T01:25:27.457 回答