WedX - журнал о программировании и компьютерных науках

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

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

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

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

OR

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

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

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

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

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


  • Вы не видели моего ответа: stackoverflow.com/questions/13584509/ @Jeroen дает правильный ответ, но не дает ссылку из надежного источника. В нем есть несколько обходных путей, которые могут вам помочь. 16.10.2013

Ответы:


1

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

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

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

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

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

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

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

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

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

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

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

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

16.10.2013
  • Вы дали мне лучшее предложение. Частично потому, что я так думал, а частично потому, что никто не ответил. Я награжу тебя наградой. Спасибо за помощь! 22.10.2013

  • 2

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

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

    WhilePrintingRecords;
    shared Numbervar myTotal := 0;
    

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

    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} в свой основной отчет там, где вы хотите отобразить это значение в отчете, но помните одну вещь: вы должны поместить эту формулу после подотчета.

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

    08.03.2014
  • Это похоже на Crystal, но есть ли способ сделать это в SSRS? 09.02.2016
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

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


    Для любых предложений по сайту: [email protected]