SSRS Pull Variables или значения из подзаголовка в основной отчет

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

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

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

ИЛИ

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

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

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

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

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

Ответ 1

Ссылки в вопросе и комментариях иногда относятся к отчетам, отличным от 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 и MS BI MVP

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

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

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

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

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

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

Ответ 2

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

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

WhilePrintingRecords;
shared Numbervar myTotal := 0;

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

WhilePrintingRecords;
shared Numbervar myTotal := 0

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

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

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

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

WhilePrintingRecords;
shared Numbervar myTotal;
myTotal

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

ПРИМЕЧАНИЕ: для назначения значения переменной используется: = operator