Функция Excel в SSRS 2012

Из того, что я прочитал, это может быть невозможно, но я подумал, что стоит спросить: я пытаюсь экспортировать отчет SSRS 2012, но в то же время поддерживать функцию Excel.

У меня есть текстовое поле в моем отчете SSRS, которое при экспорте всегда отображается в строке/столбце D33. У меня есть цифра 20. Я закодировал в ячейке своего отчета =D33* "число, которое возвращается в отчет, выражение, которое я использовал, это ="=DD3*"&Cint(Fields!LABC_Hours.Value), при экспорте это получается как =D33*5, но что следует делать расчет = 20 * 5. Есть ли способ сделать это?

Заранее спасибо.


person PJD    schedule 20.06.2013    source источник
comment
stackoverflow.com/a/21194184/2622671 Этот ответ работает как обходной путь, хотя для этого требуется немного конечного пользователя разбираюсь в excel.   -  person Daniel E.    schedule 16.07.2014


Ответы (2)


Краткий ответ - нет.

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

См. раздел Ключевые изменения в службах SSRS 2008.

В более ранних версиях Reporting Services была ограниченная поддержка преобразования выражений RDL в формулы Microsoft Excel. В этом выпуске при экспорте отчета в Excel выражения RDL не преобразуются в формулы Excel.

Излишне говорить, что это популярный запрос, см. этот элемент Подключить:

SSRS 2008 экспортирует формулы в Excel.

Освежая свою память обо всем этом, я увидел несколько заметок, в которых предлагалось использовать выражения, которые напрямую ссылаются на коллекцию ReportItems, например:

=ReportItems!val1.Value + ReportItems!val2.Value

Тогда это сработает, но я провел простой тест в SSRS 2008, и это не имело никакого значения.

Я думаю, что общее мнение состоит в том, что вам просто не повезло в этом, к сожалению.

person Ian Preston    schedule 20.06.2013
comment
Привет Ян, спасибо за ответ, я должен быть честным, я думал, что это может быть ответ, просто надеялся, что они могли бы выслушать всех людей и добавить что-то в SSRS 2012, не повезло. Спасибо еще раз, хотя. - person PJD; 20.06.2013

Если кто-то все еще заинтересован в этом, я разработал решение для этого, его можно считать уродливым, но оно позволило мне избежать многих проблем в моем опыте работы с SSRS.

Для тех, кому нужно подробное описание идей (думаю, оно все равно нужно, потому что решение не столь очевидно): https://github.com/GrafGenerator/ssrs-formularize.

Вкратце: это расширение пользовательского рендеринга, которое предназначено для того, чтобы скрыть ExcelRE от SSRS (Formularizer использует ExcelRE под капотом) и запускать обработку формул, когда это необходимо. Идея состоит в том, чтобы пометить некоторые элементы отчета «якорями», а затем в других элементах отчета написать текстовые формулы на специальном простом DSL, которые будут ссылаться на ячейки с якорями после создания документа excel.

Важно: якорь и формулы добавлены к URL-адресу действия элемента отчета, так как кажется, что это единственное поле элемента отчета, к которому можно получить доступ, когда расширение рендеринга работает без нарушения функциональности (здесь мы можем отправить практически все, что угодно, если приготовим это правильно способ).

Таким образом, слова «элементы отчета» «имеют привязку» или «имеют формулу» означают, что для действия элемента отчета заданы URL-адрес и выражение =code.EncodeFormula("current item identitier (anchor)", "current item formula").

Примеры шагов (с таблицей):

  1. Сделано один раз для каждого экземпляра SSRS: скомпилируйте двоичные файлы и установите их в SSRS в соответствии с инструкциями в репозитории.
  2. Строгий. Добавьте в отчет пользовательскую функцию: https://github.com/GrafGenerator/ssrs-formularize/blob/master/encode-function.vb
  3. Strict: добавить в отчет настраиваемое свойство – ключ "formularize", значение может быть любым.
  4. строка таблицы содержит элементы отчета (текстовые поля) 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").

  5. Результатом в файле Excel является формула IF(A1 > 0, B1, "N/A") для первой строки, номера строк 2 для второй строки, 3 для третьей и так далее.

  6. То же самое для прицелов column и all. Больше примеров на странице проекта на github.

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

person grafgenerator    schedule 07.05.2019