SSRS:报告以不同颜色显示每一行,并以不同方式对每列进行排序

时间:2017-06-19 07:15:37

标签: sorting reporting-services formatting report

我想在SSRS中创建一个报告。此报告最多包含30行。每行代表不同的产品。每个产品系列都有不同的颜色。因此,对于产品A,该线是红色的。列中是不同年份的收入。例如,第一列是2014年。最后一列将显示产品的总计。现在每列(产品名称和总和除外)应按降序排序,每行muss保持产品的颜色。以下是示例数据的图片。

Example Data

格式化的报告应如下所示:

Format example

以下是一些示例,其中包含一些示例数据以显示排序:

Example with sampel data

我希望这个问题是可以理解的。

首先,我该如何实现颜色编码?我的第一个猜测是使用例如代码设置颜色并使用IIF(Fields!Product.Value = 'product A', "Yellow", "White")。这似乎有效,但我认为将每个产品的格式硬编码到报告中是不切实际的。是否有一种优雅而动态的格式化方式?

其次,如何以不同方式对每列进行排序并保存与产品的关系?我是否必须为每列创建一个Tablix并隐藏产品名称?

1 个答案:

答案 0 :(得分:1)

当我把它放在一起时,我没有看到最后一栏,但它很容易添加。

我创建了两个表,一个用于与十六进制颜色相关联的产品,另一个包含一些样本规范化数据。

最后有一个查询将它们全部拉到一起。我建议您在运行此操作后编辑查询以使其动态化,这样您就不需要对值进行硬编码,但它应该让您了解我采用的方法。

DECLARE @prod TABLE (ProductID int, Productname varchar(50), HexColor varchar(7))
INSERT INTO @prod
VALUES
(1, 'Bikes', '#FF0000'),
(2, 'Cars', '#00FF00'),
(3, 'Vans', '#0000FF')


DECLARE @t TABLE (ProductID int, PeriodID int, Amount int)
INSERT INTO @t
VALUES
(1, 2014, 10),
(1, 2015, 12),
(1, 2016, 14),
(2, 2014, 12),
(2, 2015, 9),
(2, 2016, 8),
(3, 2014, 11),
(3, 2015, 16),
(3, 2016, 4)



SELECT ' Name' as ColName, p.ProductName, 0 as Amount, ROW_NUMBER() OVER(ORDER BY t.ProductID) AS RankID , HexColor
    FROM (SELECT DISTINCT ProductID FROM @t)t
    join @prod p on t.productid = p.productid
UNION ALL
SELECT '2014' as ColName, p.ProductName ,amount, ROW_NUMBER() OVER(ORDER BY Amount) AS RankID , HexColor
    FROM  @t t
    join @prod p on t.productid = p.productid
    where periodID = 2014
UNION ALL
SELECT '2015' as ColName, p.ProductName, amount, ROW_NUMBER() OVER(ORDER BY Amount) AS RankID , HexColor
    FROM  @t t
    join @prod p on t.productid = p.productid
    where periodID = 2015
UNION ALL
SELECT '2016' as ColName, p.ProductName, amount, ROW_NUMBER() OVER(ORDER BY Amount) AS RankID , HexColor
    FROM  @t t
    join @prod p on t.productid = p.productid
    where periodID = 2016

如果您在SSRS中将其用作数据集,则可以添加如下的简单矩阵

enter image description here

RankID上完成的行组和列组在ColName上完成。

然后我们需要一个表达式来显示Productnameamount的总和。表达式看起来像这样。

=IIF(Fields!ColName.Value=" Name", Fields!ProductName.Value, Sum(Fields!Amount.Value))

最后,同一单元格的BackgroundColor属性也是如下表达式。

=Fields!HexColor.Value

如果您愿意,可以从矩阵(但不是群组!)中删除RankID列,但为了清楚起见,我已将其留在此处。最终输出看起来像这样。

enter image description here