【问题标题】:SSRS Color GradientSSRS 颜色渐变
【发布时间】:2020-07-01 15:07:36
【问题描述】:

我已经能够弄清楚如何使某些值成为我想要的某些颜色。不过,我真的很希望能够创建一个颜色渐变,以便在每个值之间实现更多的渐变。

0 = 白色

在 1 到 15 之间从白色到绿色,

在 16 到 25 之间从绿色渐变到黄色,

26 到 35 之间从黄色到红色的渐变,

35 以上的都是红色的。

这是我在背景填充表达式中的代码:

=SWITCH(
(Sum(Fields!Total_Transaction_Count.Value) / CountDistinct(Fields!TransUserNumber.Value)) = 0, "White",
((Sum(Fields!Total_Transaction_Count.Value) / CountDistinct(Fields!TransUserNumber.Value)) >= 1 and 
(Sum(Fields!Total_Transaction_Count.Value) / CountDistinct(Fields!TransUserNumber.Value)) <= 15), "Green", 
((Sum(Fields!Total_Transaction_Count.Value) / CountDistinct(Fields!TransUserNumber.Value)) >= 16 and 
(Sum(Fields!Total_Transaction_Count.Value) / CountDistinct(Fields!TransUserNumber.Value)) <= 25), "Yellow", 
((Sum(Fields!Total_Transaction_Count.Value) / CountDistinct(Fields!TransUserNumber.Value)) >= 26 and 
(Sum(Fields!Total_Transaction_Count.Value) / CountDistinct(Fields!TransUserNumber.Value))) <= 35, "Orange", 
(Sum(Fields!Total_Transaction_Count.Value) / CountDistinct(Fields!TransUserNumber.Value)) > 35, "Red")

This is the matrix I have so far

【问题讨论】:

    标签: sql reporting-services ssrs-2008


    【解决方案1】:

    看看我不久前写的这个答案。是图表,但原理应该是一样的。

    基本思想是在 SQL 中计算颜色,然后在 SSRS 中设置颜色属性

    Applying Custom Gradient to Chart Based on Count of Value


    全部保存在 SSRS 中


    如果您想将其保留在报告中,您可以编写一个函数来进行计算。

    对于一个非常简单的红色渐变,它可能看起来像这样......

    Public Function CalcRGB (minVal as double, maxVal as double, actualVal as double) as String
    
    Dim RedValue as integer
    Dim GreenValue as integer
    Dim BlueValue as integer
    
    RedValue = ((actualVal - minVal) / (maxVal - minVal)) * 256
    GreenValue = 0
    BlueValue = 0
    
    dim result as string
    
    result = "#" & RedValue.ToString("X2") & greenValue.ToString("X2") & BlueValue.ToString("X2")
    
    Return result
    
    End Function
    

    在此函数中,我将绿色和蓝色设置为 0,但也可以根据要求计算。

    要将此函数用作背景颜色,请将 Background Color 属性设置为类似

    =Code.CalcRGB(
                  MIN(Fields!myColumn.Value),
                  MAX(Fields!myColumn.Value),
                  Fields!myColumn.Value
                  )
    

    【讨论】:

    • 在不改变 SQL 代码的情况下还有其他方法吗?
    • 我已经按照你写的方法在报表代码中输入了函数,并将我的背景颜色设置为=Code.CalcRGB( MIN(Sum(Fields!Total_Transaction_Count.Value) / CountDistinct(Fields!TransUserNumber.Value)), MAX(Sum(Fields!Total_Transaction_Count.Value) / CountDistinct(Fields!TransUserNumber.Value)), Sum(Fields!Total_Transaction_Count.Value) / CountDistinct(Fields!TransUserNumber.Value) ),颜色没有任何变化……我做错了吗?跨度>
    • 您尝试做的事情是正确的,但很明显,如果您作为参数传递给函数的表达式的结果是错误的,则需要修复。我建议您添加 3 个额外的列,并将每个列设置为与您在 CalcRGB 调用中使用的表达式相同。例如第一列表达式是 MIN(Sum(Fields!Total_Transaction_Count.Value) / CountDistinct(Fields!TransUserNumber.Value)) 。确保你得到你期望的数字并从那里开始。我确实对此进行了测试,它按预期工作。
    • 谢谢。我很感激帮助。我让它工作了,但我不知道如何处理从白色、绿色、黄色、橙色到红色的颜色。我有它从浅绿色到深绿色的地方。
    • 这只是计算出每个红色绿色和蓝色分量所需的值并在函数中计算它们的情况,目前只有红色在变化。获得一个可以正确计算的表达式可能会很痛苦,但是通过一些试验和错误以及应用一些逻辑,你会到达那里。如果您遇到另一个问题,特别是关于这个问题的确切要求,我相信 SO 上的某个人将能够提供帮助。祝你好运
    猜你喜欢
    • 2023-01-13
    • 1970-01-01
    • 2011-04-26
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-21
    相关资源
    最近更新 更多