SSRS时间表达式筛选器无法使用参数布尔值



背景:

试图在数据集中实现筛选,如果用户从参数中选择Day-shift,则06:00:00到18:00:00之间的任何数据条目都将在报告中进行筛选。此外,18:00:00至06:00:00之间的任何数据输入都会反映在夜班的报告中

流程:

我得到了一个具有2个布尔值的参数"0";真"以及";错误";。我已经将这些值标记为";白班;以及";夜班";在可用值"参数"窗口选项中。默认值为true。

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

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

问题:[BC30516]过载解决方案失败,因为无法访问"IIf"接受此数量的参数

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

我在上构建的解决方案

我不确定您使用的是什么报表设计器,但使用Visual Studio的报表设计器扩展会给我带来非常不同的错误。

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

首先要调试它,请将它作为列添加到报告中,然后再尝试将其实现为筛选器。

然后检查功能的相关文档。事实证明,TimeValue函数接受一个字符串,而不是DateTime,并返回一个DateTime。

然后,您无法从参数中访问可用的参数值,只能访问选定的参数值。因此,您应该只使用true(或false,具体取决于您的逻辑(,而不是Parameters!ShiftType.Value(0)(下面有一条红线(,即参数的值。

最后,我不知道SSRS从字符串到时间的隐式转换是什么,所以我会进行显式时间比较,而不是字符串比较。假设我们知道TimeValue返回具有最小日期值和时间分量的DateTime,我们可以计算昼夜轮班所需的限制。

以下是对我有效的方法:

=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点都包括在白班窗口内,但我没有修改你在这方面的逻辑。

相关内容

最新更新