【问题标题】:Can the value of a subscription parameter be set to an expression when creating an SSRS report subscription in SQL Server 2014?在 SQL Server 2014 中创建 SSRS 报表订阅时,订阅参数的值是否可以设置为表达式?
【发布时间】:2017-02-26 15:24:31
【问题描述】:
我有一个包含两个日期参数“StartDate”和“EndDate”的报告。
我想为报告创建多个订阅,涵盖不同时间段,例如上一个日历月、上一周、上周末等。
我能想到的最直接的方法是,是否可以将 StartDate 和 EndDate 参数设置为每个订阅的不同表达式。但是,我似乎根本无法从订阅页面获得表达式。这可能吗?
【问题讨论】:
标签:
sql-server
reporting-services
parameters
sql-server-2014
subscription
【解决方案1】:
我处理这种情况的方法是在报告中添加一个新参数,以便您选择要运行的报告期间。该值将反过来用于确定开始日期和结束日期使用的日期。
以下步骤概述了如何执行此操作。
-
向名为ReportPeriod的报告添加一个新参数。
将以下标签(值)对添加到可用值(指定值)列表中。
将其中之一设为默认值,这并不重要。
在参数列表中将此新参数上移,使其位于StartDate 和EndDate 参数的上方(之前)。他们将根据选择的ReportPeriod 得出他们的值,所以它必须在他们之前。
-
将StartDate参数的默认值表达式设置为:
=Switch(Parameters!ReportPeriod.Value = "D", Today.AddDays(-1),
Parameters!ReportPeriod.Value = "W", DateAdd(DateInterval.WeekOfYear, -1, DateAdd(DateInterval.Day, -(DatePart(DateInterval.Weekday, Today, 0, 0)-1), Today)),
Parameters!ReportPeriod.Value = "M", DateAdd(DateInterval.Month, -1, DateAdd(DateInterval.Day, -(DatePart(DateInterval.Day, Today, 0, 0)-1), Today)))
-
将EndDate参数的默认值表达式设置为:
=Switch(Parameters!ReportPeriod.Value = "D", Today,
Parameters!ReportPeriod.Value = "W", DateAdd(DateInterval.Day, -(DatePart(DateInterval.Weekday, Today, 0, 0)), Today),
Parameters!ReportPeriod.Value = "M", DateAdd(DateInterval.Day, -(DatePart(DateInterval.Day, Today, 0, 0)), Today))
您需要知道,手动运行报表时更改ReportPeriod 不会更新您眼前的StartDate 和EndDate 参数。但是,更改默认 ReportPeriod 将影响这些值。 更重要的是,您在创建报告订阅时选择的ReportPeriod 也会影响日期值。因此,为该报告创建报告订阅,每个ReportPeriod 订阅,将为您提供所需的结果。
随意添加更多ReportPeriod 可用值,例如 Quarterly 或 Annually,并根据需要调整表达式。
希望对你有所帮助。