SQL Report Builder表动态颜色

时间:2018-04-02 16:42:50

标签: sql reporting-services sql-server-2012 report

这可能超出了报表生成器的限制。

我有一个生成表格的SQL报告。该表是固定数量的列,具有动态行数。该表的要点是显示系统的配方信息,我想在更改配方信息时让用户更清楚。

示例

+-----------+-------+-----+
| row names | Col A | Col |
+-----------+-------+-----+
| row1      |    10 |  20 |
| row2      |    14 |  20 |
+-----------+-------+-----+

colA的值已经改变,所以我想要更改row2的单元格颜色,colA或更改字体。向用户说明改变了什么。

我想动态地为行做这个。基本上与之前的行比较,并确定是否需要更改任何单元格的颜色。

2 个答案:

答案 0 :(得分:1)

假设您只是想要比较报告中显示的上一行,那么您可以轻松实现这一目标。

要重新创建exmaple,我在名为DataSet1的数据集中使用了以下查询。

DECLARE @t TABLE(RowID int, ColA int, ColB int)

INSERT INTO @t VALUES
(1,10,20),
(2,14,20),
(3,14,20),
(4,15,21),
(5,15,22)

SELECT * FROM @t

然后我创建了一个简单的表,其结果按行ID排序。

然后我将包含BackgroundColor的单元格的[ColA]属性更改为以下表达式。

=IIF(
    Fields!ColA.Value = Previous(Fields!ColA.Value) 
        OR Fields!RowID.Value = MIN(Fields!RowID.Value, "DataSet1")
    , Nothing
    , "Khaki"
    )

我重复了这一点,Col B更改了适用的字段名称。 表达式只检查该值是否与前一行相同。对于第一行将始终为false,因此我检查是否正在格式化第一行。因此,如果(a)我们在第一行或(b)该数字与此列中的前一个数字相同,则背景设置为Nothing(默认值),如果两个条件都不是我们将背景设置为'卡其色'。

最终结果如下......

enter image description here

答案 1 :(得分:1)

另一种方法是修改.RDL文件.RTL文件基本上包含XML标记,因此如果您使用View Code在记事本或Visual Studio中打开它们。您将找到一个名为 BackgroundColor 的标记每一列。通过在现有颜色代码的位置给出颜色代码,您将获得所需的颜色。您可以设计自定义颜色并在报告中使用它。