2016-09-09 2 views
0

Я работаю над отчетом SQL Server, который показывает данные размером 300 К, и поэтому он очень медленный, большую часть времени тратится на обработку отчета. Поэтому я думаю, могу ли я сделать какую-то программу для получения данных из базы данных на странице. Таким образом, вызов из db и времени обработки отчета будет уменьшаться. Таким образом, если я показываю 50 записей на странице, и когда я нахожусь на первой странице и нажимаю на странице 2 или следующей кнопке, мой отчет получает данные от 51 до 100. Когда я снова нажимаю на следующую кнопку, я получаю данные для стр. 3, которые будут от 101 до 150.SSRS с пользовательским поисковым вызовом

Так что я могу достичь.

+0

Если вы не читали [это] (https://technet.microsoft.com/en-us/library/bb522806 (v = sql.105) .aspx), это может помочь вам –

ответ

0

Обычно, когда отчет отображается, все данные извлекаются, а SSRS отображает отчет, который вызывает задержку. Если производительность здесь является ключом, вы можете использовать хранимую процедуру для извлечения 50 строк за раз, вместо того, чтобы передавать все значения непосредственно в SSRS - здесь вы не можете использовать собственные кнопки следующей/предыдущей страницы.

Обходной задачей является создание пользовательских ссылок для возврата к самому отчету с добавленными параметрами, указывающими начальную строку индекса.

Создайте хранимую процедуру, которая принимает в качестве параметра, который определяет начальную строку из таблицы:

CREATE PROCEDURE dbo.usp_GetData 

@RowNumber BIGINT 

AS 

    BEGIN 

     DECLARE @FirstRow BIGINT 
     DECLARE @LastRow BIGINT 

     SET @FirstRow = @RowNumber 
     SET @LastRow = @RowNumber + 50 

    ;WITH CTE AS 
    (
     SELECT *, 
      ROW_NUMBER() OVER (ORDER BY num) AS RowNumber 
     FROM dbo.TestTable 
    ) 
    SELECT * 
    FROM CTE 
    WHERE RowNumber >= @FirstRow 
      AND RowNumber < @LastRow 

    END 

GO 

Создать хранимую процедуру, которая извлекает общее количество строк из таблицы:

CREATE PROCEDURE dbo.usp_GetTotalRows 

AS 

BEGIN 

    SELECT COUNT(*) "TotalRows" 
    FROM dbo.TestTable 

END 

GO 

Создать отчета и добавьте два набора данных, используя две хранимые процедуры.

Параметр @RowNumber должен автоматически сгенерироваться. Вы можете установить значение по умолчанию 1, чтобы начать отчет из строки 1.

Создайте две «пользовательские» кнопки в отчете (фактически просто ссылайтесь на один и тот же отчет). Вы можете использовать текстовые поля для кнопок «Предыдущая/следующая страница».

Для текстового поля «Предыдущая кнопка» - Свойства> Действие> Перейти к отчету> Укажите отчет (выберите название своего отчета). Добавьте параметр и установите выражение: =Parameters!RowNumber.Value-50

Для текстового поля «Следующая кнопка» - Свойства> Действие> Перейти к отчету> Укажите отчет (выберите имя своего имени отчета). Добавить параметр и установить выражение: =Parameters!RowNumber.Value+50

Вы также можете изменить параметры видимости для кнопок (например, кнопки «Предыдущая страница», когда Parameters!RowNumber.Value = 1 скрывается, или скрывает кнопку «Next Page», когда Parameters!RowNumber.Value + 50 >= DataSetName!TotalRows.Value)

+0

Louie, на данном решении, как бы Я отправляю параметр номера страницы обратно в хранимую процедуру. Также как я могу вызвать событие из следующей кнопки в отчете, чтобы получить следующий набор из 50 записей? – user2688063

+0

Пользователь. Вы можете увеличить этот параметр, создав настраиваемую ссылку на тот же отчет и увеличив его в разделе выражения. Я обновил ответ, чтобы сделать его более понятным. К сожалению, вы не можете использовать собственные страницы следующей/предыдущей кнопки. Я тестировал это в своей лаборатории, и он отлично работает – Louie

Смежные вопросы