2013-04-04 96 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"))) 
    )