Экспорт SSRS в Excel очень медленный - PullRequest
0 голосов
/ 12 июня 2019

Я искал SO для получения справки по этому вопросу и думаю, что исчерпал все опции.

У меня есть отчет, который генерирует около 320 тыс. Строк, и экспорт в 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

Вот вывод из столбца AddionalInfo для EXCELOPENXML

<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>

Для сравнения, используя функцию «Получить данные из базы данных SQL» из самого Excel и выполнить тот же SP с теми же параметрами - весь процесс занимает около 72 секунд для загрузки данных и отображения в Excel.

Есть идеи, как улучшить этот экспорт?

1 Ответ

0 голосов
/ 12 июня 2019

Импорт из 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
...