SSRS日期范围参数

时间:2017-12-11 16:25:19

标签: sql-server reporting-services

我在SSRS 2016中有一份报告,其中包含一个名为startdate的日期字段的SP。我想创建一个参数,用户可以在两个范围之间进行选择:startdate> ='2017'或startdate< '2017年'。这似乎应该很简单,但我看不到找到一个简单的方法来做到这一点。

我尝试在SSRS中创建一个参数,我在其中选择“指定值”并手动添加这些值,但我得到一个错误,即“表达式引用参数”startdate“,这在参数集合中不存在。” / p>

我确信我可以通过创建具有这些日期的存储过程来创建它,但这似乎比需要更多的工作。

有谁知道更好的方法吗?

2 个答案:

答案 0 :(得分:0)

如果您希望参数有两个选项,0 - 2017年之前,1 - 2017之后,那么您应该创建一个Date参数,该参数有两个选项,在标签字段中的1/1/2017之前值字段中的0和标签字段中的1/1/17之后,值字段中的值为1。然后,在报告中,您只需根据1或0值过滤数据。

例如:

DECLARE @DateFilter INT = 1

    IF ( @DateFilter = 0 )
        BEGIN
            SELECT * FROM dbo.MyTable t
            WHERE t.DateFilter < '1/1/17'
        END

    IF ( @DateFilter = 1 )
        BEGIN
            SELECT * FROM dbo.MyTable t
            WHERE t.DateFilter >='1/1/17' 
        END

我不知道您为何会以这种方式过滤数据。我建议使用Larnu的建议,即您有两个参数,即开始日期和结束日期。否则,随着时间的推移,这可能会为第二个选项返回很多行。

答案 1 :(得分:0)

在SSRS中添加几个参数,例如FromDate和ToDate,并将其数据类型设置为日期/时间。 您可以使用DateAdd函数指定这些参数的默认值,并在下面给出样本:

今天:

=Today()

上周从今天开始:

=DateAdd(DateInterval.Day, -7,Today())

您可以按照如下所示的类似方式添加/减少年份,季度等。只需将数字更改为所需的长度

=DateAdd(DateInterval.Year,-1,Today())

=DateAdd(DateInterval.Quarter,-1,Today())

=DateAdd(DateInterval.Month,-1,Today())

=DateAdd(DateInterval.DayOfYear,-1,Today())

=DateAdd(DateInterval.WeekOfYear,-1,Today())

=DateAdd(DateInterval.WeekDay,-1,Today())

=DateAdd(DateInterval.Hour,-1,Today())

=DateAdd(DateInterval.Minute,-1,Today())

=DateAdd(DateInterval.Second,-1,Today())