根据开始日期和日期查询设置我的“结束”/“开始”日期
首先感谢大家昨天的帮助。
我已经设法让我的报告正常工作(到目前为止),所以现在我需要在标题中显示日期段(从:到:)。以下是查询:
Declare @startdate datetime
Declare @enddate datetime
Declare @BeginningDate datetime
set @BeginningDate = '12-01-2011'
IF Month(@BeginningDate) < (Month(GETDATE())-1)--(YTD)
BEGIN
set @startdate = DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
set @enddate = dateadd(day, datediff(day, 0, getdate()), 0)
END
IF Month(@BeginningDate) = (Month(GETDATE())-1)--(MTD)
BEGIN
set @startdate = dateadd (mm,-1,
DATEADD(dd,-(DAY(DATEADD(mm,1,convert(varchar(10),getdate(),111)))-1),
DATEADD(mm,0,convert(varchar(10),getdate(),111))))--BEGINNING OF PRIOR MONTH
set @enddate =DATEADD(dd,-1,
DATEADD(mm,
DATEDIFF(m,0,convert(varchar(10),getdate(),111)),0))--END OF PRIOR MONTH
END
IF Month(@BeginningDate) = (Month(GETDATE()))--(Current Period)
BEGIN
set @startdate = dateadd(month, datediff(month, 0,
dateadd(day, datediff(day, 1, getdate()), 0)), 0)--BEGINNING OF CURRENT MONTH
set @enddate = dateadd(day,
datediff(day, 0, getdate()), 0)--THROUGH CURRENT MONTH (TODAY)
END
如果用户输入日期 11/27/2011
到 12-03-2011
作为搜索参数,那么我的标题应显示 FROM: 2011 年 11 月 1 日至:2011 年 11 月 30 日(MTD)
。例如,如果他们选择 12/01/2011
到 12/08/2011
,那么我只需要这些日期(当前期间)。如果用户输入 10/01/2011-12/8/2011
,则时间段将为 01/01/2011 到 12/8/2011 (YTD)
。
我如何在 SSRS 中将其设置为表达式?我是否需要根据这些输入创建数据集,然后调用参数?我已经使用一个日期时间范围完成了此操作,但从未使用过类似的存在多个时间范围问题的方法。
提前致谢!
更新:这就是我试图在 SSRS 表达式中完成的任务:
="FROM:"&iif(Month(Parameters!BeginningDate.Value < (Month(today()-1)) THEN (DateAdd("d",-DatePart(DateInterval.DayOfYear,Today(),0,0)+1,Today())).tostring("dd/MM/yyyy")+" "+"TO:today()"
如果用户选择的开始日期大于上个月(例如 10/1),则返回的日期应为 1/1/2011 到
12/16/2011
我希望这能澄清事情。
谢谢!
First of all, thanks everyone for helping yesterday.
I've managed to get my report working (so far) so now I need to show the date periods (FROM: TO:) in my header. Here is the query:
Declare @startdate datetime
Declare @enddate datetime
Declare @BeginningDate datetime
set @BeginningDate = '12-01-2011'
IF Month(@BeginningDate) < (Month(GETDATE())-1)--(YTD)
BEGIN
set @startdate = DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
set @enddate = dateadd(day, datediff(day, 0, getdate()), 0)
END
IF Month(@BeginningDate) = (Month(GETDATE())-1)--(MTD)
BEGIN
set @startdate = dateadd (mm,-1,
DATEADD(dd,-(DAY(DATEADD(mm,1,convert(varchar(10),getdate(),111)))-1),
DATEADD(mm,0,convert(varchar(10),getdate(),111))))--BEGINNING OF PRIOR MONTH
set @enddate =DATEADD(dd,-1,
DATEADD(mm,
DATEDIFF(m,0,convert(varchar(10),getdate(),111)),0))--END OF PRIOR MONTH
END
IF Month(@BeginningDate) = (Month(GETDATE()))--(Current Period)
BEGIN
set @startdate = dateadd(month, datediff(month, 0,
dateadd(day, datediff(day, 1, getdate()), 0)), 0)--BEGINNING OF CURRENT MONTH
set @enddate = dateadd(day,
datediff(day, 0, getdate()), 0)--THROUGH CURRENT MONTH (TODAY)
END
If the user inputs the dates 11/27/2011
to 12-03-2011
as a search parameter then my header should show FROM: 11/01/2011 TO:11/30/2011 (MTD)
. If they select, for example, 12/01/2011
to 12/08/2011
then I need just those dates(Current Period). If the user inputs 10/01/2011-12/8/2011
then the period would be from 01/01/2011 to 12/8/2011 (YTD)
.
How would I set this up in SSRS as an expression? Do I need to create a data set based on these inputs and then call a parameter? I've done this using one date time frame but never something like this where there's multiple time frame issues.
Thanks in advance!
UPDATE: This is what I'm trying to accomplish in my SSRS expression:
="FROM:"&iif(Month(Parameters!BeginningDate.Value < (Month(today()-1)) THEN (DateAdd("d",-DatePart(DateInterval.DayOfYear,Today(),0,0)+1,Today())).tostring("dd/MM/yyyy")+" "+"TO:today()"
If the user selects a beginning date greater than the previous month (e.g. 10/1) then the date returned should be 1/1/2011
to 12/16/2011
I hope this clarify's things.
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我之前发布过,您需要使用可以调用日期函数的数据集。看看您是否可以按照以下步骤操作:SQL Server:计算日期范围创造奇迹。具体请查看
For Reporting Services Folks
部分。对于您来说,这非常简单,如果他们选择 11/27/2011 并且您想返回 11/1/2011,您只需调用数据集,该数据集又调用函数month_start。这一切都在该线程中得到了详细记录并被广泛使用。
其要点是您在 RS 中需要此函数:
然后您需要每个函数的标量值函数:
现在报告服务的艰苦工作已经完成,请记住数据集可以是存储过程或直接表。因此,您只需创建一个存储过程:
并将该存储过程用作
数据集
。现在您可以使用所有这些不错的日期函数。因此,您现在可以转到参数部分并调用这些函数,如下所示:I posted this before, you need to make use of a dataset where you can call date functions. See if you can follow this: SQL Server: calculating date ranges it works wonders. Specifically look at the section that reads
For Reporting Services Folks
.For you it will be really simple, if they select 11/27/2011 and you want to return 11/1/2011 you just call the dataset which in turns calls the function month_start. It is all well documented in that thread and used extensively.
The jist of it is you need this function in RS:
Then you need the scalar valued functions for each one:
Now the hard work is done for reporting services remember a dataset can be a stored procedure or a direct table. So you would simply create a stored procedure:
And use this stored procedure as a
dataset
. So now you have access to all of these nice date functions. So you can now go to your parameters section and call these functions like so: