SSRS - 基于日期的下一个/上一个记录按钮



我在 SSRS 中有一个报告,它根据日期参数显示各种 tablix。用户将选择一个日期,报表将根据该日期进行填充。这工作正常。但是,我还希望用户能够单击"下一条记录"按钮(和"上一条记录"按钮(,参数(和报告(将根据数据库中的下一个日期而更改。

我通常完成此操作的方法是创建一个带有操作的文本框。例如,我将创建一个文本框"下一条记录",进入文本框属性>"操作">"转到报告">,并发送一个通常类似于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 的数据

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

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

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

回到第一次运行,我们将参数正常设置为 2019-08-24 并获取该日期的数据,现在当我们单击"下一条记录"按钮时,它将采用第一个survey_date(这将是 2019-08-24(并为其添加 1 天并通过操作将其传递给报告。因此,我们将通过201-08-25。报表数据集将获取最小survey_date,即>= 我们传入的日期,在本例中为 2019-08-25,并返回 2019-09-16,我们将其粘贴@nextDate随后筛选返回的数据。

希望这是有道理的。

相关内容

最新更新