Если кто-то все еще заинтересован в этом, я разработал решение для этого, его можно считать уродливым, но оно позволило мне избежать многих проблем в моем опыте работы с SSRS.
Для тех, кому нужно подробное описание идей (думаю, оно все равно нужно, потому что решение не столь очевидно): https://github.com/GrafGenerator/ssrs-formularize.
Вкратце: это расширение пользовательского рендеринга, которое предназначено для того, чтобы скрыть ExcelRE от SSRS (Formularizer использует ExcelRE под капотом) и запускать обработку формул, когда это необходимо. Идея состоит в том, чтобы пометить некоторые элементы отчета «якорями», а затем в других элементах отчета написать текстовые формулы на специальном простом DSL, которые будут ссылаться на ячейки с якорями после создания документа excel.
Важно: якорь и формулы добавлены к URL-адресу действия элемента отчета, так как кажется, что это единственное поле элемента отчета, к которому можно получить доступ, когда расширение рендеринга работает без нарушения функциональности (здесь мы можем отправить практически все, что угодно, если приготовим это правильно способ).
Таким образом, слова «элементы отчета» «имеют привязку» или «имеют формулу» означают, что для действия элемента отчета заданы URL-адрес и выражение =code.EncodeFormula("current item identitier (anchor)", "current item formula")
.
Примеры шагов (с таблицей):
- Сделано один раз для каждого экземпляра SSRS: скомпилируйте двоичные файлы и установите их в SSRS в соответствии с инструкциями в репозитории.
- Строгий. Добавьте в отчет пользовательскую функцию: https://github.com/GrafGenerator/ssrs-formularize/blob/master/encode-function.vb
- Strict: добавить в отчет настраиваемое свойство – ключ "formularize", значение может быть любым.
строка таблицы содержит элементы отчета (текстовые поля) txtA, txtB и txtC.
4.1 txtA имеет якорь comp_value
4.2 txtB имеет якорь output_value
4.3 txtC имеет формулу IF({cell 'comp_value' row} > 0, {cell 'output_value' row}, "N/A")
.
Результатом в файле Excel является формула IF(A1 > 0, B1, "N/A")
для первой строки, номера строк 2 для второй строки, 3 для третьей и так далее.
- То же самое для прицелов
column
и all
. Больше примеров на странице проекта на github.
Я надеюсь, что это кому-то поможет, не стесняйтесь задавать вопросы и публиковать проблемы в репозитории github.
person
grafgenerator
schedule
07.05.2019