当我把它放在一起时,我没有看到最后一列,但它会很容易添加。
我已经创建了两个表格,一个是关联十六进制颜色的产品,另一个是包含一些样品标准化数据的产品。
最后有一个查询将它们放在一起。我建议一旦你有这个运行,你编辑查询,使其动态,所以你不需要硬编码的价值,但它应该让你对我采取的方法的想法。
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数据集中,那么你可以添加一个简单的矩阵如下
该行小组RankID
完成,列组是在ColName
完成。
然后,我们需要一个表达式来选择显示Productname
还是amount
的总和。表达式看起来像这样。
=IIF(Fields!ColName.Value=" Name", Fields!ProductName.Value, Sum(Fields!Amount.Value))
最后,同一单元格的BackgroundColor属性也是一个表达式,如下所示。
=Fields!HexColor.Value
如果您愿意,您可以从矩阵(但不是组)中删除RankID列,但为了清晰起见,我已将其留在此处。最终的输出看起来像这样。
如果我没有错,您正在尝试每年的产品排名。我认为这种方法会让人难以理解数据。也许使用图表将会是更好的选择 – niktrs
颜色问题的一个长期良好的解决方案是将颜色记录中的值存储在数据库中。这样,当添加新产品时,可以选择颜色。你能改变数据库/应用程序吗? –
@niktrs是的产品排名是应该达到的产出。我考虑使用例如折线图,但需求以表格形式指定可视化。 – DummerTroll