Службы отчетов SQL 2005, если проверка на нулевое значение - PullRequest
5 голосов
/ 07 мая 2009

В SSRS 2005 у меня есть таблица, с которой связан набор данных. Я хочу проверить, является ли значение поля нулевым, и если оно не равно нулю, отформатируйте данные, чтобы убедиться, что они имеют один десятичный знак, добавьте знак% и т. Д.

Это мое выражение в поле / столбце:

=iif(IsNothing(Fields!COL01.Value), "" ,Format(CDbl(Trim(Replace(Fields!COL01.Value, "%", ""))), "N1") + "%")

Кажется, он не работает, когда данные нулевые (работает нормально, если есть данные). Отчет отображается, но поле отображается как # ОШИБКА.

Я думаю, что это проверка, чтобы убедиться, что оба случая действительны, хотя его ноль. Я пытаюсь использовать оператор if, чтобы избежать формирования нулевого значения.

Ответы [ 5 ]

4 голосов
/ 08 июня 2009

Выражения SSRS оцениваются с использованием Visual Basic, который обычно выполняет полную (т.е. не короткое замыкание) оценку всех операндов в выражении, например, в IIf (cond, truexp, falsexp), кроме cond, и truexp, и falsexp оцениваются и могут выдавать независимо от значения cond.

Поскольку в VB.NET 2.0 нет функции слияния, вы можете добавить ее в раздел «Код» отчета, например. для десятичной как возвращено из Oracle

Function Coalesce(fieldValue As Object, defaultValue As Decimal) As Decimal
  If IsDBNull(fieldValue) OrElse IsNothing(fieldValue) Then
    Coalesce = defaultValue
  Else
    Coalesce = CDec(fieldValue) 
  End If
End Function

Можно также определить обобщенную функцию, например, Coalesce (Of TResult).

3 голосов
/ 07 мая 2009

Я бы попытался использовать ISNULL (fieldname, 0) при запросе вашего набора данных.

Если вы подключаетесь к источнику данных без оператора ISNULL (например, Oracle), попробуйте использовать COALESCE (fieldname, 0), который поддерживаются всеми iSeries, oracle и sql.

2 голосов
/ 07 мая 2009

Попробуйте использовать IsDBNull

1 голос
/ 07 мая 2009

Вы можете проверить нулевое значение в запросе SQL, а не на уровне отчета. Как IsNull (fieldname, 0), тогда просто отформатируйте для%. При условии, конечно, ваши данные с SQL Server.

0 голосов
/ 10 июня 2013

Когда у меня возникла эта проблема, я использовал оператор switch, он оценивает условия в том порядке, в котором он написан, и, как мне кажется, обходит обе стороны оператора iif, вычисляемого одновременно.

Ian

...