SSRS - Next/Previous 基于日期的记录按钮

SSRS - Next/Previous Record Button Based on Date

我在 SSRS 中有一份报告显示了基于日期参数的各种表格。用户将 select 一个日期,报告将根据该日期填充。这很好用。但是,我还希望用户能够单击 "next record" 按钮(和 "previous record" 按钮),参数(和报告)将根据数据库中的下一个日期进行更改。

我通常完成此操作的方法是创建一个带有操作的文本框。例如,我会创建一个文本框 "Next Record",进入文本框属性 > 操作 > 转到报告 >,然后发送一个通常类似于 Parameters!survey_id.Value + 1 的新参数。如果我想将数字 ID 递增一个静态数字(即递增 1),这很有效。如果我想将日期增加 1 天,我认为它也适用于日期;但是,如果下一个记录不是一天,我该怎么办?

我认为可行的一种方法是在数据集中创建一个 row_number 字段,为参数提供值。这是代码:

select distinct sm.survey_date
,row_number() Over (order by survey_date) as increment
from survey_main as sm
group by sm.survey_date --sometimes there are multiple surveys in one day
order by sm.survey_date desc

给出结果

survey_date         increment
2019-09-16          194
2019-08-24          193
2019-01-14          192

我的想法是我可以使用文本框操作中的增量字段来查找下一个 survey_date,但我无法找出代码(或者如果可能的话)。

有什么办法可以做到吗?您还有其他建议或解决方法吗?

谢谢!

有几种方法可以做到这一点,但这是我的方法。

如果报告数据集是这样的(这可以重构但更容易理解)

DECLARE @nextDate date

SELECT @nextDate = MIN(sm.survey_date) 
    FROM survey_main sm 
    WHERE sm.survey_date >= @reportParameterDate -- this is the date passed in from the report

SELECT * 
    FROM survey_main sm
    WHERE sm.survey_date = @nextDate

因此,您第一次 运行 报告时,如果您在 2019-08-24 通过,那么您将获得该日期的数据,如果您在 2019-08-25 通过,您将获得该日期的数据2019-09-16

然后在文本框的操作上 "button" 日期参数将是和表达式类似

=DATEADD("d", 1, FIRST(Fields.survey_date.Value, "myDatasetName"))

这将向数据集中的 survey_date 添加 1(这些应该都相同,因此可以使用 FIRST())。

回到第一个 运行,我们将参数正常设置为 2019-08-24 并获取该日期的数据,现在当我们单击 'Next Record' 按钮时,它将采用FIRST survey_date(将是 2019-08-24)并向其添加 1 天并通过操作将其传递给报告。所以我们将通过 201-08-25。报告数据集将获得 MIN survey_date,即 >= 我们传入的日期,在本例中为 2019-08-25,以及 return 2019-09-16,我们将其粘贴在 @nextDate 中,随后过滤数据 returned.

希望这是有道理的。