В некоторых случаях выражение служб Reporting Services выдает ошибку - PullRequest
2 голосов
/ 17 марта 2011

Я получаю ошибку при вычислении средних значений в итоговой строке отчета. Мое выражение выглядит так:

=IIF(SUM(Fields!column3.Value) > 0, Format(DateAdd("s", (SUM(Fields!column4.Value) / SUM(Fields!column3.Value)), "00:00:00"), "HH:mm:ss"), "-")

(простите за супер длинную линию)

Выражение отлично работает, когда данные выглядят примерно так:

8311    87  0   0
8311    41  0   0
8311    80  0   0
8311    136   1   136

Идея состоит в том, что столбец 3 равен 1, если столбец 2 больше 120, в противном случае он равен 0. Столбец 4 имеет значение больше 0, только если столбец 2 больше 120, и в этом случае это значение равно столбцу 2. Таким образом, для итоговой строки этой группы в службах отчетов я могу определить общее количество строк, превышающее 120 (используя SUM в столбце 3). Таким же образом, я могу определить общее число значений в столбце 2, которые больше 120, суммируя столбец 4. Оттуда должно быть просто деление столбца 4 на столбец 3, чтобы определить среднее значение столбца 2 значения более 120.

Как только я получу среднее значение, я хочу преобразовать его во временную строку (например, «00:02:16»). Если значения нет (то есть в группе нет значений столбца 2 свыше 120, я хочу отобразить «-».

Эта логика работает в случаях, когда столбец 2 имеет значения более 120. Однако, когда столбцы 3 и 4 равны 0, как показано ниже:

8310    108 0   0

выражение выдает страшный результат #Error при запуске отчета. Я предполагаю, что это ошибка деления на ноль, поэтому я бросил IIF в выражение, чтобы проверить, что знаменатель в моем среднем расчете равен> 0.

К сожалению, # Ошибка сохраняется для тех групп, которые имеют 0 в столбцах 3 и 4. Чего мне не хватает?

1 Ответ

4 голосов
/ 18 марта 2011

IIF в SSRS такой же, как в Visual Basic IIF: он оценивает все ветви, и если какая-либо часть генерирует ошибку, вся функция выдает ошибку.

Два общих обходных пути:

  • Использовать встроенный код в отчете,
  • Используйте второй ИИФ, который спасет вашу функцию от деления на ноль.

Второй вариант: Заменить:

=IIF(SUM(Fields!column3.Value) > 0, Format(DateAdd("s", (SUM(Fields!column4.Value) / SUM(Fields!column3.Value)), "00:00:00"), "HH:mm:ss"), "-")

с

=IIF(SUM(Fields!column3.Value) > 0, Format(DateAdd("s", (SUM(Fields!column4.Value) / IIF(SUM(Fields!column3.Value)>0,SUM(Fields!column3.Value),1)), "00:00:00"), "HH:mm:ss"), "-")

(Я думаю, что получил правильное количество паренов ...)

Также много примеров встроенного кода для обработки деления на ноль, вот один. http://social.msdn.microsoft.com/Forums/is/sqlreportingservices/thread/b8e0730b-da60-49a8-8613-2309ff1a2c90

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...