【发布时间】:2019-09-23 11:14:21
【问题描述】:
我正在 MSvs 中开发一个 SSRS 报告,它允许选择 2 个不同的日期。
一种选择是使用StartDate 和EndDate 参数选择自定义日期范围(选择允许NULL)。
另一个选项是通过选择“选择自定义”从下拉列表中列出的一组预定义日期中进行选择,也可以是NULL。
我有 2 个数据集,它们都是 SQL Server 中的存储过程。一个是我的主要数据集,另一个是CalendarRanges,我在其中定义了预定义的日期范围,如下所示:
- 当前周
- 上一周
- 当前月份
- 自定义
我已经完全剥离了我的代码来提供一个例子。
主要数据集存储过程:
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
开始日期和结束日期与我在 SSRS 中的 @StartDate 和 @EndDate 参数相关联。
数据集 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,则改用下拉参数,但我很难理解如何实现?
【问题讨论】:
标签: sql sql-server reporting-services