2013-04-04 47 views
1

我有一个sql报告服务报告,显示来自我们所有商店的销售额等,它包括一个显示%到预算值的列。我想要做的是,如果值为>= .35,则将其作为单元格Green的背景,如果值为< .35 and > .30,则为Yellow,如果值为< .30 then RedSRSS使用值范围的条件格式化颜色?

它真的在我的脑海中,我似乎无法让它与所有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”部分语法错误。

非常感谢 兰斯

回答

6

你缺少一个逗号。但是,嵌套的Iifs是一种痛苦,所以要执行简单的函数路由,我会使用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 Expression Examples

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

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语句,这将更容易管理,并且您可以在不同的字段中重用此函数,如果发生某些变化,可以更轻松地一次更新所有这些数据。

+0

非常好,感谢堆的建议! – user1852208 2013-04-04 02:52:17

+0

在您的BudgetSeverity表中拥有SeverityColor而不是SeverityLevel会更好吗?然后,您可以将SeverityColour字段用作颜色表达式。这样做的好处是,如果您想要添加另一个级别,例如0.45以上的蓝色级别,则可以将其添加到表格中,而不必编辑任何报告以更改= Choose()语句。所有SeverityLevel正在执行的是提供报告中颜色的计算,这似乎是不必要的步骤。 – 2013-04-04 03:23:02

+0

@Chris我想过那件事,而且它是完全可行的。我刚刚决定SeverityLevel是数据,SeverityColor是演示文稿。你的选择。 – ErikE 2013-04-04 05:52:06

0

有在最后iff clause没有,condition和颜色Red

=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"))) 
    )