【问题标题】:SSRS: Report that displays each line in a different color and sorts each column differentlySSRS:以不同颜色显示每一行并对每一列进行不同排序的报告
【发布时间】:2017-06-19 07:15:37
【问题描述】:

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

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

所以这里有一些示例数据来显示排序的示例:

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

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

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

【问题讨论】:

  • 如果我没记错的话,您正在尝试每年的产品排名。我认为这种方法会使某人难以理解数据。也许使用图表会是更好的选择
  • 一个好的、长期的颜色问题解决方案是将值存储在颜色记录的数据库中。这样,当添加新产品时,可以选择颜色。你能改变数据库/应用程序吗?
  • @niktrs 是的,产品排名是应该达到的输出。我考虑使用例如折线图,但要求是以表格形式指定可视化。
  • @PaulBambury 是的,我可以更改数据库。因此,如果我理解正确,我应该创建一个包含产品和颜色列的表格?
  • 可以做到,但是难度很大。导出也不会那么好。

标签: sorting reporting-services formatting report


【解决方案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 中的数据集,则可以添加一个简单的矩阵,如下所示

行组在RankID 上完成,列组在ColName 上完成。

然后我们需要一个表达式来选择显示Productnameamount 的总和。表达式如下所示。

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

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

=Fields!HexColor.Value

如果您愿意,可以从矩阵中删除 RankID 列(但不能从组中删除!),但为了清楚起见,我将其保留在此处。最终输出如下所示。

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    相关资源
    最近更新 更多