我在SSRS 2016中有一份报告,其中包含一个名为startdate的日期字段的SP。我想创建一个参数,用户可以在两个范围之间进行选择:startdate> ='2017'或startdate< '2017年'。这似乎应该很简单,但我看不到找到一个简单的方法来做到这一点。
我尝试在SSRS中创建一个参数,我在其中选择“指定值”并手动添加这些值,但我得到一个错误,即“表达式引用参数”startdate“,这在参数集合中不存在。” / p>
我确信我可以通过创建具有这些日期的存储过程来创建它,但这似乎比需要更多的工作。
有谁知道更好的方法吗?
答案 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())