SSRS Условное суммирование - PullRequest
23 голосов
/ 18 января 2011

У меня есть отчет SSRS, который отображает несколько страниц строк.В каждом ряду есть поле «ТИП».В этом поле TYPE есть либо «M» для значения, либо «P» для значения.В конце отчета я хочу подвести итог всех ценовых значений для ТИПОВ "P".Я попробовал это, но он вызвал ошибку #Error:

=Sum(iif(Fields!TYPE.Value = "P",Fields!EXT_QTY.Value * Fields!PRICE.Value ,0))

, которая суммировала все строки

=iif(Fields!PART_TYPE.Value = "P" ,  Sum(Fields!EXT_QTY.Value * Fields!PRICE.Value ),  0 )

Я уверен, что это выполнимо.Есть идеи?Спасибо

Ответы [ 2 ]

34 голосов
/ 18 января 2011

Нашел ответ ....

=SUM(IIF(Fields!PART_TYPE.Value ="P",CDbl(Fields!EXT_QTY.Value * Fields!PRICE.Value), CDbl(0.0)))
14 голосов
/ 13 марта 2015

Сбой SUM из-за сравнения типов - вы не можете суммировать значения разных типов, будучи выражением (вероятно, Double) с 0, Integer. Ответ MikeTWebb делает явное преобразование типов, чтобы обойти эту ошибку. Это хорошо для этого конкретного примера, являющегося суммой, однако это не дает точного результата, если вы хотите получить среднее значение (равное Sum / Count) значений, где тип равен P. Это потому, что 0 является значением и быть включенным в вычисление усреднения, когда вы действительно хотите, чтобы эти значения были исключены из расчета.

Другой вариант - использовать Nothing вместо 0:

=Sum(IIF(Fields!TYPE.Value = "P", Fields!EXT_QTY.Value * Fields!PRICE.Value, Nothing))

Это решает ошибку сравнения типов без необходимости явного встраивания типов и является лучшим решением, когда вы используете агрегаты, в которых значение существует или нет, имеет значение для результата, например Average.

...