Я разрабатываю отчет SSRS в MSvs, который позволяет 2 различных выбора даты.
Одним из вариантов является выбор пользовательского диапазона дат с использованием параметров StartDate
и EndDate
(выбрано значение NULL
).
Другой вариант - выбрать предварительноопределенный набор дат, перечисленных в раскрывающемся списке, который также может быть NULL
, выбрав «Выбрать пользовательский».
У меня есть 2 набора данных, оба из которых являются хранимыми процедурами на SQL-сервере.Один из них - мой основной набор данных, а другой - CalendarRanges
, где я определил предварительно определенные диапазоны дат следующим образом:
- CurrentWeek
- PreviousWeek
- CurrentMonth
- Пользовательский
Я полностью выделил свой код, чтобы привести пример.
Основная хранимая процедура набора данных:
ALTER PROCEDURE MainDataset
(
@StartDate DATETIME,
@EndDate DATETIME
)
WITH RECOMPILE
AS
BEGIN
DECLARE @StartDateKey INT, @EndDateKey INT
SELECT
@StartDateKey = MIN(DateKey),
@StartDate = MIN(CalendarDate),
@EndDateKey = MAX(DateKey),
@EndDate = MAX(CalendarDate)
FROM
Dim.Calendar
WHERE
CalendarDate >= @StartDate
AND CalendarDate <= @EndDate
;WITH Sales AS
(
SELECT
Sales.CurrencyKey,
OrderId,
FROM
Fact.Sales
WHERE
Sales.OrderDateKey = @StartDateKey
),
Payments AS
(
SELECT
Payments.PaymentCurrencyKey,
PaymentID
FROM
Payments
WHERE
AND Payment.DateKey >= @StartDateKey
AND Payment.DateKey <= @EndDateKey
)
SELECT
Sales.*,
Payments.*,
@StartDate AS 'StartDate',
@EndDate AS 'EndDate'
FROM
Sales
LEFT JOIN Payments
ON Payments.PaymentCurrencyKey = Sales.CurrencyKey
Запуск иКонечные даты связаны с моими параметрами @StartDate
и @EndDate
в SSRS.
Набор данных 2:
ALTER PROCEDURE CalendarRanges
AS
SELECT
1 AS [Order],
Value,
Label
FROM
(SELECT
CurrentWeekOfYear AS Value,
'CurrentWeek' AS Label
FROM Calendar
WHERE CalendarDate = CONVERT(varchar, getdate(), 23)) CurrentWeek
UNION
-- Previous Week
SELECT
2 AS [Order],
Value,
Label
FROM
(SELECT
DISTINCT CurrentWeekOfYear -1 AS Value,
'PreviousCurrentWeek' AS Label
FROM Calendar
WHERE CalendarDate = CONVERT(varchar, getdate(), 23)) PreviousWeek
UNION
-- Current Month
SELECT
4 AS [Order],
Value,
Label
FROM
(SELECT
DISTINCT CurrentMonth AS Value,
'CurrentMonth' AS Label
FROM Calendar
WHERE CurrentMonth = MONTH(GETDATE())) CurrentMonth
UNION
-- Custom
SELECT
5 AS [Order],
value,
Label
FROM (
SELECT
NULL AS Value,
'Select Custom' AS Label
) Custom
Если я выберу опцию «Выбрать пользовательскую» из выпадающего списка, а затемвыберите пользовательскую дату начала и окончания, когда отчет будет работать, как ожидалось.
Однако, если я оставлю пользовательские даты начала и окончания NULL
и выберу предварительно определенную дату из выпадающего списка, отчет не вернет никаких данных.Я проверил, предварительно определив дату, которая отображает данные при выборе пользовательских, чтобы я знал, что данные есть.
Я хотел бы управлять отчетом так, чтобы, если пользовательские параметры начальной и конечной даты были NULL
, затем используйте вместо этого параметр раскрывающегося списка, но я изо всех сил пытаюсь понять, как это реализовать?