s-s-rS 参数条件语句

Posted

技术标签:

【中文标题】s-s-rS 参数条件语句【英文标题】:s-s-rS Parameters conditional statement 【发布时间】:2018-10-25 14:37:43 【问题描述】:

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

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

=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 帖子中获得了上述解决方案参考。

【问题讨论】:

我有理由做类似的事情,发现这很有用。 ***.com/questions/30477840/… 【参考方案1】:

你得到的错误和你想的一样:你试图通过引用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

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

【讨论】:

感谢@CBlack,我创建了一个数字表并使用它来填充下拉列表。效果很好。

以上是关于s-s-rS 参数条件语句的主要内容,如果未能解决你的问题,请参考以下文章

Dapper 条件语句(Where) 中参数使用

s-s-rs参数表达式条件

在 s-s-rS 中,如何使用多值参数创建动态“位置”条件

在C语言中条件语句都有哪些需要注意的事项?

参数标签 IF 语句的 s-s-rS 表达式

带有 Condition 和 s-s-rS 参数的 Select 语句