如何在不丢失结构的情况下将 SSRS 矩阵导出为 CSV?

Mik*_*ike 5 csv export ssrs-2008 ssrs-tablix

考虑以下数据源:

declare @Test table (EmpId int, ProdId int, Sold int)
insert @Test (EmpId, ProdId, Sold) values (1, 1, 1)
insert @Test (EmpId, ProdId, Sold) values (1, 2, 2)
insert @Test (EmpId, ProdId, Sold) values (1, 3, 3)
insert @Test (EmpId, ProdId, Sold) values (1, 4, 4)
insert @Test (EmpId, ProdId, Sold) values (2, 1, 5)
insert @Test (EmpId, ProdId, Sold) values (2, 2, 6)
insert @Test (EmpId, ProdId, Sold) values (2, 3, 7)
insert @Test (EmpId, ProdId, Sold) values (2, 4, 8)
select * from @Test
Run Code Online (Sandbox Code Playgroud)

我创建了一个 Sql Server Reporting Services (SSRS) 2008 R2 报告,其中包含一个配置如下的矩阵:

|         | [ProdId]    |
| [EmpId] | [Sum(Sold)] |
Run Code Online (Sandbox Code Playgroud)

在预览模式下,呈现为以下内容(如预期):

|   | 1 | 2 | 3 | 4 |
| 1 | 1 | 2 | 3 | 4 |
| 2 | 5 | 6 | 7 | 8 |
Run Code Online (Sandbox Code Playgroud)

但是当我将它导出到 CSV 时,我得到了这个:

| EmpId | ProdId | Sold |
| 1     | 1      | 1    |
| 1     | 2      | 2    |
| 1     | 3      | 3    |
| 1     | 4      | 4    |
| 2     | 1      | 5    |
| 2     | 2      | 6    |
| 2     | 3      | 7    |
| 2     | 4      | 8    |
Run Code Online (Sandbox Code Playgroud)

换句话说,当我导出到 CSV 时,我丢失了矩阵布局,并且每一行数据都呈现为一行 CSV。请注意,如果我导出到 Excel,报告会按预期工作,因此到目前为止,此问题似乎仅限于 CSV。我曾尝试将矩阵重组为表中表,但这也不能解决问题。有什么建议?

ksc*_*ott 4

这是 SSRS 2005 和 SSRS 2008 之间报表呈现重大变化的一部分。

我找到的唯一解决方案是:

  1. 导出到 Excel,然后将 Excel 文档另存为 CSV - 这会扁平化 Excel 格式,并需要设置分组,以便每行重复父组的值。但是,一开始导出到 Excel 时会出现问题,例如,如果连续行包含相同的数据,渲染器有时会忽略数据,可以通过将受影响的列的“DataElementOutput”设置为 True(而不是“”)来停止此问题。 Auto' 允许渲染器猜测您可能认为重要的字段。

  2. 将您的报告构建为平面表格- 这几乎违背了从一开始就制作矩阵的目的,而且很痛苦,但您可以提前定义列,并且可以在查询中动态地执行此操作,也可以使用大量文本框值中的表达式并设置列的动态可见性。但要实现这一目标可能需要创建数十或数百列来处理特定值的潜在出现。

  3. 不要升级到 2008 - 如果矩阵报告和导出格式对业务至关重要,那么确实没有什么好方法来重新创建 2008 年的功能,坚持使用 2005 SSRS 是获得旧版本的唯一可靠方法渲染。

资源