【问题标题】:Setting Parameter Default value to a Date/Time将参数默认值设置为日期/时间
【发布时间】:2018-05-15 06:47:38
【问题描述】:

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

我通常会在 SQL 中设置这些值,但也有人要求能够使用参数下拉菜单来选择日期范围。

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

【问题讨论】:

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


    【解决方案1】:

    在报告参数属性的“默认值”选项卡中,就像您已经打开一样

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

      =CDate(Format(DateAdd("d",-7,Now()), "yyyy-MM-dd") + " 06:00:00")

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

      =CDate(Format(Now, "yyyy-MM-dd") + " 05:59:59")

    这样输出

    【讨论】:

      【解决方案2】:

      对于您在 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 中设置值,所以我假设你可以处理这个。

      【讨论】:

        猜你喜欢
        • 2018-12-20
        • 2011-08-14
        • 2010-09-15
        • 1970-01-01
        • 2023-03-24
        • 2012-11-19
        • 2012-04-29
        • 2020-07-08
        • 2022-01-09
        相关资源
        最近更新 更多