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} в ваш основной отчет, где вы хотите показать это значение в отчете, но помните одну вещь: вы должны поместить эту формулу после подотчета.
ПРИМЕЧАНИЕ: чтобы присвоить значение переменной, используйте:= оператор