• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

SSRS:以不同颜色显示每行的报表,并以不同的颜色对每列进行排序

sorting 来源:DummerTroll 7次浏览

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

Example Data

格式化的报告应该是这样的:

Format example

因此,这里是一些样本数据的例子来说明排序:

Example with sampel data

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

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

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


===========解决方案如下:

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

我已经创建了两个表格,一个是关联十六进制颜色的产品,另一个是包含一些样品标准化数据的产品。

最后有一个查询将它们放在一起。我建议一旦你有这个运行,你编辑查询,使其动态,所以你不需要硬编码的价值,但它应该让你对我采取的方法的想法。

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完成。

然后,我们需要一个表达式来选择显示Productname还是amount的总和。表达式看起来像这样。

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

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

=Fields!HexColor.Value 

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

enter image description here


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)