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

时间:2011-05-09 18:03:35

标签: 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

我创建了一个Sql Server Reporting Services(SSRS)2008 R2报告,其中包含一个像这样配置的Matrix:

|         | [ProdId]    |
| [EmpId] | [Sum(Sold)] |

在预览模式下,渲染到以下内容(如预期):

|   | 1 | 2 | 3 | 4 |
| 1 | 1 | 2 | 3 | 4 |
| 2 | 5 | 6 | 7 | 8 |

但是当我将其导出为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    |

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

3 个答案:

答案 0 :(得分:4)

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

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

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

  2. 以平台形式制作报告 - 这几乎打破了制作矩阵的重点,并且很痛苦,但您可以提前定义列,并且可以在查询中动态地执行,也可以在文本框值中使用大量表达式并设置动态列上的可见性。但要实现这一目标,可能需要创建数十个或数百个列来处理特定值的潜在外观。

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

    < / LI>

    <强>资源

答案 1 :(得分:0)

这是一种解决方法:

  • 将CSV输出的源切换为额外的Tablix,可显示所有 数据保持原样。
  • 禁止原始Tablix输出到CSV(Tablix> 属性> DataElementOutput> NoOutput)。
  • 隐藏多余的Tablix,使其不显示。 (Tablix>右键单击> Tablix属性>可见性>隐藏)。

通过这种方式,您可以完全控制屏幕显示和CSV输出。

答案 2 :(得分:0)

这在SSRS 2016上有时有效:

  1. 选择缺少的列
  2. 打开属性
  3. 仅更改数据-> DataElementOutput作为输出
  4. 此操作的工作位置不同。例如,当我在Tablix上执行此操作时,它不起作用,但是当我在列上执行此操作时,它起作用。您可以尝试创建一个表,只是为了测试之后是否更好。不幸的是,您无法在页脚上建立表格,这将特别有用。