SSRS-如何在连接IBM DB2(AS400)作为数据源时基于参数值更改查询

时间:2019-02-19 06:07:30

标签: db2 ssrs-2008

我在SSRS中有一些参数值,并且我正在基于这些参数填充数据集。但是,我有一个名为Employee的参数,具有雇员名称和代码值。此Employee的第一个值为'ALL',因此当用户单击全部,将显示所有员工详细信息。

我想根据员工的值更改查询,即,如果它是“ ALL”,那么它的where条件是不同的,而对于员工代码则是where条件不同的

我在stackoverflow中检查了类似的问题,他们说要使用If条件,但是我正在连接到AS400,并且查询设计器中如果If条件未被接受。

问题出在我的查询的这一部分,SLSMCD是业务员代码。此查询适用于ALL Conditon,即适用于所有员工)

                      (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条件将事物与()分组。例如

(SLSMCD IN (SELECT WEMEMCD FROM            VHTEMPL VHTEMPL_1
 WHERE        (WEMEMCD = ? and ? <> 'ALL')

但是SSRS会自动删除()并使其像(WEMEMCD =?)AND(?<>'ALL)

1 个答案:

答案 0 :(得分:0)

我使用数据集中的表达式解决了这个问题

在数据集中 去选择查询参数 转到要设置条件的相应字段

=IIF(Parameters!PRSalesManCode.Value <> 
"ALL",Parameters!PRSalesManCode.Value,Parameters!PRSalesMan.Value)

这里的参数!PRSalesMan.Value是我从ASPX页面发送的值,并存储为隐藏参数

Parameters!PRSalesManCode.Value是报表下拉菜单中的选定值

SO i与ALL进行比较,并根据条件传递值

注意:我观察到AS400中没有if概念,因此在ssrs中形成数据集时我们不能在查询中使用它 (不确定)