我过去曾这样做过,但不知道您的数据是什么样子或您使用的是什么类型的图表,我无法给出完整的答案。但是,以下内容应该可以为您提供一个良好的开端以及如何解决该问题的一些想法。
流程如下。
- 为您的图表获取汇总数据(汇总后即可显示)
- 在所有
hours要显示的数据范围内查找最高计数
- 计算所需颜色的 RGB 值
- 将这些 RGB 值转换为十六进制,以便我们可以直接在图表中使用它们
几乎整个过程都是在 SQL 中完成的,图表只是使用我们在上面第 4 步中生成的 HexColour 字段作为系列颜色。
在开始之前,我们需要一个函数来进行 RGB 到 HEX 的转换,这里是代码
CREATE FUNCTION [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
这里是完整的代码,用几个cmets来解释
-- Generate some test data
DECLARE @t TABLE (HourNumber int, myCount int)
INSERT INTO @t VALUES
(1, 3), (2,4), (3,10), (20,2), (21,15), (24,1)
-- some variables to help calculate the range of values we have
DECLARE @MaxCount float
DECLARE @Multiplier float
-- get the highest count in our data (15 in hour 20 in this case)
SELECT @MaxCount = MAX(myCount) FROM @t
SET @Multiplier = 100/@MaxCount
-- Get the base data plus a column continaing the percentage of the maximum (pc)
select * , myCount * @Multiplier as pc into #c from @t
-- Use the pc column to set the green and blue values (adjust as you want)
-- include a null column to store the HexColor
SELECT
HourNumber, myCount
, Red = 255 -- Red: always 255
, Green = 255 - ((30.00/100.00)*pc) -- Green: gives range from 255 - 225 for 0 to 100%. Anything over 100% will be set to 255 in next statement
, Blue = 254 - ((254.00/100.00)*pc) -- Blue: Give range of 254 - 0 for 0 to 100%
, CAST(NULL AS char(7)) as HexColour
, pc
into #r
FROM #c
-- update the HexColour column
UPDATE #r SET HexColour = dbo.ConvertRGBValuesToHexColour (Red, CASE WHEN Green <225 THEN 225 ELSE Green END , Blue)
-- select the final results
SELECT * FROM #r
最终输出将如下所示。 (我们不需要最终输出中的 RGB 值或 pc 列,但为了清楚起见,我留下了)
HourNumber myCount Red Green Blue HexColour pc
1 3 255 249 203.2 #FFF9CB 20
2 4 255 247 186.26 #FFF7BA 26.66
3 10 255 235 84.66 #FFEB54 66.66
20 2 255 251 220.13 #FFFBDC 13.33
21 15 255 225 0 #FFE100 100
24 1 255 253 237.06 #FFFDED 6.66
如果您遵循此示例,请在报表中添加柱形图,将值设置为 myCount 并为 HourNumber 添加类别组
注意(我还在下图中添加了一个表格用于测试目的)
现在右击图表中的一列 - 选择系列属性并将填充颜色设置为=Fields!HexColour.Value
最终输出如下所示。
注意 这里使用的是黄色范围,只需调整三个 RGB 列计算即可获得适合您需要的范围。也可以尝试不同的范围值(例如绿色列计算中的 30),以使颜色范围更大或更小。
希望这能给你足够的进步。