Передать набор данных в подотчет с помощью служб отчетов SQL Server

Я использую службы отчетов SQL Server и дизайнер отчетов, который входит в состав Visual Studio. У меня есть очень большой отчет. На самом деле он настолько велик, что Visual Studio зависает (иногда часами) или просто падает, когда я вношу изменения.

Я мало что могу сделать, чтобы решить эту проблему, поэтому я решил просто переместить нижнюю половину отчета в подотчет. Итак, я начал с одного огромного, не отвечающего на запросы отчета, а закончил двумя небольшими, управляемыми отчетами — на удивление, это действительно работает.

Одна проблема: в моем подотчете используются те же данные, что и в основном отчете. Прямо сейчас он заполняет свой набор данных, повторно запрашивая базу данных. Дополнительный цикл обращения к базе данных приводит к тому, что создание отчета занимает в два раза больше времени; с 45 минут до 1 1/2 часов для создания.

Я хотел бы избежать повторного обращения к базе данных и вместо этого использовать один и тот же набор данных в обоих отчетах.

Как я могу поделиться или передать набор данных между отчетом и вложенным отчетом?


person Juliet    schedule 20.02.2009    source источник


Ответы (6)


Я почти уверен, что вы не можете. Вам, вероятно, лучше поискать способы полностью изменить дизайн отчета, чтобы он не был таким большим... не говоря уже о различных проблемах с подотчетами при экспорте в Excel.

person CodeRedick    schedule 20.02.2009

Я думаю, это может вам помочь: http://www.gotreportviewer.com/subreports/index.html< /а>

Предоставление данных для подотчета — событие SubreportProcessing Чтобы предоставить данные для подотчета, вы должны обработать событие SubreportProcessing. Обратите внимание, что это событие относится к объекту LocalReport. Вы можете добавить обработчик события следующим образом:

private void MainForm_Load(object sender, EventArgs e)
{
    this.reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(MySubreportEventHandler);
}

Ниже приведен пример обработчика события. В этом примере определено, что LoadSalesData возвращает DataTable.

void MySubreportEventHandler(object sender, SubreportProcessingEventArgs e)
{
    e.DataSources.Add(new ReportDataSource("Sales", LoadSalesData()));
}

Если в вашем отчете есть несколько вложенных отчетов, вы можете просмотреть свойство ReportPath SubreportProcessingEventArgs и предоставить данные для соответствующего вложенного отчета. Вы также можете проверить значения свойства Parameters SubreportProcessingEventArgs и вернуть только подмножество данных, которое соответствует параметрам вложенного отчета, как указано здесь.

person Sawan    schedule 05.05.2012

У меня есть несколько отчетов о том, что SQL настолько сложен, что блокирует Visual Studio, когда я пытаюсь его отредактировать. В этих отчетах я иду прямо в представление кода и редактирую XML напрямую, что работает. Я также делаю это, когда Visual Studio таинственным образом делает столбцы немного шире, чем я их установил. Однако я сомневаюсь, что вы захотите пойти по этому пути, если слишком много редактируете макет отчета.

Можно ли вместо выполнения запроса в отчете построить таблицу с помощью хранимой процедуры, которую используют оба отчета? Первый отчет запускает хранимую процедуру для построения таблицы, а затем оба отчета просто запрашивают отчет. Следите за проблемами параллелизма, если отчет может запускаться несколькими пользователями.

person Chris Latta    schedule 04.03.2009

Вы пытались использовать список в списке, где оба списка используют один и тот же набор данных, а затем фильтруют внутренний список, чтобы отображать только записи, связанные с внешним списком?

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

Надеюсь это поможет,

Счет

person V'rasana Oannes    schedule 18.05.2009

Вы можете сделать это, используя фиктивный параметр:

я. Создайте параметр в своем основном отчете «Мои данные» и отметьте «внутренний».

II. Установите значение по умолчанию «MyData» для вашего набора данных

III. Установите параметр подотчета с выражением

=Parameters!MyData.Value

Надеюсь, это поможет, Дункан.

person Duncan    schedule 03.07.2009

Если вы создаете таблицу, вы можете объединить все ячейки строки сведений и поместить подотчет в качестве содержимого. Затем установите параметр подотчета в поле, для которого вы хотите запустить подотчет.

Джейсон

person Community    schedule 29.07.2009