【发布时间】:2015-01-06 14:30:04
【问题描述】:
我有一个输出到 Excel 文件的报告,数据库中的某些字段为空。
我正在尝试在单元格中使用以下 Iif 表达式过滤掉这些空值:
=Iif(
IsNothing(Fields!START_DATETIME.Value),
0,
Fields!START_DATETIME.Value
)
这不起作用,我在数据为空的单元格中得到“#VALUE”,以及有数据的单元格的时间值。
如果我使用相同的表达式而不使用表达式作为第三个参数:
=Iif(
IsNothing(Fields!START_DATETIME.Value),
0,
1
)
我得到1s 表中有日期,0s 没有任何内容。
很抱歉,如果这是重复的,我找不到任何适合我的东西...
编辑: 我正在使用 VisualStudio Professional 2013
更新
我为数据库中的每个条目得到的是:授权时间的日期时间,开始时间的另一个日期时间和停止时间的另一个日期时间时间>。 授权时间总是有一个条目,但开始和停止并不总是这样。
我已将日期和时间从各种日期时间拆分为如下列:
- 授权日期
- 授权时间
- 开始时间
- 停止时间
想法是,如果没有开始和停止时间,就使用授权时间
以下表达式放在开始时间列中。抱歉,我没有足够的代表来发布图片或超过 2 个链接。我已经把程序输出放在这张专辑里了:
在做:
=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))
)
输出有条目的开始时间和#VALUE! (null 或类似的) 当没有任何东西时。
然后做:
=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))
)
在开始时间中有条目的地方输出授权时间和#VALUE!什么都没有的时候。
我想不通。我了解 (1) 和 (3),但我需要 (2) 显示正确的开始时间,同时显示正确的授权时间不是。
更新 2
事实证明,Iif() 会评估每个条件,即使它没有被选中,遇到的任何错误都会继续传递。见cmets到Why isn't my iif statement evaluating true when the condition is correct?
为了解决这个问题,我做了:
=DateAdd(
DateInterval.Day,
693594,
TimeValue(
Iif(
Fields!START_DATETIME.Value is Nothing,
Fields!AUTH_DATETIME.Value,
Fields!START_DATETIME.Value
)
)
)
这似乎对我有用,并且应该是首先做到这一点的常识方式......
再次感谢你们的帮助。
【问题讨论】:
-
为什么要在包含 DATETIME 的列中显示“0”?它代表什么?您不需要 NULL、空字符串或一些默认日期时间吗?
-
如果你想像“不显示它们”那样过滤掉它们,你不能在你的查询中这样做吗?
-
@Jeroen 除了#VALUE 之外的任何东西!很好,那只是尝试一下,我可能会留空。
-
@Tino 我可以试试,但是我还没有触及报表设计器之外的查询。我想知道为什么 Iif 不起作用。谢谢你们的意见。