Применение пользовательского градиента к диаграмме на основе количества значений - PullRequest
0 голосов
/ 18 января 2020

Я беру часы в день (1-24) и за каждый час я подсчитываю количество сделанных запросов. У меня есть отчет SSRS, который я хотел бы раскрасить диаграмму на основе значения этого значения. Это должно быть Dynami c, так что наибольшее количество будет темнее, чем остальные, и это уменьшит градиент до самого низкого значения, которое будет самым светлым цветом.

Поскольку счетчик является переменным, может изменяться и может использоваться для любого числа, я не могу просто сказать «если счет> 1, то« #ffffff », если счет> 2, то« #fffffb », et c. "

Стандартные цветовые палитры SSRS, кажется, рандомизируют, какой цвет применяется к тому, где на диаграмме, так что это вне таблицы.

Надеясь, что кто-то еще сталкивался с этим и может рассказать мне, что мне нужно делать.

Заранее спасибо

1 Ответ

2 голосов
/ 20 января 2020

Я делал это в прошлом, не зная, как выглядят ваши данные или какой тип диаграммы вы используете, я не могу дать полный ответ. Следующее, однако, должно дать вам хорошее начало и некоторую идею о том, как подойти к проблеме.

Процесс идет следующим образом.

  1. Получите сводные данные для вашей диаграммы (агрегировано готово)
  2. Найти наибольшее значение по всем hours диапазонам отображаемых данных
  3. Рассчитать значения RGB для нужного цвета
  4. Преобразовать эти значения 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

Примечание (я также добавил таблицу на рисунке ниже для целей тестирования)

enter image description here

Теперь щелкните правой кнопкой мыши по одному из столбцов диаграммы - выберите свойства серии и установите цвет заливки на =Fields!HexColour.Value

enter image description here

Окончательный результат выглядит следующим образом. note Здесь используется желтый диапазон, просто отрегулируйте три вычисления столбца RGB, чтобы получить диапазон, который соответствует вашим потребностям. Поэкспериментируйте также с различными значениями диапазона (например, 30 в вычислении зеленой колонки), чтобы увеличить или уменьшить диапазон цветов.

enter image description here

Надеюсь, это даст вам достаточно, чтобы прогрессировать.

...