将参数默认值设置为 Date/Time
Setting Parameter Default value to a Date/Time
我在 Visual Studio 2017 年构建了一个 SSRS 报告。
有开始日期和结束日期。开始日期为今天早上 6 点后 -1 周,结束日期为今天 5:59am。
我通常会在 SQL 中设置这些值,但有人要求能够 select 使用参数下拉列表设置日期范围。
我在VS中打开参数,进入默认值然后不知道Visual Basic不知道下一步。
在报告参数属性的 "Default Values" 选项卡中,就像您已经打开的一样
- 点击"Specify Values"
- 单击表达式按钮 (fx)
为开始日期输入以下内容
=CDate(格式(DateAdd("d",-7,Now()), "yyyy-MM-dd") + " 06:00:00")
输入以下内容作为结束日期
=CDate(格式(现在, "yyyy-MM-dd") + " 05:59:59")
这样输出
对于您在 SO 上提出的任何问题,有许多可能的解决方案,我将分享对我自己和我的 BI 团队有用的解决方案。
我们允许报告用户 select 从一个列表中选择多个不同的日期范围(本月、上个月、昨天等)来填充 @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。
- 从单选按钮 selecting 'Use a dataset embedded in my report' 添加两个新数据集。我们将这些数据集称为 GetStartDate 和 GetEndDate,但这取决于您。
- Select 通过创建新连接或使用解决方案中的共享数据源来创建数据源。
- Select 存储过程
- 查找并select上述存储过程。对于我的团队,GetStartDate 使用 Reporting.usp_StartDate 和 GetEndDate 使用 Reporting.usp_EndDate.
- 如果您使用上述模板,则会创建一个新的@TimePeriod 参数,但您可能已经有了这个。
- 创建两个新参数,StartDate 和 EndDate,如果您使用的是预先存在的报告模板,您可能已经有了这些参数,请使用 'Date/Time'.
的数据类型创建这些参数
- 在 StartDate 和 EndDate 参数上,使用 'Default Values' 选项卡,从单选按钮 select 'Get Values from a Query'、Select 相关数据集(@StartDate 使用 GetStartDate数据集)和值字段将为 StartDate(应该只有一个条目)。
- 在您的@TimePeriod 参数上,您可以添加负载 'Available Parameters' 基本上添加任何您希望用户能够 select
- 您还可以为 @TimePeriod 设置 'Default Value',在您的情况下,我会添加 'Previous 7 Days' 选项,我已将其包含在上面的参数中。
- 最后,我会在 'Select parameter visibility' 选项下将 @StartDate 和 @EndDate 都设置为 'Hidden',但是这是可选的。
这几乎设置了报告,您需要确保检索数据的数据集期望在 WHERE 子句或 JOIN 中接收 @StartDate 和 @EndDate,您说您很乐意在 SQL 所以我假设你可以处理这个。
我在 Visual Studio 2017 年构建了一个 SSRS 报告。 有开始日期和结束日期。开始日期为今天早上 6 点后 -1 周,结束日期为今天 5:59am。
我通常会在 SQL 中设置这些值,但有人要求能够 select 使用参数下拉列表设置日期范围。
我在VS中打开参数,进入默认值然后不知道Visual Basic不知道下一步。
在报告参数属性的 "Default Values" 选项卡中,就像您已经打开的一样
- 点击"Specify Values"
- 单击表达式按钮 (fx)
为开始日期输入以下内容
=CDate(格式(DateAdd("d",-7,Now()), "yyyy-MM-dd") + " 06:00:00")
输入以下内容作为结束日期
=CDate(格式(现在, "yyyy-MM-dd") + " 05:59:59")
这样输出
对于您在 SO 上提出的任何问题,有许多可能的解决方案,我将分享对我自己和我的 BI 团队有用的解决方案。
我们允许报告用户 select 从一个列表中选择多个不同的日期范围(本月、上个月、昨天等)来填充 @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。
- 从单选按钮 selecting 'Use a dataset embedded in my report' 添加两个新数据集。我们将这些数据集称为 GetStartDate 和 GetEndDate,但这取决于您。
- Select 通过创建新连接或使用解决方案中的共享数据源来创建数据源。
- Select 存储过程
- 查找并select上述存储过程。对于我的团队,GetStartDate 使用 Reporting.usp_StartDate 和 GetEndDate 使用 Reporting.usp_EndDate.
- 如果您使用上述模板,则会创建一个新的@TimePeriod 参数,但您可能已经有了这个。
- 创建两个新参数,StartDate 和 EndDate,如果您使用的是预先存在的报告模板,您可能已经有了这些参数,请使用 'Date/Time'. 的数据类型创建这些参数
- 在 StartDate 和 EndDate 参数上,使用 'Default Values' 选项卡,从单选按钮 select 'Get Values from a Query'、Select 相关数据集(@StartDate 使用 GetStartDate数据集)和值字段将为 StartDate(应该只有一个条目)。
- 在您的@TimePeriod 参数上,您可以添加负载 'Available Parameters' 基本上添加任何您希望用户能够 select
- 您还可以为 @TimePeriod 设置 'Default Value',在您的情况下,我会添加 'Previous 7 Days' 选项,我已将其包含在上面的参数中。
- 最后,我会在 'Select parameter visibility' 选项下将 @StartDate 和 @EndDate 都设置为 'Hidden',但是这是可选的。
这几乎设置了报告,您需要确保检索数据的数据集期望在 WHERE 子句或 JOIN 中接收 @StartDate 和 @EndDate,您说您很乐意在 SQL 所以我假设你可以处理这个。