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

问题描述 投票:0回答:2

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

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

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

sql-server reporting-services ssrs-2012
2个回答
4
投票

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

  • 点击“指定值”
  • 单击“表达式”按钮(fx)
  • 为开始日期输入以下内容 = CDate(格式(DateAdd(“d”, - 7,Now()),“yyyy-MM-dd”)+“06:00:00”)
  • 为结束日期输入以下内容 = CDate(格式(现在,“yyyy-MM-dd”)+“05:59:59”)

输出就像这样

enter image description here


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天”选项,我已将其包含在上述参数中。
  • 最后,我会在'Select parameter visibility'选项下将@StartDate和@EndDate都设置为'Hidden',但这是可选的。

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

© www.soinside.com 2019 - 2024. All rights reserved.