首页 > 解决方案 > SSRS 中的动态列依赖于 SQL Server 中的数据?

问题描述

我有两个表如下。

Vehicle  Brand    Acquired Year 
A001     Toyota    2018            
A002     BMW       2019
A003     Honda     2019

Vehicle     Maintenance Year     Maintenance Cost
A001            2018                5000
A001            2019                7000
A001            2020                3000
A002            2020                8000
A003            2019                3000
A003            2020                2000

我想要这样的报告:

Vehicle     Brand     Acquired Year     2018     2019     2020     
A001        Toyota        2018          5000     7000     3000
A002        BMW           2019           0         0      8000
A003        Honda         2019           0       3000     2000

其中前三列之后的列是动态的,取决于表 2 中的维护年份。这些列的数据是相应维护年份的维护成本。

有人可以提供一些指导吗?

标签: sql-servervisual-studioreporting-services

解决方案


我使用以下数据集查询重新创建了您的示例数据。

DECLARE @v TABLE(Vehicle varchar(10), Brand varchar(10), [Acquired Year] int)
DECLARE @m TABLE(Vehicle varchar(10), [Maintainence Year] int, [Maintainence Cost] int)

INSERT INTO @v VALUES
('A001', 'Toyota', 2018),
('A002', 'BMW', 2019),
('A003', 'Honda', 2019)

INSERT INTO @m VALUES
('A001', 2018, 5000),
('A001', 2019, 7000),
('A001', 2020, 3000),
('A002', 2020, 8000),
('A003', 2019, 3000),
('A003', 2020, 2000)

SELECT 
    v.Vehicle, v.Brand, v.[Acquired Year], m.[Maintainence Year], m.[Maintainence Cost]
    FROM @v v 
    JOIN @m m on v.Vehicle = m.Vehicle

这给了我们总共 6 行数据集的输出看起来像这样..

Vehicle Brand   Acquired Year   Maintainence Year   Maintainence Cost
A001    Toyota  2018            2018                5000
A001    Toyota  2018            2019                7000
A001    Toyota  2018            2020                3000
A002    BMW     2019            2020                8000
A003    Honda   2019            2019                3000
A003    Honda   2019            2020                2000

注意:我们不需要在这里做任何动态的事情,如果年数增加,报告的矩阵控制将为我们做这件事,所以报告中的列数不需要我们做任何事情。

创建一个新报告。添加一个新数据集并将数据集查询设置为上面的脚本或为您提供与实际数据相同的结果布局的东西。

然后将矩阵控件添加到您的报告中

  • 将车辆从数据集字段列表拖到“行”占位符
  • 将 Maintenance_Year 拖到“列”占位符
  • 将 Maintenance_Cost 拖到“数据”占位符

在此处输入图像描述

  • 接下来,右键单击车辆文本框并选择“插入列 => 内部组 - 右”,然后单击新单元格并从列表中选择“品牌”

在此处输入图像描述

  • 重复获得年份。当您这样做时,由于 Year 是数字,SSRS 将添加一个 SUM 表达式,您需要更改它。右键单击表达式并将其更改为

=SUM(Fields!Acquired_Year.Value)=FIRST(Fields!Acquired_Year.Value)

最终的设计应该是这样的。

在此处输入图像描述

当我们运行报告时,我们得到了这个。

在此处输入图像描述


推荐阅读