Thought I'd help some folks with rs and dates..here is some scalar valued functions:CREATE FUNCTION [dbo].[get_date_only] (@date datetime)RETURNS datetime ASBEGIN RETURN dateadd(day, DateDiff(day, 0, GetDate()), 0)ENDCREATE FUNCTION [dbo].[get_month_end] (@date datetime)RETURNS datetime ASBEGIN RETURN dateadd(ms, -3, dateadd (m,datediff(m,0, dateadd(m,1,@date)),0))ENDCREATE FUNCTION [dbo].[get_month_start] (@date datetime)RETURNS datetime ASBEGIN RETURN dateadd(m,datediff(m,0, @date),0) ENDCREATE FUNCTION [dbo].[get_today_end] (@today datetime)RETURNS datetime ASBEGIN return dateadd(ms, -3, datediff(d,0,dateadd(d,1,@today)))ENDCREATE FUNCTION [dbo].[get_today_noon](@date datetime)RETURNS datetimeBEGIN RETURN DATEADD(hh, 12, DATEADD(d,DATEDIFF(d,0, @date),0))ENDCREATE FUNCTION [dbo].[get_today_start] (@today datetime)RETURNS datetime ASBEGIN return dateadd(day, 0, datediff(d,0,@today))ENDCREATE FUNCTION [dbo].[get_tomorrow_noon](@date datetime)RETURNS datetimeBEGIN RETURN DATEADD(hh, 12, DATEADD(d,DATEDIFF(d,-1, @date),0))ENDCREATE FUNCTION [dbo].[get_week_end] (@date datetime)RETURNS datetime ASBEGIN return dateadd(yyyy, datepart(yyyy, dateadd(weekday,7-datepart(weekday, @date),@date))-1900, 0) + dateadd(ms, -3, dateadd(dy, datepart(dy, dateadd(weekday,7-datepart(weekday, @date),@date)),0) )ENDCREATE FUNCTION [dbo].[get_week_start] (@date datetime)RETURNS datetime ASBEGIN return dateadd(yyyy, datepart(yyyy, dateadd(weekday,1-datepart(weekday, @date),@date))-1900, 0) + dateadd(dy, datepart(dy, dateadd(weekday,1-datepart(weekday, @date),@date))-1,0)ENDCREATE FUNCTION [dbo].[get_weekday_end] (@weekday tinyint, @date datetime)RETURNS datetime ASBEGIN return dateadd(yyyy, datepart(yyyy, dateadd(weekday,@weekday- datepart(weekday, @date),@date))-1900, 0) + dateadd(ms, -3, dateadd(dy, datepart(dy, dateadd(weekday,@weekday-datepart(weekday, @date), @date)),0) )ENDCREATE FUNCTION [dbo].[get_weekday_start] (@weekday tinyint, @date datetime)RETURNS datetime ASBEGIN return dateadd(yyyy, datepart(yyyy, dateadd(weekday,@weekday- datepart(weekday, @date),@date))-1900, 0) + dateadd(dy, datepart(dy, dateadd(weekday,@weekday-datepart(weekday, @date), @date))-1,0)ENDCREATE FUNCTION [dbo].[get_year_start] (@date datetime)RETURNS datetime ASBEGIN RETURN DATEADD(year,DATEDIFF(year,0, @date),0)ENDCREATE FUNCTION [dbo].[get_yesterday_end] (@today datetime)RETURNS datetime ASBEGIN return dateadd(ms, -3, datediff(d,0,@today))ENDCREATE FUNCTION [dbo].[get_yesterday_start] (@today datetime)RETURNS datetime ASBEGIN RETURN dateadd(day, -1, datediff(d,0,@today))END
Then create a Table-Valued Function like so:CREATE FUNCTION [dbo].[udfCommonDates] (@date datetime)RETURNS @t table (week_start datetime, week_end datetime, lastweek_start datetime, lastweek_end datetime, month_start datetime, month_end datetime, lastmonth_start datetime, lastmonth_end datetime, yesterday_start datetime, yesterday_end datetime, today_start datetime, today_end datetime, thisweek_monday_start datetime, thisweek_monday_end datetime, year_start datetime, year_end datetime, tomorrow_noon datetime, today_noon datetime, date_only datetime)BEGIN INSERT @t SELECT dbo.get_week_start ( @date ) AS week_start, dbo.get_week_end ( @date ) AS week_end, dbo.get_week_start ( DATEADD(d, -7, @date ) ) AS lastweek_start, dbo.get_week_end ( DATEADD(d, -7, @date ) ) AS lastweek_end, dbo.get_month_start( @date ) AS month_start, dbo.get_month_end ( @date ) AS month_end, dbo.get_month_start ( DATEADD(m,-1, @date) ) AS lastmonth_start, dbo.get_month_end ( DATEADD(m,-1,@date) ) AS lastmonth_end, dbo.get_yesterday_start ( @date ) AS yesterday_start, dbo.get_yesterday_end ( @date ) AS yesterday_end, dbo.get_today_start (@date) AS today_start, dbo.get_today_end ( @date ) AS today_end, dbo.get_weekday_start(1,@date) AS thisweek_monday_start, dbo.get_weekday_end(1,@date) AS thisweek_monday_end, dbo.get_year_start(@date) AS year_start, dbo.get_year_end(@date) AS year_end, dbo.get_tomorrow_noon(@date) AS TomorrowNoon, dbo.get_today_noon(@date) AS TodayNoon, dbo.get_date_only(@date) AS DateOnlyRETURNEND
Now the RS folks might be thinking but how does this help me as I need a dataset and a dataset can only be based on a Stored Procedure or a direct table. No problem create the following stored procedure:CREATE PROCEDURE [dbo].[uspCommonDates] ASbegin set datefirst 1 declare @date datetime set @date = getdate() select * from dbo.udfCommonDates(@date)end
Now you've got a stored procedure to use as a dataset...Now in reporting services add a new dataset:Now go to the report parameters section of the report:Now pick that dataset dsFunctions (or whatever you called it) and then pick any of the value fields from the scalar functions such as:Now when you run the report it uses the scalars:If you have questions feel free to ask :).Hope this helps someoneWeblog -- [url]http://weblogs.sqlteam.com/jhermiz[/url]