СУММА SSRS 2008 с использованием области видимости и рекурсивной опции для свертывания значений

#sql-server #recursion #reporting-services #ssrs-2008

#sql-server #рекурсия #службы отчетов #ssrs-2008

Вопрос:

Рассмотрим эти данные (6 строк и 1 столбец на данный момент)

 ;with cols as
(
 SELECT 1 colID, 'C1' col
 --UNION SELECT 2, 'C2' 
)
, rows as
(
 SELECT 1 RowID, 'R1' row, null ParentID
 UNION SELECT 2, 'R2', 1
 UNION SELECT 3, 'R3', 2 
 UNION SELECT 4, 'R4', 2 
 UNION SELECT 5, 'R5', 1 
 UNION SELECT 6, 'R6', 1 
)
,data
AS
(
 SELECT 3 RowID, 1 as Amount
 UNION SELECT 4 RowID, 2 as Amount
)
SELECT r.RowID, r.row, c.colID, c.col, d.Amount, r.ParentID
FROM rows r 
CROSS JOIN cols c
LEFT JOIN data d on d.RowID = r.RowID
  

введите описание изображения здесь

Я применяю это к элементу управления matrix, используя следующий макет, и получаю результат, как показано. Обратите внимание, что суммы не сворачиваются в родительские строки. Пока все в порядке.

введите описание изображения здесь

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

 =Sum(Fields!Amount.Value, "RowGroup", recursive)
  

Теперь это дает мне именно то, что я хочу, со значениями, переходящими к их родительским строкам:

введите описание изображения здесь

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

введите описание изображения здесь

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

Любые рекомендации были бы с благодарностью приняты, поскольку это поставило меня в тупик.

Спасибо

Ответ №1:

На самом деле это невозможно из-за необходимости просматривать как область группы строк, так и область группы столбцов..

Я потратил много времени на поиск ответа.. Для тех, кто еще ищет. вот несколько лучших объяснений с других форумов:

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/55c55aad-4755-4da5-afce-94d16c9e201d/cannot-perform-a-correct-recursive-sum-in-a-tablix?forum=sqlreportingservices

К сожалению, описанный вами сценарий пока не поддерживается (как 2008, так и 2005), поскольку он не может выполнять рекурсивную сумму в двух областях в матрице. Если вы замените выражение на SUM(Поля!Сумма.Значение, «ИМЯ», рекурсивное), вы получите рекурсивный итог, но итоговая сумма будет игнорировать группу monthindex. На самом деле, вы хотите рекурсивно суммировать как для групп NAME, так и для MonthIndex, однако вы не можете написать выражение, подобное этому: SUM(Поля!Сумма.Значение, «ИМЯ» и MonthIndex, рекурсивный). Верно? Итак, вообще говоря, в матрице, когда вы пишете выражение, подобное этому: SUM(Поля!Сумма.Значение) Сумма будет суммироваться в области двух GROUPNAME и MonthIndex, и если вы хотите указать область видимости, вам нужно указать только одну область. И, к сожалению, рекурсивная сумма должна указывать область, а сценарий, который вы описали, должен указывать две области

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/9d7f36bc-73d6-4f19-a306-0b84321e6feb/calculating-the-sum-on-a-hierarchy-with-multiple-grouping-columns?форум=sqlreportingservices