【问题标题】:Applying Custom Gradient to Chart Based on Count of Value根据值计数将自定义渐变应用于图表
【发布时间】:2020-01-17 23:32:07
【问题描述】:

我计算一天中的几个小时 (1-24),每个小时我都在计算发出的请求数。我有一个 SSRS 报告,我想根据该值的计数为图表着色。这应该是动态的,因此最高计数将比其他计数更暗,并且它将渐变降低到最低值,这将是最亮的颜色。

因为计数是可变的,可以改变,并且有可能产生任何数字,所以我不能简单地说“如果计数 > 1 则 '#ffffff',如果计数 > 2 则 '#fffffb',等等。”

标准 SSRS 调色板似乎随机化了图表中应用的颜色,因此不在表中。

希望其他人遇到过这种情况,并且可以指导我完成我需要做的事情。

提前谢谢你

【问题讨论】:

    标签: reporting-services ssrs-2012 reportbuilder3.0


    【解决方案1】:

    我过去曾这样做过,但不知道您的数据是什么样子或您使用的是什么类型的图表,我无法给出完整的答案。但是,以下内容应该可以为您提供一个良好的开端以及如何解决该问题的一些想法。

    流程如下。

    1. 为您的图表获取汇总数据(汇总后即可显示)
    2. 在所有hours要显示的数据范围内查找最高计数
    3. 计算所需颜色的 RGB 值
    4. 将这些 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),以使颜色范围更大或更小。

    希望这能给你足够的进步。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      相关资源
      最近更新 更多