[英]SQL SSRS Color Code / Create a heatmap out of a tablix in SSRS (color in tablix rows based on value)
所以我創建了一個看起來像這樣的簡單tablix
有什么方法可以向此Tablix添加表達式,以便基於基值對行進行顏色編碼。
因此,我設想的方式是,基本值是列“平均值”,我將設置該列的背景色為灰色。
然后,我希望每個正在運行的AOV根據與該基本值的差異進行顏色編碼。 因此,例如,在該Tablix行5中,基值為$ 88。
那么RunningAOV1st是$ 77,所以它將是紅色。 RunningAOVTwo是$ 84,所以它會是非常淺的紅色。 接下來,RunningAOVThree的價格為87美元,因此它的紅色版本更輕。 如果價格是90美元,那將是非常淺的綠色陰影。
這可能嗎? 我只是假設需要為單元格的背景色添加一些表達式,但是我不確定該表達式是什么。
這個答案與您的答案略有不同。 我有一個類似的情況,選擇在SQL中進行顏色計算。 我認為這樣做比較容易,盡管我認為您可以很輕松地將其轉換為報表中的自定義代碼功能。
這是報告中的數據集示例,該報告根據某些數據的使用期限對單元格進行了着色。 這個年齡已經被人們預知了,所以這里引用的AGe欄只是一個數字。 如果年齡超過90天,它將始終顯示為純紅色。
數據集查詢的一部分
SELECT
lp.*
, 255 as Red-- Red: always 255
, 255 - (Age/3) AS Green -- Green: gives range from 255 - 225 for 0 to 90 days. Anything over 90 will be set to 255 in next statement
, 254 - (Age * (254/90)) AS Blue -- Blue: Give range of 254 - 0 for 0 to 90 days
, cast(NULL as varchar (7)) AS HexColour
INTO #t
FROM #d lp
JOIN Dim.Geography g ON lp.CountryID = g.CountryID
UPDATE #t SET HexColour = [fn].[ConvertRGBValuesToHexColour] (Red, CASE WHEN Green <225 THEN 225 ELSE Green END , Blue)
SELECT * FROM #t
上面根據age列計算出的紅色,綠色和藍色值,我們還添加了一個列來存儲最終的十六進制值,並根據函數(如下)對其進行更新。 這個想法是可以在報表設計中直接將HexColor
列作為color屬性引用。
以下是將RGB值轉換為十六進制值以供報告使用的函數。
CREATE FUNCTION [fn].[ConvertRGBValuesToHexColour] (@R int, @G int, @B int)
RETURNS varchar(7)
AS
BEGIN
RETURN '#' + RIGHT(CONVERT(VARCHAR(11), CONVERT(BINARY(1),@R,0) + CONVERT(BINARY(1),@G,0) +CONVERT(BINARY(1),@B,0) , 1),6)
END
我建議有一個表格來定義基於最小值和最大值的顏色編碼。 創建了一個臨時表來顯示它是如何完成的,我沒有獲得所有的組合,但是使用了一個樣本數據集
使用SQL
select * INTO #Data
from (
Select 1 AS Counts,75 AS Value,'Total Orders' AS Category UNION ALL
Select 1 AS Counts,250 AS Value,'Avg Orders' AS Category UNION ALL
Select 1 AS Counts,10 AS Value,'Avg Value' AS Category UNION ALL
Select 1 AS Counts,13 AS Value,'Running 1st' AS Category UNION ALL
Select 1 AS Counts,'' AS Value,'Running 2nd' AS Category UNION ALL
Select 1 AS Counts,'' AS Value,'Running 3rd' AS Category UNION ALL
Select 2 AS Counts,23 AS Value,'Total Orders' AS Category UNION ALL
Select 2 AS Counts,46 AS Value,'Avg Orders' AS Category UNION ALL
Select 2 AS Counts,30 AS Value,'Avg Value' AS Category UNION ALL
Select 2 AS Counts,34 AS Value,'Running 1st' AS Category UNION ALL
Select 2 AS Counts,'' AS Value,'Running 2nd' AS Category UNION ALL
Select 2 AS Counts,'' AS Value,'Running 3rd' AS Category UNION ALL
Select 3 AS Counts,'' AS Value,'Total Orders' AS Category UNION ALL
Select 3 AS Counts,23 AS Value,'Avg Orders' AS Category UNION ALL
Select 3 AS Counts,55 AS Value,'Avg Value' AS Category UNION ALL
Select 3 AS Counts,67 AS Value,'Running 1st' AS Category UNION ALL
Select 3 AS Counts,77 AS Value,'Running 2nd' AS Category UNION ALL
Select 3 AS Counts,'' AS Value,'Running 3rd' AS Category ) a
select * INTO #Colors
from (
select 'Green' color, 1 min_value , 50 max_value UNION ALL
select 'Yellow' color, 51 min_value , 100 max_value UNION ALL
select 'Red' color, 101 min_value , 1000 max_value
) b
select a.Category, a.Counts, a.Value, b.color
from #Data a
left join #Colors b
on a.Value between b.min_value and b.max_value
drop table #Colors
drop table #Data
這將為輸出提供您想要的顏色
輸入數據集為
輸出看起來像這樣
如果您有物理表,則可以靈活地使用表更改顏色。
設計窗口
在顏色值上添加了背景表達式
因此,根據可用於執行此操作的實際表達式,我在此處看不到任何答案。 我先要說,這將有些復雜,可能需要對端進行一些調整才能使值正確。 您將希望使用SWITCH
使其盡可能簡單,並只需為每種顏色指定所需的范圍。 假設所有AOVRunning
值均從數據庫的同一列中填充,則以下表達式應在背景色屬性中起作用。
=SWITCH(Fields!AOV.Value > (Fields!Avg.Value + 10), "Green",
Fields!AOV.Value >= (Fields!Avg.Value + 5) AND Fields!AOV.Value <= (Fields!Avg.Value + 10), "LightGreen",
Fields!AOV.Value = Fields!Avg.Value, "Yellow",
Fields!AOV.Value <= (Fields!Avg.Value - 5) AND Fields!AOV.Value >= (Fields!Avg.Value -10), "LightRed",
Fields!AOV.Value < (Fields!Avg.Value - 10), "Red",
true, "White")
這只是將每個AOV值與平均值以及與該平均值關聯的范圍進行比較。 顯然,您可以根據選擇的跨度向其中添加盡可能多的顏色-這只是一個示例。 最終的true, "White"
僅捕獲不滿足任何其他條件比較的所有剩菜。 您也可以在SWITCH
外部添加一個IIF
以消除這些結果,然后再進入SWITCH
...
=IIF(Fields!AOV.Value Is Nothing, "White", SWITCH(....))`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.