在 SSRS 中传递参数,同时删除破折号

use*_*578 3 reporting-services ssrs-2008

我在 SSRS 报告中传递一个唯一 ID 作为参数。在源表中,唯一id不包含破折号。然而,用户可以插入包含破折号“-”的唯一ID,并且在某些情况下不包含破折号。有没有一种方法可以从参数中删除破折号。

例如,唯一 ID 3120-20268-8 在表中存储为 3120202688。如果用户在 SSRS 报告中传递带有或不带有破折号的多个值,我如何检索。

当在下面的查询中使用时,它仅给出针对单个值的记录。但是,当提供多个值时会出错。

select * from Table where Unique_ID in (REPLACE(@Unique_ID,'-',''))

对于超过 1 个值,它会给出下面提到的错误:

替换函数需要 3 个参数。

数据集“ATL_List”的查询执行失败。

谢谢

Chr*_*ler 5

最简单的机制之一是创建一个基于表达式的参数来保存经过清理的输入。该参数将被隐藏,因此用户不会意识到它,但该参数的其余用法是相同的。

注意:您可以使用基于查询的默认值执行类似的操作,但这种情况通过简单的表达式更容易完成

单值参数

创建一个新参数:

多值参数

这只是稍微棘手一点,在表达式中我们可以将选定的值连接到一个 CSV 字符串中,然后处理该值,然后将其拆分回来:

不详细说明,如果我们使清理后的参数暂时可见,只是为了演示转换,它应该如下所示:

原始和净化后的输入

该参数必须隐藏!

注意: 请勿使已清理的参数可见,如部署报告中的上述屏幕截图所示!这样做意味着它不会在第一次渲染后拾取对输入值所做的更改。
请记住,我们已经利用了默认值,我们没有任意定义 en 表达式来始终执行。

隐藏参数时的输出是在呈现报表时计算的,只是很难在这个静态帖子中可视化行为:

隐藏的清理参数

在您的数据集查询中,您只需使用经过清理的参数:

SELECT * FROM Table WHERE Unique_ID IN (@sanitisedMultiValue)
Run Code Online (Sandbox Code Playgroud)