如何设置自定义SSRS日期参数?

时间:2014-04-29 21:37:58

标签: sql reporting-services parameters

我有一系列需要日期范围的报告。为了“帮助”客户,我们有一个快速约会的下拉列表(过去7天,本月,上个月等)其中一个下拉项目是“自定义”。

当用户选择除custom之外的任何内容时,我们使用StartDate和EndDate参数的Available Values和Default Values中的数据集来相应地强制使用正确的日期戳。

但是,当用户选择“自定义”时,我们希望允许用户在StartDate和EndDate参数中选择任何日期。这些参数的可用值可以是任何值,因为我们已经定义了一组可用值,所以这是无法完成的。我尝试从我的存储过程中返回NULL,但这只是阻止用户设置任何内容。

实现这一目标的最佳方法是什么?这个任务一开始听起来很容易,但我已经要把头发拉出来了。

更新

我有一个下拉列表,SelectDateRange,我从以下数据库函数中提取日期范围的选项:

CREATE FUNCTION [dbo].[ufn_ReportDateRanges]
(
)
RETURNS @Dates TABLE
    (
    DateRangeID   INT,
    DateRangeName VARCHAR(255),
    StartDate     DATE,
    EndDate       DATE
    )
AS
BEGIN

    INSERT INTO @Dates SELECT 1, 'Today',
                  GetDate(), 
                  GetDate()
    INSERT INTO @Dates SELECT 2, 'Previous 7 Days', 
                  GetDate() - 7, 
                  GetDate()
    INSERT INTO @Dates SELECT 3, 'Current Week',
                  DateAdd(dd, -(DatePart(dw, GetDate()) - 1), GetDate()),
                  DateAdd(dd, (7 - DatePart(dw, GetDate())), GetDate())
    INSERT INTO @Dates SELECT 4, 'Previous Week',
                  DateAdd(dd, -(DatePart(dw, GetDate()) - 1) - 7, GetDate()),
                  DateAdd(dd, -(DatePart(dw, GetDate()) - 1) - 1, GetDate())
    INSERT INTO @Dates SELECT 5, 'Current Month',
                  DateAdd(day,-(DatePart(day, getdate()) + 1), GetDate()),
                  DateAdd(month, 1, DateAdd(day, -DatePart(day, GetDate()), GetDate()))
    INSERT INTO @Dates SELECT 6, 'Previous Month',  
                  DateAdd(month, DateDiff(month, 0, GetDate())-1, 0),
                  DateAdd(month, DateDiff(month, -1, GetDate())-1, -1)
    INSERT INTO @Dates SELECT 7, 'Year To Date',  
                  DateAdd(yyyy, DateDiff(yyyy, 0, GetDate()), 0),
                  GetDate()

    INSERT INTO @Dates SELECT 99, 'Custom',  
                  NULL,
                  NULL

    RETURN
END

我的数据集DateRanges是:

SELECT        DateRangeID, DateRangeName, StartDate, EndDate
FROM          dbo.ufn_ReportDateRanges()
WHERE         DateRangeID = @SelectedDateRangeID

在我的StartDate和EndDate参数中,我将可用值设置为:

Dataset: DateRanges
Value: StartDate (or EndDate, respectively)
Label: StartDate (or EndDate, respectively)

并将其默认值设置为:

DataSet: DateRanges
Value: StartDate (or EndDate, respectively)

这对于强制字段始终与下拉选择匹配非常有用。但是当用户选择“自定义”时,我想使用日期选择器(不是所有历史记录中所有可能日期的非常长的下拉列表)将字段释放为任何日期。这甚至可能吗?

2 个答案:

答案 0 :(得分:1)

<强>更新

选项3

默认值设置为无

当用户在DateRangeParameter中选择过去7天,上个月等时。它不会填充startdate和结束日期。表数据集根据用户输入的dateRangeId计算startdate和enddate。

当用户选择自定义并输入startdate和enddate时,您的表数据集将使用用户选择的startdate和enddates。


选项1 。为什么需要可用的值。我认为你应该把它保持为。仅自定义默认值选项卡。

选项2 。如果选项1不起作用,请尝试此操作。

您需要更新可用值数据集以提取所有日期。

对于Startdate尝试这样的事情

WITH CTE as
(
SELECT 'Custom' QuickDateParam, CAST('01/01/1980' as datetime) as D
  UNION ALL
SELECT 'Custom' QuickDateParam, DATEADD(d,1, D)
  FROM CTE
  WHERE D < getDate()
)

SELECT QuickDateParam, D FROM CTE
UNION ALL
SELECT 'Last7Days', DATEADD(d, -7, GETDATE())
UNION ALL
SELECT 'LastMonth', DATEADD(m, -1, GETDATE())
option (maxrecursion 0)

在可用值的数据集中,传递QuickDateParam,它将显示相应的日期。

你也可以为结束日期做同样的事。

注意:您是否可以共享默认值/可用值的数据集和数据,因为这样可以更轻松地回答您的问题。

答案 1 :(得分:0)

我会编辑提供StartDate和EndDate默认值的数据集,以便它返回今天的日期(例如GETDATE())或类似的“自定义”行。然后,用户可以使用Calendar控件选择他们想要的任何日期。