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