Ленивая оценка в SSRS

Я использую SSRS 2005 для создания отчета, а один из столбцов в моем отчете - простой средний расчет. Я не хочу делиться на ноль, поэтому для значения текстового поля я поставил:

=Switch(Fields!Count.Value=0,0,Fields!Count.Value>0,Fields!Sum.Value/Fields!Count.Value)

Это все еще оценивает второе выражение.

И так:

=IIF(Fields!Count.Value=0,0,Fields!Sum.Value/Fields!Count.Value)

Я не хочу, чтобы в моем отчете отображались ошибки. Как я могу решить эту проблему?

4 ответа

К сожалению, поскольку IIF на самом деле просто функция, все аргументы оцениваются до того, как функция вызвана (в результате ваше деление на ноль).

Одним из способов внедрения сложной логики в выражение является включение функции в отчет. Вы можете написать функцию VB, чтобы вернуть все, что вам нравится, на вкладке "Код" свойств отчета.

Public Function GetMeanValue(ByVal Sum as Decimal, ByVal Count As Int) As Decimal
 'your logic in plain old vb syntax here
End Function

В текстовом выражении Text выражение:

=Code.GetMeanValue(Fields!Sum.Value, Fields!Count.Value)


Вот решение, которое всегда срабатывало для меня: Предотвращение деления на нулевые ошибки.

Это утомительно, если в отчете слишком много делений. Я предпочитаю некоторый код vb для деления и деления на ноль. Не уверен, что слишком много кода vb снизит производительность отчета.

Вот как это сделать с vb


При проверке нулей я всегда отрицаю выражение следующим образом:

=IIF(Fields!Count.Value<>0,Fields!Sum.Value/Fields!Count.Value,0)

Это дает дополнительное преимущество в том, чтобы избежать деления в случае, если поле Count пустое/пустое.


Попробуйте следующее:

=IIf(Fields!Count.Value = 0, 0, Fields!Sum.Value / IIf(Fields!Count.Value = 0, 1, Fields!Count.Value))

licensed under cc by-sa 3.0 with attribution.