好的,这是一个有趣的部分,也是我到目前为止所做的工作的一部分,到目前为止,有些人声称由于 SSRS 处理默认值的默认行为而无法做到这一点。但是我已经走了很远,我很好奇我是否可以一路走下去。
问题:我想要做的是让用户在“本月”、“上个月”等语句之间获得 PRE DEFINED ......然后使用该字符串引用的 DateTime 填充变量,但用户可以更改它稍后,它应该根据父字符串刷新,否则让用户在 SINGLE DATETIME PARAMETER 上选择不同的字符串。
首先,让我们来看看什么可行,什么不可行:
I. 我将数据集绑定到此,缩写形式为:
select
'Today' as Description
, DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) BegDt
union
select
'ThisMonth'
, Dateadd(month, Datediff(month, 0, getdate()), 0)
二、然后我设置了一个名为“DatesPeriod”的参数,然后在选择“从查询中获取值”时添加“描述”作为参数的字段和标签。用户现在可以从下拉列表中选择“今天”或“本月”。
三、我现在设置另一个数据集并将其标记为“DatesSelected”。出于解释的目的,我将保持简单,只嵌套第一部分的数据集,但列出一个 where 子句。本质上,我再次使用相同的数据集,但一次强制返回一行。
select *
from
(
select
'Today' as Description
, DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) BegDt
union
select
'ThisMonth'
, Dateadd(month, Datediff(month, 0, getdate()), 0)
) as x
where x.Description = @DatesPeriod
四。我定义了另一个名为“Start”的参数,它是 DateTime,并从上面的数据集中获取它的值以及它的默认值。现在,当用户更改第一个文本变量时,相关的 DateTime 变量也会更改。我已将文本选择本质上绑定到一个日期时间变量,该变量现在的范围仅限于描述的可用值和默认值。这将范围限制为一个,强制传递默认值。
V. 这还不够,我希望用户能够随意选择免费日期范围。当前设置不允许使用此日期选择器,因为范围受 AVAILABLE VALUES 限制。但是,需要这样做才能将文本传递给将按需刷新的日期时间变量(当它在运行报表时更改时,而不仅仅是第一次)。因此,我创建了另一个 DateTime 参数并将其命名为“UserStart”,并将默认值设为“[@Start]”以将其默认值作为“Start”的依赖项。
六、我现在创建了一个名为“Choice”的测试数据集,以直观地看到我的数据也按照我的意愿呈现。
Select isnull(@UserStart, @Start) as Choice
七。我创建了一个表格对象并将其放在我的报告中并放入我上面列出的单个单元格中,以查看当用户用他们自己的选择(来自 SSRS 提供的日历显示)覆盖默认的“开始”值时,它将展示。
因此,此时一切都需要注意。您需要显示两个日期时间参数,以允许最终用户选择默认设置或选择他们自己的设置。如果我尝试隐藏第二个参数“开始”,它只会在第一次运行报告时设置默认值,每次更改第一个参数时我都想要它。如果它是可见的,它工作正常,但对于功能,我不希望用户看到就他们而言是相同的两个报告参数。我尝试了自定义代码来返回“开始”参数,创建另一个数据集,但据我所知,SSRS 对于默认刷新或您想要选择的任何日期都不灵活。如果你想刷新一个参数并让它从另一个变量在屏幕上这样做,你需要告诉它' s 可用值和默认值已更改。但是,这摆脱了日历选项,因此您需要将参数传递给另一个参数。但是,如果您隐藏第二个参数,它将不会传递该值。
任何帮助将非常感激。