首页 > 解决方案 > SSRS 参数条件语句

问题描述

我创建了一个接受用户输入作为整数值的 SSRS 参数。我需要检查用户输入并确保它在一定范围内。我怎么能在 SSRS 中做到这一点。

参数是ReportingPeriod,在这个参数属性中我尝试将参数的默认值设置为表达式。我的要求是确保文本框中的用户输入是 1 到 45 天之间的整数值。由于我是 SSRS 新手,因此我根据参数表达式描述中的示例创建了如下所示的内容。

=Switch(Parameters!ReportingPeriod.Value = 1, 1,
    Parameters!ReportingPeriod.Value = 10, 10,
    Parameters!ReportingPeriod.Value = 45, 45)

但这给了我以下错误。

The DefaultValue expression for the report parameter 'ReportingPeriod' contains an error: 
The expression references the parameter 'ReportingPeriod', which does not exist in the Parameters collection. Letters in the names of parameters must use the correct case.

根据我的理解,我认为问题在于输入参数ReportingPeriod尚未初始化或其他东西因此引发错误,但不确定。

知道如何解决这个问题吗?

我从这篇文章中得到了我的上述解决方案参考。

标签: reporting-servicesparametersconditionalssrs-2012

解决方案


你得到的错误正如你所想的那样:你试图ReportingPeriod通过引用 的值来设置默认值ReportingPeriod,这是不可能的,因为它还不存在。

由于您只是在寻找 1 到 45 之间的整数,因此我认为自定义代码将是矫枉过正。您只需设置参数的可用值即可完成您想要做的事情。与自定义代码相比,唯一的缺点是用户无法将值输入到文本框中。他们将不得不从下拉列表中选择它。

由于您知道您只想允许 1-45,因此您可以指定每个值以单独允许。但我建议从查询中获取可用值。

要从查询中获取可用值,您需要创建另一个数据集,其中仅包含您希望该参数允许的值。因此,您将需要一个包含整数 1 到 45 的数据集。如果您有一个数字表,这将是微不足道的,就像select top(45) * from NumbersTable. 但如果没有,您也可以编写一个简单的查询来完成此操作。我确信这个查询不会是绝对最好的方法,但它会起作用:

select top(45)
    rn = row_number() over(order by object_id)
from
    sys.all_columns

然后,您将转到参数属性,并在可用值中,选择“从查询中获取值”,将数据集设置为您刚刚创建的数据集,并将值和标签字段设置为该数据集中的唯一列。

样本


推荐阅读