SQL Report Builder: как использовать функциональность предложения WHERE внутри SSRS? - PullRequest
0 голосов
/ 07 октября 2019

Мне нужно иметь возможность сделать расчет, который получает значение центов за галлон. Это достигается просто с помощью PRICE / GALLONS = CPG.

Поскольку я, очевидно, не могу использовать фактическое предложение WHERE в функции выражения отчетов, самое близкое, что я могу найти, - это использовать функцию IIF (). Однако я не совсем понимаю, что хочу увидеть.

Вот выражение:

=IIF(Fields!gallons.Value=0,"-", Fields!GP.Value/Fields!gallons.Value)

Как видите, отчет работает для значений, для которых значение галлонов не равно нулю. Но когда дело доходит до того, где являются нулями, я получаю страшную #Error.

Как я мог бы вместо этого пойти на обработку нулей? Может быть важно отметить, что я не могу отфильтровать нули в своем запросе SQL заранее, потому что для других вычислений должны быть соответствующие столбцы.

enter image description here

Ответы [ 2 ]

1 голос
/ 07 октября 2019

SSRS тупой таким образом. В любом случае вы должны исправить деление на ноль:

=IIF(Fields!gallons.Value = 0,"-",
      Fields!GP.Value / IIF(Fields!gallons.Value = 0 , 1, Fields!gallons.Value))
1 голос
/ 07 октября 2019

SSRS пытается оценить обе стороны условия iif. Поэтому, если числитель или знаменатель равен 0, вы получите ошибку!

Вам нужно использовать функцию для возврата 0, если одно из значений равно 0.

Перейдите в свойства отчета -> Код, а затем вставьте следующий код в его раздел пользовательского кода

    '  Fix for divide by zero problem in VB

   Public Shared Function VarPercent(ByVal Standard As Decimal, ByVal Actual As Decimal) As Decimal
If Actual = 0 Then
Return 0
End If
If Standard = 0 Then
Return 0
End If
Return (Standard / Actual )
End Function

Нет в вашем отчете, где бы вы ни делили два значения, используйте следующее:

=Code.VarPercent(Fields!GP.Value,Fields!gallons.Value)

Report Properties

...