Ленивая оценка в SSRS - PullRequest
       26

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

4 голосов
/ 23 декабря 2008

Я использую 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 ]

2 голосов
/ 23 декабря 2008

К сожалению, поскольку 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

В свойстве Textbox Text expression:

=Code.GetMeanValue(Fields!Sum.Value, Fields!Count.Value)
1 голос
/ 13 июня 2014

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

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

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

1 голос
/ 05 марта 2010

Вот решение, которое всегда работало для меня: Как избежать ошибок деления на ноль .

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

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

1 голос
/ 16 января 2009

Попробуйте это:

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

...