s-s-rS 多值参数只返回最后一个值

Posted

技术标签:

【中文标题】s-s-rS 多值参数只返回最后一个值【英文标题】:s-s-rS multi-value parameter only returning the last value 【发布时间】:2021-09-01 16:13:01 【问题描述】:

上个月,我在各种报告中都遇到了同样的问题。在此之前,我对多值参数没有任何问题。我必须小心我在这里分享的内容,因为这些是我正在为我的工作场所编写的报告。

基本上,我的查询中返回了超过 28000 条不带参数的记录。我在

中的查询中添加了@ManagingDistrict
WHERE MNG_DIST_CD IN (@ManagingDistrict)

在 s-s-rS 中,我将参数标记为“允许多个值”,并在可用值中添加了 01、02、03、04、05、06、07、99,它们是我们的区号。

在“数据集属性”窗口的“变量”选项卡下,我添加了连接语句。

我跑了报告,只得到了 1 个区,最后一个。 所以我尝试将相同的连接语句添加到我的报告属性>变量选项卡中:

我仍然只输入最后一个值。这是我的报告预览选项卡的屏幕截图:

如您所见,它显示:01,02,03 但报告仅显示区 03。我尝试添加更多区,但它始终是列表中的最后一个。我什至尝试过

MNG_DIST_CD IN (SELECT VALUE FROM STRING_split(@ManagingDistrict , ','))

在我的查询中,但不断收到错误消息,指出我的 string_split 函数中有太多参数。

有什么建议吗?我已经阅读了 100 篇关于这个主题的帖子,我发现大多数帖子要么涉及 udf,要么作者忘记使用 in 子句。

这是我查询中的实际 where 语句:

WHERE CAT_CD IN (1,2) AND SPEC_SQ IN (24,31,68,213) AND SMPL_DT BETWEEN @StartDate AND @EndDate and (@ManagingDistrict = '' OR MNG_DIST_CD IN (@ManagingDistrict));

我最初有这个语句并且只设置了“允许多个值”的参数属性,但收到错误消息“非布尔类型的表达式......”

【问题讨论】:

【参考方案1】:

如果您的数据集查询不是存储过程,那么您不需要使用 JOIN 来传递值。s-s-rS 会自动将您的值列表转换为逗号分隔的字符串并将其注入 SQL 语句。

数据集查询中不需要任何变量等。

【讨论】:

我最初尝试只在参数属性中使用“允许多个值”和查询中的 in (@ManagingDistrict),但收到错误消息“在上下文中指定的非布尔类型的表达式在“,”附近预计有一个条件。 作为测试尝试取出@ManagingDistrict = '' OR 我运气不好。我已经从 where 子句中删除了所有内容,除了 in(@ManagingDistrict。我要么收到错误消息,要么在选择多个值时没有得到任何结果。我还使我的查询变得最简单,没有任何变化。 不知道为什么,我取出了参数中的可用值。如果您在预览屏幕中键入值并为每个值按回车键。有用。我认为这与逗号有关,但不知道该怎么做或如何解决我可以有一个选择列表。 我说的是当您说“在预览屏幕中键入值并为每个值按回车”时。手动添加到可用列表和从数据库中获取列表应该基本相同。请记住,如果您执行IN (@myParameter) 而不是标签,则传递给查询的是参数的Value。还要确保参数数据类型是文本(即使它是数字)。如果您选择 1 和 2,查询将是 WHERE myColumn IN(1, 2)

以上是关于s-s-rS 多值参数只返回最后一个值的主要内容,如果未能解决你的问题,请参考以下文章

s-s-rS 多值参数

s-s-rS 中的可选多值参数

将多值列表值传递给 s-s-rS 报告参数的 SSAS 报告操作

使用 s-s-rS 表达式查看用户从多值参数中选择了哪些选项?

在 s-s-rS 2008 中,如何在文本框中同时显示多值参数的标签和值?

需要解释将 s-s-rS 多值参数传递给 SQL 的工作原理