【问题标题】:Gradient fill based on column value基于列值的渐变填充
【发布时间】:2016-09-22 07:08:26
【问题描述】:

我想根据另一个字段的值从最大值到最小值设置列的背景颜色(渐变)。

参考下表:

如上表所示,SysName 列(而不是 Hours 列)的背景颜色应根据 Hours 列的值设置为从深绿色到浅绿色。

如何在 SSRS 中实现这一点?

【问题讨论】:

    标签: reporting-services ssrs-2012 ssrs-2016


    【解决方案1】:

    有一种非常简单的设置方法,尤其是当您的值字段来自详细信息行时。
    这是一个例子:

    Fill Color 属性可以采用格式为#AABBCC 的十六进制颜色字符串,该字符串有两个数字对应于每种颜色各自的RGB 值。可以设置一个表达式来生成该字符串。请注意,填充表达式按名称引用字段,因此它可以用于适当范围内的任何文本框。

    Included 是一个简单版本的表达式,因为它最容易查看以了解正在发生的事情。第二个表达式从最小值而不是 0 开始缩放,并使用示例的特定颜色。

    简单版:

    ="#" + Format(255 - CInt(200 * Fields!Target.Value / Max(Fields!Target.Value, "DataSet1")), "X2") + "FF" + Format(255 - CInt(200 * Fields!Target.Value / Max(Fields!Target.Value, "DataSet1")), "X2")
    

    提供从 0 到最大值的线性颜色渐变。最大值将产生 55 个红色、255 个绿色和 55 个蓝色,而 0 值将产生白色 (255/255/255)。注意静态FF是255绿色。

    最小值版本:

    为了得到一个使用最小值的渐变,表达式变得有点混乱,但仍然很容易设置。

    ="#" + Format(255 - CInt(155 * (Fields!Target.Value - Min(Fields!Target.Value, "DataSet1")) / (Max(Fields!Target.Value, "DataSet1") - Min(Fields!Target.Value, "DataSet1"))), "X2") + Format(255 - CInt(55 * (Fields!Target.Value - Min(Fields!Target.Value, "DataSet1")) / (Max(Fields!Target.Value, "DataSet1") - Min(Fields!Target.Value, "DataSet1"))), "X2") + Format(255 - CInt(135 * (Fields!Target.Value - Min(Fields!Target.Value, "DataSet1")) / (Max(Fields!Target.Value, "DataSet1") - Min(Fields!Target.Value, "DataSet1"))), "X2")
    

    可变版本:

    如果您希望颜色值更容易更改,您可以设置报告变量来指定 RGB 值以及它们应调整到最大值的量。在这种情况下,表达式将是:

    ="#" + Format(CInt(Variables!MaxR.Value - Variables!AdjR.Value * (Fields!Target.Value - Min(Fields!Target.Value, "DataSet1")) / (Max(Fields!Target.Value, "DataSet1") - Min(Fields!Target.Value, "DataSet1"))), "X2") + Format(CInt(Variables!MaxG.Value - Variables!AdjG.Value * (Fields!Target.Value - Min(Fields!Target.Value, "DataSet1")) / (Max(Fields!Target.Value, "DataSet1") - Min(Fields!Target.Value, "DataSet1"))), "X2") + Format(CInt(Variables!MaxB.Value - Variables!AdjB.Value * (Fields!Target.Value - Min(Fields!Target.Value, "DataSet1")) / (Max(Fields!Target.Value, "DataSet1") - Min(Fields!Target.Value, "DataSet1"))), "X2")
    

    这些将是用于从第二个表达式生成梯度的报告变量:

    注意:如果您的值字段本身是一个聚合,则需要再次进行微调。您需要对值使用嵌套聚合,但 SSRS 不允许您将数据集范围与嵌套聚合一起使用。因此,您可以添加一个基于常量值分组的父组,然后将其替换为数据集引用。

    【讨论】:

    • 实际上,我想为 SysName 列而不是 Hours(Value 列)着色。因此,在您的情况下,它应该是 Location 列。
    • 如果我的股票示例图像不清楚,我深表歉意,但您实际上可以在行中任何或所有单元格的填充颜色属性上使用该表达式。
    • 非常感谢。虽然,我只是不清楚我应该如何改变颜色?目前,它显示绿色。
    • 我已经更新了答案,以便示例表达式与您的示例中的颜色相匹配。如果您需要更改颜色并且不想深入研究表达式,我提供了一种使用报告变量的方法。
    • 模块化答案 - 太棒了 - 您是否碰巧知道网络仍然列出了 Format 函数的完整有效字符串(例如“X2”)?看起来旧文档已被删除
    猜你喜欢
    • 2011-08-22
    • 1970-01-01
    • 2018-06-16
    • 2019-04-23
    • 2012-12-09
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2020-11-17
    相关资源
    最近更新 更多