Это не очень хороший ответ, но в моей компании я собрал нашего собственного построителя отчетов.
У нас около 30 отчетов Службы отчетов, к которым наши пользователи могут получить доступ через веб-приложение или приложение для настольного компьютера. Мы хотели предоставить нашим пользователям возможность использовать любой раздел в этих отчетах и создавать свои собственные.
Если мы создали для них отчет, но они не хотят видеть график, они могут создать тот же отчет без него. Если они хотят объединить детали из 4 различных отчетов в один сводный отчет, они могут перетащить эти разделы в наш пользовательский конструктор и сохранить его.
Создатель отчетов, который мне пришлось собрать, извлекает все различные вложенные отчеты, которые они выбрали, и читает XML, добавляя их в созданный мной XML-файл шаблона построителя отчетов. Затем я должен агрегировать все параметры, чтобы не запрашивать их более одного раза (имена параметров должны быть уникальными во всех отчетах, если вы не хотите, чтобы они агрегировались). Этот новый XML-отчет развернут на сервере, и пользователи могут получать к ним доступ в любое время.
Я также дал им возможность создавать свои собственные титульные страницы, верхние и нижние колонтитулы, перетаскивая текстовые поля, изображения, глобальные переменные (дата, время создания, номер страницы и т. Д.) В любом месте пустой холст. Затем я преобразую все элементы, для которых он был добавлен, и изменил размер этого холста в другой XML-файл отчета и развернул его как вспомогательный отчет, который они могут добавить в свои пользовательские отчеты.
Да, это заняло довольно много работы, но нашим пользователям это нравится. Сейчас мы находимся в процессе предоставления им возможности создавать отчет со специальными группировками, чтобы его можно было запускать на разных уровнях.
Так что это возможно, но нет простого ответа. =) Я был бы рад дать совет всем, кто спрашивает, но прямая копия кода является нарушением моего контракта, но я сделаю все возможное за пределами этого.