SRSS带值范围的条件格式颜色?

use*_*208 1 sql reporting-services

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

这真的是我的头脑,我似乎无法让它与所有3个范围一起工作.

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

=IIF(Fields!ID__to_Budget.Value >= 0.35, "Green", "Red")
Run Code Online (Sandbox Code Playgroud)

这有效,但当然我没有任何黄色范围,在.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") ) ) )
Run Code Online (Sandbox Code Playgroud)

但它抱怨"和> 0.30"部分的语法错误.

非常感谢Lance

Eri*_*ikE 8

你错过了一个逗号.但是,嵌套的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"
)
Run Code Online (Sandbox Code Playgroud)

有关此功能的更多信息,请参阅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)
;
Run Code Online (Sandbox Code Playgroud)

然后在您的数据集中,加入此表.

SELECT
   ...,
   BS.SeverityLevel
FROM
   ...
   INNER JOIN dbo.BudgetSeverity BS
      ON B.ID__to_Budget >= BS.FromValue
      AND B.ID__to_Budget < BS.ToValue
Run Code Online (Sandbox Code Playgroud)

最后,在您的报告中:

=Choose(Fields!SeverityLevel.Value, "Red", "Yellow", "Green")
Run Code Online (Sandbox Code Playgroud)

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