У меня есть ежемесячный календарь в SSRS, который тянется во все дни месяца, который вы укажете, а также показывает дни с предыдущего и следующего месяца, чтобы показать 6, 7 день недель. То, что я пытаюсь сделать теперь отображать диапазоны за каждую неделю в течение месяца, к примеру, в ноябре 2015 года я хотел бы:6 Неделя 7 дней для каждого месяца для календаря SSRS
Oct 25-31
Nov 1-7
Nov 8-14
Nov 15-21
Nov 22-28
Nov 29-Dec 5
Выражение Я пытаюсь настроить на плечо выглядит в соответствии с:
="Week " & VBCRLF & Left(MonthName(Parameters!start_cymd.Value.Month,False),3) & " " & Fields!Day.Value & " - " & Fields!Day.Value + 6
Какую дорогу я должен спускать с точки зрения добавления этого выражения, чтобы получить желаемый результат? Если вам нужно больше информации, чтобы ответить на мой вопрос, я был бы рад предоставить его. Благодаря!
Edit:
ХП Генерирование Календарь:
ALTER PROCEDURE [Event].[Report_Event_Calendar_Month_sp]
@start_cymd DATE = NULL
AS
BEGIN
DECLARE @StartDate DATE = @start_cymd ,
@EndDate DATE = @start_cymd ,
@SDate DATE = @start_cymd
---First day of current month
SET @StartDate = DATEADD(s, 0, DATEADD(mm, DATEDIFF(m, 0, @StartDate), 0))
SET @SDate = DATEADD(s, 0, DATEADD(mm, DATEDIFF(m, 0, @SDate), 0))
---First day to display on calendar
SET @StartDate = DATEADD(DAY, -DATEPART(DAY, @StartDate) - 6, @StartDate)
---Last day of month
SET @EndDate = DATEADD(s, -1, DATEADD(mm, DATEDIFF(m, 0, @SDate) + 1, 0))
---Last day to display on calendar
SET @EndDate = DATEADD(DAY, -DATEPART(DAY, @EndDate) + 35, @EndDate)
;WITH Dates([Date])
AS (
SELECT @StartDate AS [Date]
UNION ALL
SELECT DATEADD(DAY, 1, [Date])
FROM Dates
WHERE [Date] < @EndDate
) ,
Events
AS (
SELECT EventDesc ,
Notes ,
start_cymd AS EventDate ,
MemberName
FROM [Event].Event_Description ED
INNER JOIN [Event].SQL_Team_Events SE ON ED.EventDesc_ID = SE.EventDesc_ID
INNER JOIN [Event].SQL_Team_Member SM ON SE.Event_ID = SM.Event_ID
INNER JOIN [Event].Members M ON SM.Member_ID = M.Member_ID
)
---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
SELECT [Order] = DENSE_RANK() OVER (ORDER BY d.[Date]) ,
---Date used in all calculations 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]) ,
e.EventDesc ,
e.Notes ,
e.EventDate ,
e.MemberName
FROM Dates d
LEFT JOIN Events e ON d.[Date] = e.EventDate
---Set the maximum number of times the CTE 'Dates' can recurse
OPTION (MAXRECURSION 100)
END
GO
В конце выражения вам понадобится функция «IIF», которая определяет, будет ли поле «Fields! Day.Value + 6» превышать длину вашего месяца, чтобы правильно отобразить изменение месяца в середине недели (* 29 ноября -Sep 5 *). На первый взгляд все остальное мне кажется прекрасным. – Oceans
Да ... кофе еще не ударил ноль. – postald
Есть ли причина, по которой вы не можете использовать SQL-запрос для генерации этой информации в наборе данных? Мне кажется, что это будет значительно проще, особенно если учесть разные месячные длины, которые вам придется иметь дело с – Jonnus