我在SSRS中有一些参数值,我根据这些参数来填充数据集。但是我有一个名为Employee的参数,其中包含员工姓名和代码值。此Employee的第一个值是'ALL',因此当用户单击ALL时,显示所有员工详细信息。
我想根据员工价值更改我的查询,即如果它是“全部”,那么它是一个不同的条件和员工编码不同的条件
我已经在stackoverflow中检查了类似的问题,他们说要使用If条件但是我连接到AS400,并且如果查询设计器中没有接受条件。
问题出在我的查询的这一部分,SLSMCD是销售员代码。这个查询适用于所有员工,即适用于所有员工)
(SLSMCD IN
(SELECT WEMEMCD
FROM VHTEMPL VHTEMPL_1
WHERE (WEMEMCD = ?) OR
(WEMTLCD = ?) OR
(WEMGLCD = ?) OR
(WEMBHCD = ?) OR
(WEMTCMCD = ?) OR
(WEMGCMCD = ?) OR
(WEMBCMCD = ?) OR
(WEMHOTLCD = ?) OR
(WEMHOGLCD = ?) OR
(WEMHHODCD = ?) OR
(WEMGHODCD = ?)))
现在对于个别员工来说,查询应该是
(SLSMCD IN
(SELECT WEMEMCD FROM VHTEMPL VHTEMPL_1 WHERE (WEMEMCD = ?)
我尝试使用AND和OR条件将事物与().E.g分组
(SLSMCD IN (SELECT WEMEMCD FROM VHTEMPL VHTEMPL_1
WHERE (WEMEMCD = ? and ? <> 'ALL')
但SSRS自动删除()并使其像(WEMEMCD =?)AND(?<>'ALL)
我使用数据集中的表达式解决了这个问题
在数据集中,选择查询参数转到要放置条件的相应字段
=IIF(Parameters!PRSalesManCode.Value <>
"ALL",Parameters!PRSalesManCode.Value,Parameters!PRSalesMan.Value)
这里参数!PRSalesMan.Value是我从ASPX页面发送的值,它被存储为隐藏的参数
参数!PRSalesManCode.Value是报告下拉列表中的选定值
所以我与ALL比较并根据条件传递值
注意:我观察到AS400中没有if概念,所以我们不能在ssrs中形成datset时在查询中使用它(不完全确定)