Как применить родительскую группу для нескольких наборов данных в SSRS VS2008

Я безуспешно борюсь с этой проблемой несколько дней. У меня очень сложный формат отчета, который мне нужно достичь, но главное, что все наборы данных должны быть сгруппированы по 1 родительскому элементу. Попробую объяснить ...

Скажем, у нас есть набор данных 1, набор данных 2. Оба имеют AccountNumber в качестве общего поля (родительского).

Мне нужно, чтобы оба набора данных использовались в формате / макете отчета, но сгруппированы вместе по AccountNumber, что-то вроде этого.

[Report Header Data]

[AccountNumber Group]

Dataset1
Dataset2

[end AccountNumber Group]

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

[Report Header Data]

[AccountNumber Group]
[tablix1]
Dataset1
[tablix1]

[tablix2]
Dataset2
[tablix2]

[end AccountNumber Group]

С нетерпением жду обсуждения по этому поводу!


person user1732364    schedule 03.09.2013    source источник


Ответы (3)


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

  1. Объедините два набора данных в один

    Объединение наборов данных в один в вашем запросе - один из самых простых ответов, который работает во всех версиях SSRS. Это может сделать запросы SQL большими, но упрощает структуру отчета.

  2. Используйте функцию Lookup(...)

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

  3. Подотчеты

    Подобно подходу, описанному в исходном вопросе, это позволяет вам создать родительский проект с одним табликсом, а затем поместить в него подотчет. Подотчет будет вызываться несколько раз с элементом группировки в качестве параметра. Каждый запуск отчета должен возвращать отчет только для этого экземпляра группы. Это может быть очень мощно, но поддерживать его сложно: у вас есть два места, где можно что-то изменить, и может потребоваться ручная настройка, чтобы столбцы выровнялись правильно. Подотчет часто оказывается самым быстрым для запуска отчетом, поскольку он вызывается много раз.

[NB: StackOverflow.com - не лучшее место для обсуждения. Дизайн сайта создан таким образом, чтобы избегать обсуждений и нацеливаться на вопросы и ответы, а не на обсуждение.]

person Jamie F    schedule 03.09.2013

Не знаю, есть ли здесь идеальное решение.

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

После того, как вы настроили эту настройку, вам необходимо встроить различные объекты набора данных (например, tablix1, tablix2) в каждую строку.

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

Так что-то вроде:

[Report Header Data]

[AccountNumber Group]
[subreport1]
[tablix1]
Dataset1
[tablix1]
[subreport1]

[subreport2]
[tablix2]
Dataset2
[tablix2]
[subreport2]

[end AccountNumber Group]

Это будет повторяться для каждого AccountNumber по мере необходимости.

Трудно сказать, не зная точно, как выглядят ваши данные, но в 2008 R2 и выше вы можете использовать Lookup и LookupSet для присоединения к наборам данных, но будет обременительным для нескольких значений, даже если вы используете правильную версию.

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

person Ian Preston    schedule 03.09.2013
comment
В течение последних нескольких дней я атаковал подход с использованием единого набора данных и позволял отчету делать за меня всю работу по размещению того, что и где. Единственная проблема, с которой я столкнулся, - это правильно сгруппировать данные и поддерживать макет отчета, что заставляет меня искать другие варианты. Мне удалось заставить группировку работать с 1 набором данных, но макет был невозможен, и отчет выглядел как дерьмо. Подотчеты - это последнее средство, и я только что обнаружил, что VS 2008 SSRS плохо работает с sql server 2012 ..: / FACE PALM! - person user1732364; 03.09.2013
comment
Я заполняю отчет, используя код VB.net, создавая список объектов передачи данных (DT), которые представляют мои данные. В VB я получаю тот же результат, что и на сервере sql, поэтому с моим набором данных все в порядке. Манипулирование этим набором данных для получения настраиваемого макета - вот где возникла проблема. - person user1732364; 03.09.2013

Было бы здорово, если бы мы знали данные отчета, например, расчетную ведомость, расчетную ведомость с остатком по кредиту (т.е. набор данных 1 для расчетной ведомости и набор данных 2 для ссуды).

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

Предполагая, что вам понадобятся вычисления суммы, если результат вычислений будет для каждого набора данных, тогда вариант 2 хорош, если результат расчета является общим (набор данных 1 + набор данных 2), тогда вариант 1 лучше.

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

person Kelvin    schedule 03.09.2013