将参数默认值设置为日期/时间

时间:2018-05-15 06:47:38

标签: sql-server reporting-services ssrs-2012

我在Visual Studio 2017中构建了一份SSRS报告。 有一个开始和结束日期。从今天的早上6点开始是-1周,而结束日期是今天的早上5点59分。

我通常在SQL中设置这些值,但有些人还要求使用参数下拉列表来选择日期范围。

我打开VS中的参数,转到默认值,然后不知道Visual Basic不知道下一步。

2 个答案:

答案 0 :(得分:3)

在"默认值"您已经打开的报告参数属性的标签

  • 点击"指定值"
  • 单击“表达式”按钮(fx)
  • 为开始日期输入以下内容

    = CDate(格式(DateAdd(" d", - 7,Now())," yyyy-MM-dd")+" 06:00:00& #34)

  • 为结束日期输入以下内容

    = CDate(格式(现在," yyyy-MM-dd")+" 05:59:59")

输出如此

enter image description here

答案 1 :(得分:1)

正如您在SO上提出的任何问题都有很多可能的解决方案,我会分享对我自己和我的BI团队有用的东西。

我们允许报告用户从列表中选择许多不同的日期范围(本月,上个月,昨天等),这些日期范围填充@StartDate和@EndDate,它们都是隐藏参数。 @DateRange默认为上个月,但可以设置为任何内容。

为了实现这个目的,我在SQL中创建了两个存储的参数,名为Reporting.usp_StartDate和reporting.usp_EndDate,但是当然要用它们来调用它们。

Reporting.usp_StartDate

SELECT 
COALESCE(
    CASE WHEN @TimePeriod = 'Current Month' THEN DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()),0) ELSE NULL END,
    CASE WHEN @TimePeriod = 'Previous Month' THEN DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())-1,0) ELSE NULL END,
    CASE WHEN @TimePeriod = 'Previous 7 Days' THEN DATEADD(HOUR,6,DATEADD(WEEK,DATEDIFF(WEEK,0,GETDATE())-1,0)) ELSE NULL END,
    DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()),0) 
        ) [StartDate];

Reporting.usp_EndDate

SELECT 
COALESCE(
    CASE WHEN @TimePeriod = 'Current Month' THEN DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()),0) ELSE NULL END,        
    CASE WHEN @TimePeriod = 'Previous Month' THEN DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()),0) ELSE NULL END,
    CASE WHEN @TimePeriod = 'Previous 7 Days' THEN DATEADD(HOUR,6,DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()),0)) ELSE NULL END,
    GETDATE()           
       ) [EndDate];

现在在VS2017项目中,打开你的.RDL。

  • 从单选按钮添加两个新数据集,选择“使用我的报告中嵌入的数据集”。我们将这些数据集称为GetStartDate和GetEndDate,但这取决于您。
  • 通过创建新连接或使用解决方案中的共享数据源来选择数据源。
  • 选择存储过程
  • 查找并选择上述存储过程。对于我的团队,GetStartDate使用Reporting.usp_StartDate,GetEndDate使用Reporting.usp_EndDate。
  • 如果您使用上述模板,则会创建一个新的@TimePeriod参数,但您可能已经拥有此参数。
  • 创建两个新参数,StartDate和EndDate,如果您使用的是预先存在的报告模板,则可能已经拥有这些参数,并使用“日期/时间”数据类型创建这些参数。
  • 在StartDate和EndDate参数上,使用“默认值”选项卡,从单选按钮中选择“从查询中获取值”,选择相关的数据集(@StartDate使用GetStartDate数据集),值字段将为StartDate (应该只有一个条目)。
  • 在@TimePeriod参数上,您可以添加一个“可用参数”加载,基本上添加您希望用户能够选择的任何内容
  • 您还可以为@TimePeriod设置'默认值',在您的情况下,我会添加“上一个7天”选项,我已将其包含在上述参数中。
  • 最后,我会在“选择参数可见性”选项下将@StartDate和@EndDate都设置为“隐藏”,但这是可选的。

这几乎设置了报告,您需要确保检索数据的数据集期望在WHERE子句或JOIN中接收@StartDate和@EndDate,您说您很乐意在SQL中设置值,所以我假设你可以处理这个。