【发布时间】:2019-09-09 11:40:34
【问题描述】:
我有一份报告服务报告和一个 stoproc。该报告有一个多值参数,使用如下:
<QueryParameter Name="@Aannemer">
<!-- Joins the multivalue selection into a single comma separated string. -->
<Value>=Join(Parameters!Aannemers.Value,",")</Value>
<rd:UserDefined>true</rd:UserDefined>
</QueryParameter>
stoproc 使用 string_split 拆分多值参数。 stoproc 很长,所以这里有一个较小的版本:
@Aannemer AS NVARCHAR(max) = NULL
[...]
SELECT DISTINCT PV.ProefvakID
FROM [dbo].[Proefvak] PV
LEFT OUTER JOIN Meetvak MV ON MV.ProefvakID = PV.ProefvakID
LEFT OUTER JOIN Uitvoerder UI ON UI.UitvoerderID = MV.UitvoerderID
WHERE (UI.Uitvoerder IN(select value from string_split(@Aannemer,',')) OR @Aannemer IS NULL )
到目前为止,这一切都像一个魅力。
如果用户为 Aannemer 参数选择“全选”,他希望查看所有 Proefvak 并且根本不过滤 Aannemers。 但是,如果存在未连接 Meetvak 的 Proefvak,则永远不会列出 Proefvak(因为 Meetvak 拥有 Uitvoerder 而 Proefvak 没有 Meetvak)。用户仍然希望看到没有 Meetvak 的 Proefvak。
有没有办法在 stoproc 中检查用户是否选择了“全选”,以便我可以返回所有 Proefvak?
我希望你能理解我想要完成的工作。谈到 SQL,我是个菜鸟,所以请清楚复杂的部分。提前致谢!
==编辑== 尝试使用@EddiGordo 的解决方案,看起来很有希望。下一个问题是@Aannemer 参数不包含值“全选”,因为这不是实际值。所以我尝试像这样编辑SSRS端的代码:
<QueryParameter Name="@Aannemer">
<!-- Joins the multivalue selection into a single comma separated string. This paramater should be split up in the stored procedure. -->
<Value>
=IIF(Parameters!Aannemers.Count = COUNT(1, "Aannemers")
, "Select All",
Join(Parameters!Aannemers.Value,","))
</Value>
<rd:UserDefined>true</rd:UserDefined>
</QueryParameter>
但我无法像这样部署 SSRS 代码,我收到此错误: "用于数据集 '@Aannemer' 中的参数 '@Aannemer' 的表达式包括聚合或查找函数。聚合和查找函数不能用于查询参数表达式。"
【问题讨论】:
标签: sql sql-server reporting-services