2016-08-15 4 views
1

Я пытаюсь использовать пользовательскую функцию для определения значения для индикатора. Проблема в том, что поля, переданные функции, могут быть NULL. Я сделал тип параметра nullable, но тогда он не позволит мне делать какие-либо сравнения. Я не знаю, почему.SSRS Пользовательские функции и значения Null

Ошибка: «В строке 20 пользовательского кода есть ошибка: [BC30452] Оператор« < »не определен для типов« System.Nullable (Of Single) »и« System.Nullable (Of Single) ». «.

Public Function GetIndicator(ByVal HistBal As Nullable(of single),ByVal CurBal as NULLABLE(of single)) as integer 

Dim iReturn as integer 

if NOT HistBal.HasValue Then 
    iReturn =0 
else If HistBal< CurBal then 
    If (HistBal-CurBal)/HistBal <-.1 Then 
     iReturn= 2 'Green arrow 
    Else 
     iReturn= 4 'Up yellow 
    end if 
Else if HistBal=CurBal then 
    iReturn=0 'blank 
else 

    If (HistBal-CurBal)/HistBal <.1 Then 
     iReturn= 3 'Dn yellow 
    Else 
     iReturn= 1 'red arrow 
    end if 
End if 

return iReturn 

End Function 

UPDATE:

Код, который возвращает #ERROR:

Public Function GetIndicator(ByVal HistBal As Nullable(of single),ByVal CurBal as NULLABLE(of single)) as integer 

Dim iReturn as integer 

if Not HistBal.HasValue or Not CurBal.HasValue Then 
    iReturn =0 
else 
    iReturn= 1 
End if 

return iReturn 

End Function 

ответ

0

Operator '<' is not defined for types 'System.Nullable(Of Single)' and 'System.Nullable(Of Single)'.

Это так же, как говорится в сообщении: видимо System.Nullable(Of T) не определяет < оператора.

Вы уже проверяете, HistBal.HasValue. Просто проверьте, есть ли CurBal.HasValue и реализует логику, которая определяет, что возвращать при одном или обоих значениях a null, а затем отработайте HistBal.Value и CurBal.Value в ветвях, которые, как известно, имеют ненулевое значение для обоих.

If Not HistBal.HasValue Or Not CurBal.HasValue Then 
    Return 0 'presumably return 0 when either value is null   
End If 

If HistBal.Value < CurBal.Value Then 'work off the Single, not the nullable 
    '... 
+0

Спасибо. Никогда не использовал этот параметр Nullable. – user1612851

+0

Он компилируется, но я получаю #Error обратно из функции. Функция работала до того, как я сделал ее нулевым параметром. – user1612851

+0

Прогресс! Это '# Ошибка' - это другая проблема, связанная с другим кодом. Я не знаю, что вы сделали, или какой вклад вы даете. В настоящее время ваш код не проверяет значение 'CurBal.HasValue', если оно равно null, оно генерирует исключение и возвращает ошибку. –