Заголовок Tablix не повторяется на новой странице, когда подотчет вызывает разрыв страницы - PullRequest
7 голосов
/ 22 апреля 2011

Я слишком долго боролся с SSRS, что должно быть простым делом.Я надеюсь, что кто-то может помочь мне найти решение.

У меня есть отчет с несколькими профилями, и каждый профиль имеет большое количество разделов данных.Разделы данных (различные таблицы и диаграммы) никак не связаны друг с другом, за исключением того, что они «возвращают» ключ к идентификатору родительского профиля.

Цель (которая кажется простой) - создать заголовокна каждой странице с информацией о профиле, а затем выложить разделы данных (каждый из которых отформатирован совершенно по-разному).

Первая проблема, с которой мы столкнулись, заключалась в том, что по какой-то причине SSRS2008 не позволяет ячейке табликса содержать еще один табликсс другим набором данных (почему он не может просто потребовать фильтр, основанный на родительской группировке, мне не подходит).Рекомендуемый обходной путь для этого недостатка - либо объединить все данные в гигантский набор данных (здесь это невозможно, разделы данных слишком многочисленны и различны), либо встроить подотчеты и передать параметры.В то время как второй вариант увеличивает «работу», необходимую для печати большого количества профилей, мы приступили к ее реализации, и она работает .

Проблема возникает в главном tablix (один, содержащий вложенные отчеты), который имеет статическую группу заголовков строк, установленную с «RepeatOnNewPage = true».Этот параметр позволяет отображать заголовок на каждой странице по желанию ... за исключением вложенных отчетов, охватывающих несколько страниц, , где заголовок неправильно пропущен .

По какой-то причине, когда вложенный отчет охватываетнесколько страниц, заголовок родительского tablix не повторяется!Это сводит меня с ума, так как может показаться, что пара неудачных дизайнерских решений в SSRS поставила меня в ситуацию, когда я не могу создать нужный отчет ... заголовки работают без вложенных отчетов, но мне нужны вложенные отчеты, чтобы "присоединиться""разделы данных в профиле.

Казалось бы, это простое и распространенное требование ... в конце концов, это отчет, который переносится из системы отчетности, созданной десятилетиями.Я безуспешно отыскивал StackOverflow и Google ... Мне кажется, что у меня есть несколько вопросов / ответов о разрывах страниц, но ничего, что предлагало бы решение этой проблемы с подотчетами.

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

Ответы [ 4 ]

4 голосов
/ 26 января 2012

Очень чистый и простой способ повторить заголовок столбца на каждой странице

http://www.a2zmenu.com/Blogs/BI/Tablix-headers-not-repeating-in-SSRS-2008.aspx

2 голосов
/ 25 мая 2011

Я также столкнулся с той же проблемой. Я обнаружил, что способ решить эту проблему состоял в том, чтобы отменить нормализацию данных, добавив поле «Тип записи», чтобы определить, является ли строка родительской или дочерней.

В моей табличке было две вложенные таблицы, каждая из которых отображала подробные данные, связанные с внешней группировкой. Если бы я установил повторение заголовков вложенных таблиц на каждой странице (используя стрелку Дополнительно> Статические свойства> KeepTogether = True, KeepWithGroup = After, RepeatOnNewPage = True), тогда одна из вложенных таблиц будет отображаться правильно, однако родительский повторяющийся заголовок таблицы просто исчезнет.

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

Ниже приведен пример RDL SSRS2008, который подключается к localhost и содержит пример моей проблемы, а также решения, которое я реализовал. Пожалуйста, не стесняйтесь использовать его, если вы найдете это полезным!

(я бы опубликовал это здесь, но переполнение стека не получается для блоков кода, кажется)

http://www.sqlservercentral.com/Forums/Topic1111567-1633-1.aspx?Update=1

2 голосов
/ 28 апреля 2011

Мы решили нашу проблему ... хотя и не самым идеальным способом.

Заголовок страницы («основного» отчета, а не вложенных отчетов), по-видимому, является только способом, чтобы последовательно иметь раздел заголовка.

Мы реализовали решение, основанное в значительной степени на этой публикации в блоге: Сохранение состояния в службах отчетности 2008

Мы немного изменили пост в блоге, убрав из методов «id» и добавив GUID, чтобы значения отчета не смешивались, даже если пользователь запускает несколько копий отчета одновременно. (При использовании общих переменных помните, что они являются глобальными для отчета, выполняемого между экземплярами выполнения и пользователями на сервере отчетов, поэтому при их использовании необходимо соблюдать осторожность!)

В теле отчета у нас есть скрытый текстовый блок, который вызывает:

=Code.SetValue("xxx",Fields!Field1.Value) & Code.SetValue("yyy",Fields!Field2.Value)

и в заголовке страницы отчета мы ссылаемся на них (например):

=Code.GetValue("xxx")

Это работает, потому что тело вычисляется перед заголовком страницы, даже для страницы 1.

Тем не менее, в конце концов, это хак для чего-то, что должно быть в продукте Microsoft, учитывая, что они вложили годы разработки в этот продукт! Почему мы не можем иметь вложенные заголовки табликса и более простые в использовании заголовки, я не знаю ... опять же, это обновление отчета из программы начала 90-х, которая сделала все это без проблем. По крайней мере, предоставьте нам переменные отчета, которые можно получить и установить при обработке отчета!

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

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

1 голос
/ 01 июля 2012

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

В нашем случае основной отчет имеет 4 подотчета.Каждый подотчет должен быть запущен на новой странице.А также, когда начинается новый подотчет, заголовок страницы должен динамически изменяться на основе подотчета в теле текущей страницы.

Также один из SubReports, который был SubReport3, имеет другой случай.В основном Основной отчет работал на основе уровня Дилера.Но Клиент хочет, чтобы SubReport3 запускался для каждого SubDealer, связанного с параметром @Dealer.Также Заказчик хочет, чтобы все данные SubDealer начинались на Новой странице внутри SubReport3.

В результате мы нашли другой обходной путь следующим образом.

Мы создали заголовок страницы для основного отчета.(Меню отчета -> Добавить заголовок страницы) (Как сказал @codinginthevoid, это наиболее последовательный способ)

Мы поместили 4 вложенных отчета в отдельный tablix.Мы добавили новый столбец к каждому tablix.Этот столбец в каждом tablix visiblity = false, ширина этого столбца может быть как можно меньше, затем создается заполнитель внутри этого столбца, сокращается выражение следующим образом:

Если выражение находится в Tablix1, выражение было = "Tablix1 ", если в Tablix2, затем" Tablix2 "и т. Д.

Затем начался заголовок страницы дизайна для Tablix1, каждый элемент отчета в заголовке страницы, который был помещен для Tablix1, имеет следующее выражение видимости:

=ReportItems!Tablix1_HiddenTextbox1.Value IS NOTHING

затем применил то же самое к Tablix2 и т. Д.

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

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