Reporting services 当错误部分包含表达式时,SSRS Iif始终为真
我有一个输出到Excel文件的报告,数据库中的一些字段是空的 我试图在单元格中使用以下Iif表达式过滤掉这些空值:Reporting services 当错误部分包含表达式时,SSRS Iif始终为真,reporting-services,iif,Reporting Services,Iif,我有一个输出到Excel文件的报告,数据库中的一些字段是空的 我试图在单元格中使用以下Iif表达式过滤掉这些空值: =Iif( IsNothing(Fields!START_DATETIME.Value), 0, Fields!START_DATETIME.Value ) 这不起作用,我在数据为空的单元格中得到“#VALUE”,在有数据的单元格中得到时间值 如果我使用相同的表达式,但没有表达式作为第三个参数: =Iif( IsNothing(Fields!STA
=Iif(
IsNothing(Fields!START_DATETIME.Value),
0,
Fields!START_DATETIME.Value
)
这不起作用,我在数据为空的单元格中得到“#VALUE
”,在有数据的单元格中得到时间值
如果我使用相同的表达式,但没有表达式作为第三个参数:
=Iif(
IsNothing(Fields!START_DATETIME.Value),
0,
1
)
我得到1
s,其中表中有日期,而0
s中没有日期
很抱歉,如果这是一个副本,我找不到任何适合我的
编辑:
我正在使用VisualStudio Professional 2013
更新
对于数据库中的每个条目,我得到的是:一个datetime表示授权时间,另一个表示开始时间,另一个表示停止时间。授权时间总是有一个条目,但启动和停止并不总是有条目
我将不同日期时间中的日期和超时拆分为如下列:
- 授权日期
- 授权时间
- 开始时间
- 停止时间
=Iif(Fields!START_DATETIME.Value is Nothing,
DateAdd(DateInterval.Day,693594,TimeValue(Fields!AUTH_DATETIME.Value)),
DateAdd(DateInterval.Day,693594,TimeValue(Fields!AUTH_DATETIME.Value))
)
输出授权时间,以便正常工作
但是,要做到:
=Iif(Fields!START_DATETIME.Value is Nothing,
DateAdd(DateInterval.Day,693594,TimeValue(Fields!AUTH_DATETIME.Value)),
DateAdd(DateInterval.Day,693594,TimeValue(Fields!START_DATETIME.Value))
)
输出有条目的开始时间和#值!(空的或类似的)当没有任何东西的时候
并且做:
=Iif(Fields!START_DATETIME.Value is Nothing,
DateAdd(DateInterval.Day,693594,TimeValue(Fields!START_DATETIME.Value)),
DateAdd(DateInterval.Day,693594,TimeValue(Fields!AUTH_DATETIME.Value))
)
输出开始时间中有条目的授权时间和#值!当什么都没有的时候
我想不出来。我理解(1)和(3),但我需要的是(2)在有开始时间时显示正确的开始时间,在没有开始时间时显示授权时间
更新2
结果表明,即使未选择Iif()也会对每个条件进行求值,遇到的任何错误都会被传递。见对的评论
为了解决这个问题,我做了:
=DateAdd(
DateInterval.Day,
693594,
TimeValue(
Iif(
Fields!START_DATETIME.Value is Nothing,
Fields!AUTH_DATETIME.Value,
Fields!START_DATETIME.Value
)
)
)
这似乎对我有用,而且应该是一开始做这件事的常识性方法
再次感谢大家的帮助。Excel将根据前几个单元格猜测列的类型。如果其中有典型的DATETIME
值,它会猜测该列是日期列,并且会在与类型不匹配的值(如“0”)上出现“#VALUE!
”错误
您应该问问自己,对于空值,您希望在Excel中显示什么:
- 如果您只需要一个空单元格,则完全不要使用表达式。只要
将空值呈现为空单元格字段!START\u DATETIME.Value
- 如果您想要一个“基线”日期时间,请确保使用它而不是“0”。最简单的方法可能是在您的查询中使用类似于
ISNULL(START\u datetime,GETDATE())
- 如果确实需要“0”,请确保它按顺序出现在前几个单元格之一。Excel将看到“0”,而不会将列类型设置为日期/时间
Nothing
(null)作为Iif()表达式的真实部分时,会将code>放在那里。@user111395当START\u DATETIME
为null
时,您不需要Iif
,因为它已经是null
,正如@Jeroen所说的那样,只需使用=字段!START_DATETIME.Value
作为单元格值表达式+1@Jeroen,这是一个很好的解释。@ChrisLätta可以,但是Excel不知道如何从这个输出中格式化为日期或时间。我需要一段时间才能使用Excel中的筛选和排序选项。这几乎是一个新问题,但我尝试使用DateAdd(DateInterval.Day,693594,TimeValue(Fields!START\u DATETIME.Value))
。如果不可能的话,我将不得不尝试研究其他一些选项,比如宏。再次感谢您的帮助。如果您希望在start\u DATETIME
为Null
时使用较低的常量开始日期,请按照@Jeroen在第二个要点中的建议,在表达式中设置一个实际日期(而不是0),如下所示:=IIF(IsNothing(Fields!start\u DATETIME.Value),CDate(“1900-01-01”),Fields!start\u DATETIME.Value)