SSRS извлекает переменные или значения из подчиненного отчета в основной отчет

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

Итак, в моей ситуации у меня есть текстовое поле, в котором необходимо собрать данные из нескольких разных отчетов с различными критериями. НАПРИМЕР

MainReportTextbox =(Sum(columnA, "Main Dataset"))-(SubReportTextBox))

ИЛИ ЖЕ

MainReportTextbox =(Sum(columnA, "Main Dataset"))-(subReportVariable))

Я видел несколько предложенных решений, таких как это. Который использует =[Reports]!MainReport!SubReport!Textbox схема. Проблема в том, что [Reports] не является распознанным идентификатором.

Я решил отказаться от вложенных отчетов и просто запустить все в одном и том же основном отчете, но мы утратили возможность использовать отчеты по отдельности, не поддерживая одно и то же в двух местах.

Поэтому я предполагаю, что мой вопрос заключается в том, можете ли вы извлечь значения переменных или элементов (особенно текстовых полей в таблице) из подотчетов?

Если ответ просто "нет", пожалуйста, покажите мне некоторую информацию о том, почему это не так или нет, из MSDN или действительного источника, и дайте несколько достоверных советов.

2 ответа

Решение

Ссылки в вопросе и комментариях иногда ссылаются на отчеты, не относящиеся к SSRS: синтаксис [subreport].[Report]![MyFieldName] или же [Reports]![YourReportName]![YourSubReportName]![TheValueFromTheSubReportYouWantToReference] не используются в SSRS. Однако он используется при разработке отчетов MS Access, как указывает ojeffrey в обсуждении, на которое вы ссылаетесь.

Нет общего метода для доступа к данным в подотчете. Модель SSRS заключается в том, что данные родительского отчета обрабатываются, данные вложенного отчета обрабатываются, подчиненные отчеты обрабатываются, результаты возвращаются к родительскому отчету, а затем родительский обрабатывается, включая соответствующий отчет. Единственные данные, передаваемые между ними, - это параметры, передаваемые во вложенный отчет, и обработанные выходные данные передаются родительскому объекту. Вы увидите, что данные, передаваемые от родителя, должны быть в качестве параметров отчета здесь: http://technet.microsoft.com/en-us/library/ms160348(v=sql.100).aspx

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

Для цитирования авторитетных источников: Это обсуждение подводит итог:

Нет, ссылка на элемент отчета в подотчете не допускается.

Но это немного устарело, есть также более свежее обсуждение обходных путей, предоставленное сотрудником Microsoft и MV BI MVP:

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

[Переход к другому сообщению]...

Теперь, кажется, вы хотите вычислить разницу между основным отчетом и вложенным отчетом. Кроме того, поскольку у них разные источники данных, вы не можете использовать таблицу гнезд / матрицу / список, верно? Если это так, то я могу придумать один обходной путь: передать параметр в подотчет и вычислить итоговое значение / промежуточный итог в подотчете. Я имею в виду, создайте несколько скрытых / внутренних параметров, передайте значения из основного отчета в подотчет через параметры и затем вычислите общее / промежуточное итоговое значение.

Ответ Джероена на связанный вопрос указывает на направление, в котором я бы шел: используйте "Общий набор данных" и включите кэширование, если набор данных выполняется медленно. Затем одно и то же выполнение набора данных можно использовать для родительского и вложенных отчетов. Это может изменить использование параметров: они обычно перемещаются из запроса SQL в фильтр набора данных в отчете.

Но с Lookup Функция, представленная в SSRS 2008R2, позволяет очень гибко объединять уровни отчетов между наборами данных.

Детали того, как я это спроектирую, во многом зависят от того, сколько других данных нужно передать назад и вперед, и насколько аккуратно можно связать запросы для отчетов.

Создайте переменную в основном отчете и обновите ее в дополнительном отчете, чтобы вы могли получить значение обратно в основной отчет

пример: создать формулу в главном отчете с текущим именем {@Total}

WhilePrintingRecords;
shared Numbervar myTotal := 0;

ПРИМЕЧАНИЕ: размещение; не будет печатать значения и без; напечатает значение в примере выше, значение не будет напечатано, если вы хотите напечатать значение формулы просто удалите; со второй строки

WhilePrintingRecords;
shared Numbervar myTotal := 0

Теперь поместите {@Total} в заголовок отчета вашего основного отчета. Теперь создайте в формулу второго отчета вторую формулу, где вы хотите добавить промежуточный итог в формулу основного отчета с именем {@addTotal}, поместите в него следующие строки.

WhilePrintingRecords;
shared Numbervar myTotal;
myTotal := myTotal + 200; //or any formula or field

добавить эту формулу, чтобы поместить в подотчет, где вы хотите добавить значение к общему

Теперь создайте формулу в основном отчете, чтобы показать итоговую сумму с именем {@showTotal} и поместить в нее следующие строки.

WhilePrintingRecords;
shared Numbervar myTotal;
myTotal

Поместите {@showTotal} в ваш основной отчет, где вы хотите показать это значение в отчете, но помните одну вещь: вы должны поместить эту формулу после подотчета.

ПРИМЕЧАНИЕ: чтобы присвоить значение переменной, используйте:= оператор

Другие вопросы по тегам