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

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

Пример:

Первая страница

Name            | Price1 | Price2 | Price3 | Price4   -table header

Record 1        |   10   |   15   |   15   |   20

Record 2        |   15   |   15   |   15   |   15

Total 2 records |   25   |   30   |   30   |   35     -table footer for page 1

Вторая страница

Name             | Price1 | Price2 | Price3 | Price4  -starting 2. page, table header

Record 3         |   20   |   30   |   30   |   30

Total 1 records  |   20   |   30   |   30   |   30    -end of the table

Grand T. (3 rec) |   45   |   60   |   60   |   65    -end of the table

Я помещаю 2 записи для первой страницы и 1 для второй страницы, это просто для демонстрации того, что я хочу. Я сделал все возможное, чтобы это выглядело ясно.


person SmT    schedule 05.10.2012    source источник
comment
Печатается ли на странице предсказуемое количество строк с ценами или оно может варьироваться?   -  person Ann L.    schedule 15.10.2012
comment
@AnnL.I не включаю свойство автоматического увеличения, поэтому все страницы должны содержать фиксированное количество строк, кроме последней страницы.   -  person SmT    schedule 16.10.2012
comment
Я отредактировал ваш заголовок. См. Должны ли вопросы включать «теги» в свои заголовки?, если нет единого мнения, не следует.   -  person John Saunders    schedule 16.10.2012


Ответы (1)


Я вижу два возможных способа сделать это.

Поскольку вы говорите, что количество строк на странице предсказуемо (скажем, для простоты построения примера их 25), вы можете сделать следующее:

В своем запросе назначьте каждой строке последовательный порядковый номер. Вы можете сделать это следующим образом:

WITH Cte
AS (
    SELECT Name,
           Price1,
           Price2,
           Price3,
           Price4,
           RecordNumber = Row_Number() OVER (ORDER BY [whatever])
    FROM   [tables]
)
SELECT    Name,
          Price1,
          [etc]
          RowGroup = Floor((RecordNumber * 1.0) / 25 )
FROM      Cte
ORDER BY  RecordNumber

Затем в своем отчете сгруппируйте по RowGroup и подведите промежуточные итоги по строкам.

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

(Вы также можете сделать это с помощью функции RowNumber() в SSRS без изменения базового запроса, но существует множество правил о том, какие функции вы можете использовать и когда, и я не знаю, будет ли это разрешено. )

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

person Ann L.    schedule 16.10.2012
comment
Спасибо, это приемлемый ответ, кстати, вы можете поменять местами RecordNumber as ... на ... as RecordNumber, просто небольшая синтаксическая ошибка, но способ умный. Если вы имеете в виду что-то отличное от раздела «Код» в свойствах отчета под report code-behind, да, я хотел бы узнать о них. - person SmT; 17.10.2012
comment
@SmT Спасибо за исправление! Да, я имел в виду раздел «Код», когда говорил о коде программной части. - person Ann L.; 17.10.2012