【问题标题】:SQL Report Builder Table Dynamic ColorSQL 报表生成器表动态颜色
【发布时间】:2018-09-11 21:36:45
【问题描述】:

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

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

例子

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

colA 的值已更改,因此我想更改 row2、colA 的单元格颜色或更改字体。让用户清楚地知道发生了什么变化。

我希望永远动态地执行此操作。基本上与之前的行进行比较并确定我是否需要更改任何单元格的颜色。

【问题讨论】:

  • 当您说“比较之前的行”时,您是指报告中的上一行还是您未在示例中显示的行的上一个状态?

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    假设您只是想比较报告中显示的上一行,那么这很容易。

    为了重新创建示例,我在名为 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
    

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

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

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

    我对@9​​87654328@ 重复了这一点,并根据需要更改了字段名称。 该表达式只是检查该值是否与前一行相同。对于第一行总是错误的,所以我检查一下我们是否正在格式化第一行。因此,如果(a)我们在第一行或(b)数字与此列中的前一个数字相同,则背景设置为Nothing(默认值),如果两个条件都不满足我们将背景设置为“卡其色”。

    最终的结果是这样的……

    【讨论】:

    • 这太棒了!正是我想要的!我知道背景颜色可以使用表达式,但我认为它适用于静态大小写切换情况。制作表格时是否可以将其设为所有列的属性(基于其名称)?我有 500 列要做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多