Я делал это в прошлом, не зная, как выглядят ваши данные или какой тип диаграммы вы используете, я не могу дать полный ответ. Следующее, однако, должно дать вам хорошее начало и некоторую идею о том, как подойти к проблеме.
Процесс идет следующим образом.
- Получите сводные данные для вашей диаграммы (агрегировано готово)
- Найти наибольшее значение по всем
hours
диапазонам отображаемых данных - Рассчитать значения RGB для нужного цвета
- Преобразовать эти значения RGB в Итак, мы можем использовать их непосредственно на диаграмме
Почти весь процесс выполняется в SQL, диаграмма просто использует поле HexColour, которое мы сгенерировали на шаге 4 выше, в качестве цвета серии.
Прежде чем мы начнем, нам понадобится функция для преобразования 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
Вот полный код с несколькими комментариями для объяснения
-- 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
Окончательный результат выглядит следующим образом. note Здесь используется желтый диапазон, просто отрегулируйте три вычисления столбца RGB, чтобы получить диапазон, который соответствует вашим потребностям. Поэкспериментируйте также с различными значениями диапазона (например, 30 в вычислении зеленой колонки), чтобы увеличить или уменьшить диапазон цветов.
Надеюсь, это даст вам достаточно, чтобы прогрессировать.