SSRS: как сделать сумму, включающую только последний элемент в группе - PullRequest
2 голосов
/ 06 мая 2009

У меня есть файл отчета rdlc, и я пытаюсь составить сумму, которая может включать только последний элемент в каждой группе. У меня есть таблица вроде этого:

Place                 = ?                              (Group header 1)
    User              = ?                              (Group header 2)
        Date          =Last(Fields!Number.Value)       (Group header 3)
            Number    =Fields!Number.Value             (Detail row)

Итак, другими словами, в User я хочу получить сумму Date ... если бы это имело смысл ...

Строки Number содержат много чисел на Date. Но Date показывает только последнее число за этот день, потому что остальные не учитываются (но должны отображаться). В User я хочу суммировать эти последние числа за все даты для этого пользователя. И то же самое с Place (который будет суммой каждого последнего числа за каждый день для каждого пользователя).

Может ли кто-нибудь помочь мне с этим? Я попробовал очевидное (по крайней мере для меня) =Sum(Last(Fields!Number.Value)), но (также пытался указать группу в этих функциях, но ничего не изменилось), когда я пытаюсь скомпилировать, я получаю сообщение об ошибке:

Выражение Value для текстового поля 'numberTextbox' содержит агрегатную функцию (или функции RunningValue или RowNumber) в аргументе другой агрегатной функции (или RunningValue). Агрегатные функции не могут быть вложены в другие агрегатные функции.

Что, мне кажется, имеет смысл ... но как мне тогда это сделать?


Обновление: Я решил проблему, добавив еще один столбец и скопировав последние цифры в этот столбец. Таким образом, я могу отобразить все числа и выполнить суммирование в столбце, который содержит только те, которые будут в сумме. Мне все еще очень любопытно, есть ли у кого-нибудь решение моей первоначальной проблемы ... так что, пожалуйста, напишите ответ, если у вас есть!

Ответы [ 3 ]

0 голосов
/ 06 мая 2009

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

0 голосов
/ 21 декабря 2011

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

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

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

Вот блог с описанием, объясняющим методику в SSRS 2008.

Это также дает некоторое представление о том, как вы можете попытаться сделать эту работу в SRSS 2005, но опять же, очевидно, это не так надежно.

0 голосов
/ 06 мая 2009

Не уверен, что я точно понимаю, что вы пытаетесь сделать. Может быть что-то вроде = Last (Fields! Number.Value, "Группа 1") + Last (Fields! Number.Value, "Group 2") + Last (вместо Fields! Number.Value, "Group 3") вместо суммы функционировать?

...