首页 > 解决方案 > 在多值参数上选择“全选”时如何做出不同的行为

问题描述

我有一份报告服务报告和一个 stopproc。该报告有一个多值参数,使用如下:

<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,我是个菜鸟,所以请清楚复杂的部分。提前致谢!

==EDIT== 尝试使用@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' 的表达式包括聚合或查找函数。聚合和查找函数不能在查询参数中使用表达式。”

标签: sqlsql-serverreporting-services

解决方案


尝试这个:

IF @Aannemer IS NULL  
BEGIN
  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
END
ELSE
BEGIN
  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,','))
END

推荐阅读