SSRS参数条件语句

时间:2018-10-25 14:37:43

标签: reporting-services parameters conditional ssrs-2012

我创建了一个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尚未初始化或某种东西,因此引发错误,但不确定。

有什么办法解决这个问题吗?

我从this帖子中获得了上述解决方案参考。

1 个答案:

答案 0 :(得分:3)

您遇到的错误是您所想的:您正在尝试通过引用ReportingPeriod的值来设置ReportingPeriod的默认值,这是不可能的,因为它尚不存在。 / p>

由于您只在寻找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

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

sample

相关问题