db2 - 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)
解决方案
我使用数据集中的表达式解决了这个问题
在数据集中去选择查询参数去你想要放置条件的各个字段
=IIF(Parameters!PRSalesManCode.Value <>
"ALL",Parameters!PRSalesManCode.Value,Parameters!PRSalesMan.Value)
这里 Parameters!PRSalesMan.Value 是我从 ASPX 页面发送的值,它存储为隐藏参数
参数!PRSalesManCode.Value 是报表下拉列表中的选定值
所以我与 ALL 比较并根据条件传递值
注意:我观察到 AS400 中没有 if 概念,所以我们不能在查询中使用它,同时在 ssrs 中形成数据集(不完全确定)
推荐阅读
- python - 碰撞激活时如何使我的“游戏结束”文本保持不变?
- python - 用 selenium 和 python 抓取
- javascript - 如何清理画布并重新绘制
- c# - c# wpf应用程序中的两个xml请求
- java - org.springframework.validation.BeanPropertyBindingResult:5 个错误
- .net - Xamarin web api等平台时间问题
- java - 如何在 Android Studio 上精确定位到我的 MapView 的不同位置?
- java - 分页库的意外行为
- swift - 在 ViewController 和 SwiftUI 之间共享变量
- javascript - Redux Saga Multiple Put 不能在没有延迟的情况下工作