我创建了一个包含以下表格的报告:
ID | User | SalesA | SalesB | SalesOk | Status | StatusOk
1 | AAAA | 100 | 100 | 1 | Active | 1
2 | BBBB | 200 | 100 | 0 | Active | 1
3 | CCCC | 600 | 600 | 1 | Inactive | 0
4 | DDDD | 100 | 0 | 0 | Inactive | 0
我想在不同条件下过滤此表格,例如:
我已设法在2个不同的过滤器中执行此操作(在我的查询中使用2个不同的参数),但我想知道是否可以在一个过滤器中执行此操作。
因此,在我的报告中,不是这个(我现在已经做好了):
我想要更像这样的东西:
有没有办法实现这个目标?我目前正在使用SSRS 2012
答案 0 :(得分:1)
使用示例数据在SQL Server中运行等效的SQL查询:
DECLARE @temp TABLE(ID int, [User] char(4), SalesA int, SalesB int
,SalesOk bit, [Status] varchar(8), StatusOK bit)
INSERT INTO @temp VALUES
(1, 'AAAA', 100, 100, 1, 'Active', 1)
,(2, 'BBBB', 200, 100, 0, 'Active', 1)
,(3, 'CCCC', 600, 600, 1, 'Inactive', 0)
,(4, 'DDDD', 100, 0, 0, 'Inactive', 0)
DECLARE @selection varchar(100) = 'Show Sales Ok'
--'Show Active Users'
SELECT *
FROM @temp
WHERE CASE WHEN @selection = 'Show Active Users'
THEN [StatusOK]
WHEN @selection = 'Show Sales Ok'
THEN [SalesOk]
END = 1
在示例中,为了清楚起见,我使用@selection
作为varchar(100)。尝试将其设置为值' Show Sales Ok'和'显示活跃用户'
使用@selection
的2个不同值运行查询,并注意它会根据值过滤不同的字段。
要将此应用于SSRS报告,请注释掉@selection数据类型声明,并在SSRS报告中放置一个类似命名的参数@selection。您填充参数'可用值'使用SQL查询数据集。
实施例
SELECT 'Show Sales Ok' AS [SELECTION]
UNION ALL
SELECT 'Show Active Users'
答案 1 :(得分:1)
您可以在两个过滤器中测试所选参数值的列表。
选项1没有“无过滤器”选项
假设您的参数名为@Selection
,您的标签/值对看起来像这样......
'Show Sales OK' 'SalesOK'
'Show Active Users' 'ActiveUsers'
...那么过滤器就像是
Expression = [SalesOK]
Operator = "="
Value (expression) =IIF(Array.IndexOf(Parameters!Selection.Value, "SalesOK") > -1,1,0)
然后对StatusOK字段执行相同操作,将文本更改为“ActiveUsers”
选项2带有“无过滤器”选项
如果你想说如果没有设置参数选项然后忽略它(即如果设置了销售确定但是活动用户没有在销售确定上过滤那么它有点诡计但不多......
首先,添加一个额外的参数选项,说“No Filter”并将值设置为SalesOKActiveUsers,这样你的标签/值对就像这样......
'Show Sales OK' 'SalesOK'
'Show Active Users' 'ActiveUsers'
'No Filter' 'SalesOKActiveUsers'
(我们这样做,所以我们可以在单个过滤器表达式中测试两个参数值)
然后将过滤器更改为注意我们现在检查<>
而不是=
Expression = [SalesOK]
Operator = "<>"
Value (expression) =IIF(Array.IndexOf(Parameters!Selection.Value, "SalesOK") > -1, 0, 2)
注意:我们将false值设置为2 ,因为我们测试列值不等于它,如果添加更多列值,只需将2更改为不是'在表中并更改表达式以匹配(例如-999)
否,如果您从下拉列表中选择No Filter
,则会显示所有记录。
答案 2 :(得分:0)
您可以通过在过滤条件中设置iif
语句来检查两个要求,如果匹配与否则返回1
或0
。然后,您可以检查此1
/ 0
以过滤数据。
例如:
Expression: =iif(Fields!SalesA.Value = Fields!SalesB.Value, iif(Fields!StatusOK.Value = 1, 1, 0), 0)