Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 SQL 2005 Reporting Services如果检查空值_Sql Server 2005_Reporting Services_Reportingservices 2005 - Fatal编程技术网

Sql server 2005 SQL 2005 Reporting Services如果检查空值

Sql server 2005 SQL 2005 Reporting Services如果检查空值,sql-server-2005,reporting-services,reportingservices-2005,Sql Server 2005,Reporting Services,Reportingservices 2005,在SSRS2005中,我有一个表,其中有一个数据集链接到它。 我想检查一个字段的值是否为null,如果它不是null,则格式化数据以确保它有一个小数位,并添加一个%符号等 这是我在字段/列上的表达式: =iif(IsNothing(Fields!COL01.Value), "" ,Format(CDbl(Trim(Replace(Fields!COL01.Value, "%", ""))), "N1") + "%") 但是,当数据为空时,它似乎不起作用(如果有数据,它就可以正常工作)。报告显示

在SSRS2005中,我有一个表,其中有一个数据集链接到它。 我想检查一个字段的值是否为null,如果它不是null,则格式化数据以确保它有一个小数位,并添加一个%符号等

这是我在字段/列上的表达式:

=iif(IsNothing(Fields!COL01.Value), "" ,Format(CDbl(Trim(Replace(Fields!COL01.Value, "%", ""))), "N1") + "%")
但是,当数据为空时,它似乎不起作用(如果有数据,它就可以正常工作)。报告显示,但字段显示为#ERROR


我认为这是为了检查两个案例是否都有效,即使它是空的。我试图使用if语句来避免形成null。

尝试使用IsDBNull

您可以在SQL查询中检查null,而不是在报表级别。与IsNull(fieldname,0)一样,只需设置%的格式即可。当然,您的数据来自SQL Server。

在查询数据集时,我会尝试使用ISNULL(fieldname,0)


如果您连接到的数据源没有ISNULL运算符(即Oracle),请尝试使用COALESCE(fieldname,0),iSeries、Oracle和sql都支持该运算符。

SSRS表达式使用Visual Basic进行计算,Visual Basic通常对表达式(例如IIf)中的所有操作数进行完整(即不是短路)计算(cond,truexp,falsexp),除了cond之外,truexp和falsexp都会被计算,并且可以抛出,而不管cond的值是多少

由于VB.NET 2.0中似乎没有合并函数,因此您可能希望在报告的代码部分添加一个合并函数,例如,对于从Oracle返回的Decimal

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)。

当我遇到这个问题时,我使用了一个switch语句,它按照编写的顺序计算条件,在我看来,它似乎可以同时绕过正在计算的iif语句的两侧


Ian

不幸的是,它似乎没有什么区别。即使我这样做:=iif(真的,“你好世界”,格式(CDbl(Trim(替换(Fields!COL01.Value,“%”,“),“N1”)+“%”)看起来不管怎样,它都会测试出错误的情况。如果有数据,它会显示Hello World,但如果没有,它会显示#ERROR。谢谢,我认为这是正确的想法,但我实际上并没有使用SQL Server作为数据源。我会提到这一点,但我没有想到在我的SQL查询中修复它。谢谢,我在谷歌上搜索的是什么我的错,在ssrs中我刚刚做了一些进一步的测试,似乎所有的语句都经过了评估,因此给出了错误