首页 > 解决方案 > SSRS-连接IBM DB2(AS400)作为数据源时如何根据参数值改变查询

问题描述

我在 SSRS 中有一些参数值,我正在根据这些参数填充数据集。但是我有一个名为 Employee 的参数,其中包含员工姓名和代码值。这个 Employee 的第一个值是“ALL”,因此当用户单击 ALL , 显示所有员工详细信息。

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

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

问题在于我的查询的这一部分,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 条件将事物与 () 进行分组。例如

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

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

标签: db2ssrs-2008

解决方案


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

在数据集中去选择查询参数去你想要放置条件的各个字段

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

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

参数!PRSalesManCode.Value 是报表下拉列表中的选定值

所以我与 ALL 比较并根据条件传递值

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


推荐阅读