In SSRS there is no any option by which we can create the calender in the reports but this thing can be done using SQL-Server here I am giving a example code of creating a calender for a month
For this we have to write the some sql queries in SSRS Data Source
The query is as follows :
--First day of current month
DECLARE @StartDate datetime = '01/01/2011'
DECLARE @EndDate datetime= '01/31/2011'
SET @StartDate = DATEADD(s,0,DATEADD(mm, DATEDIFF(m,0,@StartDate),0))
DECLARE @CurrentMonth VARCHAR(50)
SET @CurrentMonth = CAST(DATENAME(MONTH, @StartDate) AS VARCHAR)+' '+ CAST(DATENAME(YEAR, @StartDate) AS VARCHAR)
--First day to display on calendar
SET @StartDate = DATEADD(DAY,-DATEPART(WEEKDAY,@StartDate)+1,@StartDate)
--Last day of month
SET @EndDate = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@EndDate)+1,0))
--Last day to display on calendar
SET @EndDate = DATEADD(DAY,6-DATEPART(WEEKDAY,@EndDate),@EndDate)
WITH
Dates([DATE]) AS
(
--Select First day in range
SELECT
CONVERT(DATETIME,@StartDate) AS [DATE]
UNION ALL
--Add a record for every day in the range
SELECT
DATEADD(DAY, 1, [DATE])
FROM
Dates
WHERE
DATE < CONVERT(DATETIME,@EndDate)
), Events AS
(
--Create some events to place on the calendar
SELECT EventDate = CONVERT(VARCHAR(2),DATEADD(MONTH, -1,GETDATE()),101) + '/30/2009 02:00:00 PM', Note = 'Event 1'
UNION
SELECT EventDate = CONVERT(VARCHAR(2),GETDATE(),101) + '/23/2009 12:00:00 PM', Note = 'Event 2'
UNION
SELECT EventDate = CONVERT(VARCHAR(2),GETDATE(),101) + '/28/2009 02:00:00 PM', Note = 'Event 3'
UNION
SELECT EventDate = CONVERT(VARCHAR(2),GETDATE(),101) + '/28/2009 06:30:00 PM', Note = 'Event 4'
UNION
SELECT EventDate = CONVERT(VARCHAR(2),GETDATE(),101) + '/30/2009 07:00:00 PM', Note = 'Event 5'
UNION
SELECT EventDate = CONVERT(VARCHAR(2),DATEADD(MONTH, 1,GETDATE()),101) + '/01/2009 01:30:00 PM', Note = 'Event 6'
)
SELECT
-- Number the records based on the date, if multiple records have
-- the same date then they will be numbered the same. Used in
-- calculation to determine row record is to display on.
[ORDER] = DENSE_RANK() OVER (ORDER BY d.[Date]),
-- date used in all caluclation for date
d.[Date],
--generates matrix columns
[WeekDay] = DATEPART(WEEKDAY, d.[Date]),
--used to display day of month on calendar
[DAY] = DATEPART(DAY,d.[Date]),
--used in some calculations for display
[MONTH] = DATEPART(MONTH,d.[Date])
FROM
Dates d
LEFT JOIN
Events e
ON
CAST(CONVERT(VARCHAR(10),e.EventDate,101) AS DATETIME) = d.[Date]
--Set the maximum times the Dates cte can recurse
OPTION (MAXRECURSION 100)
After writing this query we have to follow these steps :
Right Click on the report page and select matrix table.
Right Click on the row group property of this table and give group on value as “=Ceiling(Fields!RowOrder.Value / 7)”
Give the width for first column as “0.0inch” and set the visible property of that column as false.
For second column right click on Column group property and givr group on value as = “=Fields!WeekDay.Value”
Now For the First row in text box write the following code
=IIF(Fields!WeekDay.Value = 1,"Sunday",
IIF(Fields!WeekDay.Value = 2,"Monday",
IIF(Fields!WeekDay.Value = 3,"Tuesday",
IIF(Fields!WeekDay.Value = 4,"Wednesday",
IIF(Fields!WeekDay.Value = 5,"Thrusday",
IIF(Fields!WeekDay.Value = 6,"Friday","Saturday"))))))
In second row write the following Code :
=Fields!Day.Value
Now Run the report.