SSRS 2017级联参数和日期

时间:2018-11-21 02:43:22

标签: sql-server tsql reporting-services parameters

我有一个名为Year的参数,您可以一次选择一年。我有一个日期/时间参数,其日历名为start date,另一个名为end date

我希望它能够正常工作,如果我选择2017年,它将显示2017年的日历开始日期和结束日期。

由于我的开始日期和结束日期参数不是数据集中的默认值,因此我不确定如何控制它。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以将其用作表达式,但是由于它在SQL中更简单,因此您可以使用以下内容创建第二个数据集:

select convert(date, '1 jan ' + convert(varchar(4), @Year)), dateadd(day, -1, dateadd(year, 1, convert(date, '1 jan ' + convert(varchar(4), @Year))))

答案 1 :(得分:0)

我使用了引用自己的递归CTE common table expression来解决此问题。然后,您可以设置Datasetstart_date参数中的end_date

开始和结束日期参数的默认值的数据集

DECLARE @year AS INT
SET @year = 2018

SELECT [start_date] = DATEFROMPARTS(@year, 1, 1), [end_date] = DATEFROMPARTS(@year, 12, 31)

开始和结束日期参数的可用值的数据集

DECLARE @year AS INT
SET @year = 2018

;WITH
source_data_dates
AS
(
    SELECT 
          [date_start] = DATEFROMPARTS(@year, 1, 1)
        , [date_end] = DATEFROMPARTS(@year, 12, 31) 
)
,
year_date_list([rn], [date_value]) 
AS
(
    SELECT 
          [rn] = 1
        , [date_value] = CAST([date_start] AS DATETIME) 
    FROM 
        source_data_dates
    UNION ALL
    SELECT 
          [rn] = [rn] + 1
        , [date_start] = CAST(DATEADD(DAY, [rn], [date_start]) AS DATETIME) 
    FROM 
          year_date_list
        , source_data_dates 
    WHERE 
        [rn] <= DATEDIFF(DAY, [date_start], [date_end])
)
SELECT 
      [rn]
    , [date_value]
FROM 
    year_date_list
OPTION (MAXRECURSION 0)

结果:

screenshot