SSRS 如何将结果限制为仅在多值参数中选择所有值的组

问题描述 投票:0回答:1

我发布了包含按 user.name 分组的列 user.name 和 item.type 的表。我有一个多值下拉参数列出@Item。我想将结果限制为仅具有所有选定参数值的组。

Dataset1 查询是:

SELECT 
user.name
, item.type
FROM
 user
INNER JOIN item
  ON user.name = item.user
Where item.type IN (@Type)

然后我有一个下拉参数(@Type),其中包含数据集 2 中的可用值。值字段和标签字段设置为类型。

数据集 2 查询是:

SELECT DISTINCT
item.type

数据示例:

姓名 项目
约翰 片材
约翰 毯子
约翰 肥皂
毯子
丽莎 毯子
丽莎 片材
迈克 片材

如果在 @Item 中选择了 Sheet 和 Blanket,我希望得到 John 和 Lisa 的结果,如下所示:

姓名 项目
约翰 片材
约翰 毯子
丽莎 毯子
丽莎 片材

相反,我得到:

姓名 项目
约翰 片材
约翰 毯子
毯子
丽莎 毯子
丽莎 片材
迈克 片材

我正在获取在参数中选择任何值的任何用户的结果。 我只想要参数中选择了所有值的用户的结果。

reporting-services
1个回答
0
投票

由于 SSRS 将多参数值注入数据集查询的方式,这有点麻烦,它基本上用逗号分隔的值列表替换您的选择,但包含每个元素周围的引号。

这个答案背后的想法是计算传入值的数量,并与每个用户的计数进行比较。

由于 SSRS 多值处理,我们不能只计算传入的数量,因此我们有两个选择。

第一个是从项目表中获取计数,其中

type
与类型参数匹配,如下所示...

declare @user table ([Name] varchar(20))
declare @item table ([Name] varchar(20), [Type] varchar(20))

INSERT INTO @user 
    VALUES 
        ('John'), ('Jane'), ('Lisa'), ('Mike')

INSERT INTO @item 
    VALUES 
        ('John', 'Sheet'), ('John', 'Blanket'), ('John', 'Soap'),
        ('Jane', 'Blanket'),
        ('Lisa', 'Sheet'), ('Lisa', 'Blanket'),
        ('Mike', 'Sheet')

SELECT 
    [Name], [Type] as Item
    FROM 
    (
        SELECT 
            u.[Name]
            , i.[Type]
            , count(*) OVER(PARTITION BY u.[Name]) as ItemCount
        FROM @user u
            INNER JOIN @item i
                ON u.[Name] = i.[Name]
        WHERE i.[Type] IN (@Type)
    ) a 
    WHERE a.ItemCount = (SELECT COUNT(DISTINCT(Type)) FROM @item WHERE [Type] IN (@Type))

第二种方法是将计数作为参数传入,在这种情况下我们可以将最终的

WHERE
换成这个

WHERE a.ItemCount = @iCount

我们还必须添加

iCount
作为数据集参数并将其值设置为

=Parameters!Type.Count()

像这样...

这是报告的结果

然后选择 3 个

© www.soinside.com 2019 - 2024. All rights reserved.