SSRS 时间表达式过滤器不适用于参数布尔值

SSRS Time expression filter not working with Parameter boolean value

背景:

尝试在数据集中实现过滤,如果用户从参数中选择日班,则 06:00:00 和 18:00:00 之间的任何数据条目都会在报表中过滤。此外,18:00:00 和 06:00:00 之间的任何数据条目都会反映在夜班

的报告中

进程:

我有一个参数有两个布尔值“True”和“False”。我在可用值参数 window 选项中将这些值标记为“白班”和“夜班”。默认值为真。

在数据集查询中将日期时间转换为时间

SELECT
CONVERT(time, SWITCHOFFSET(CONVERT(datetimeoffset, LastModified),DATENAME(TzOffset, SYSDATETIMEOFFSET()))) as ShiftTime
FROM table abc

过滤表达式:=Fields!ShiftTime.Value

接线员:in

值:=IIf( ( TimeValue(Fields!ShiftTime.Value) >= "06:00:00" And TimeValue(Fields!ShiftTime.Value) <= "18:00:00" ) , Parameters!ShiftType.Value(0), Parameters!ShiftType.Value(1) )

Problem: [BC30516] Overload resolution failed because no accessible 'IIf' accepts this number of arguments

不确定哪一部分出了问题,我认为是数据类型但不确定。

我不确定您使用的是哪种报表设计器,但是使用 Visual Studio 的报表设计器扩展给我带来了截然不同的错误。

它在输出 window 和构建时的表达式 window 中都给出了错误。

首先调试它,将它作为一个列添加到您的报告中,然后再尝试将其作为过滤器实现。

然后查看函数的相关文档。原来 TimeValue 函数接受一个字符串,而不是 DateTime,returns 一个日期时间。

那么,您将无法从参数中访问可用的参数值,您只能访问选定的参数值。因此,而不是 Parameters!ShiftType.Value(0) (它下面有一条红线)你应该只 true (或 false 取决于你的逻辑是哪种方式)即参数的值。

最后,我不知道 SSRS 从字符串到时间的隐式转换是做什么的,所以我会进行显式时间比较而不是字符串比较。鉴于我们知道 TimeValue returns 具有最小日期值和时间分量的 DateTime,我们可以计算 day/night shift 所需的限制。

以下是对我有用的:

=IIf(TimeValue(Fields!ShiftTime.Value.ToString()) >= DateTime.MinValue.AddHours(6) And TimeValue(Fields!ShiftTime.Value.ToString()) <= DateTime.MinValue.AddHours(18), true, false)

实际上重新访问它,这太复杂了,您已经返回了一个 time 值,我们可以直接将其与

进行比较
=IIf(Fields!ShiftTime.Value >= new TimeSpan(6,0,0) And Fields!ShiftTime.Value <= new TimeSpan(18,0,0), true, false)

然后你的过滤器应该是:

过滤表达式:{如上图}

接线员:=

值:=参数!ShiftType.Value

注意:当你说“介于”时,我不知道是否打算将早上 6 点和下午 6 点都包括在白班 window 中,但我没有修改你在这方面的逻辑。