SSRS导出到Excel的速度非常慢

时间:2019-06-12 09:05:06

标签: sql-server excel reporting-services sql-server-2017 ssrs-2017

我已经在此方面寻求帮助,我认为我已经穷尽了所有选择。

我有一个报告,生成约32万行,并且导出到Excel的速度非常慢。太慢了,甚至在渲染结束后(如ExecutionLog3所示),甚至都没有创建excel文件。

我删除了报告标题,甚至将其导出到其他工作表中以创建一个较小的excel文件,并且没有合并的单元格。没有任何列具有任何格式。是导致缓慢导出到Excel的常见原因,对吧?

这是ExecutionLog3

的输出
TimeStart               TimeEnd                 TimeDataRetrieval_Secs  TimeProcessing_Secs TimeRendering_Secs  TotalTime_Secs  ReportSizeMB    RowCount    Status      Format          Source
2019-06-12 09:20:57.310 2019-06-12 09:32:41.313 0.000000                0.047000            703.907000          703.954000      55.596719       0           rsSuccess   EXCELOPENXML    Session
2019-06-12 09:17:44.433 2019-06-12 09:20:01.220 33.336000               103.222000          0.080000            136.638000      0.502475        323800      rsSuccess   RPL             Live

这是EXCELOPENXML的AddionalInfo列的输出

<AdditionalInfo>
  <ProcessingEngine>2</ProcessingEngine>
  <ScalabilityTime>
    <Pagination>0</Pagination>
    <Rendering>0</Rendering>
    <Processing>0</Processing>
  </ScalabilityTime>
  <EstimatedMemoryUsageKB>
    <Pagination>32831</Pagination>
    <Rendering>356162</Rendering>
    <Processing>55997</Processing>
  </EstimatedMemoryUsageKB>
  <Connections />
</AdditionalInfo>

为了进行比较,请使用Excel自身中的“从SQL数据库获取数据”功能,并使用相同的参数执行相同的SP-整个过程大约需要72秒才能加载数据并在Excel中显示。

关于如何改善出口的任何想法?

2 个答案:

答案 0 :(得分:0)

从SQL Server导入Excel,并在Excel中进行汇总,制图,制图等。下面的示例代码将从SQL Server抓取数据并将其拉入Excel。

Sub TestMacro()

' Create a connection object.
Dim cnPubs As ADODB.Connection
Set cnPubs = New ADODB.Connection

' Provide the connection string.
Dim strConn As String

'Use the SQL Server OLE DB Provider.
strConn = "PROVIDER=SQLOLEDB;"

'Connect to the Pubs database on the local server.
strConn = strConn & "DATA SOURCE=(local);INITIAL CATALOG=NORTHWIND.MDF;"

'Use an integrated login.
strConn = strConn & " INTEGRATED SECURITY=sspi;"

'Now open the connection.
cnPubs.Open strConn

' Create a recordset object.
Dim rsPubs As ADODB.Recordset
Set rsPubs = New ADODB.Recordset

With rsPubs
    ' Assign the Connection object.
    .ActiveConnection = cnPubs
    ' Extract the required records.
    .Open "SELECT * FROM YourTable"
    ' Copy the records into cell A1 on Sheet1.
    Sheet1.Range("A1").CopyFromRecordset rsPubs

    ' Tidy up
    .Close
End With

cnPubs.Close
Set rsPubs = Nothing
Set cnPubs = Nothing

End Sub

答案 1 :(得分:0)

我发现这个解决方案非常有用:

https://social.technet.microsoft.com/Forums/ru-RU/124d54f4-583c-4d6d-ac93-4a8e2971b438/export-to-excel-takes-long-time-in-ssrs-2008?forum=sqlreportingservices

这里是关于这个解决方案的一般想法:

在 Reporting Services 中,导出报表时,报表会作为临时格式传递给特定的呈现器。 excel由强大而复杂的引擎处理,外观精美,功能丰富,因此导出如此大量的数据需要更长的时间。针对您的需求,我们可以通过以下步骤来提高导出excel的性能:

1- 不要合并 Tablix 数据区域中的单元格。

2- 考虑在报告中使用分页符。

3- 选择生成较小文件的格式,例如 CSV。由于它只是一个纯文本文件,写入速度很快,我们可以将报表导出为csv格式,然后用excel打开。