SSRS - 数据集上的筛选属性:如何使其成为条件或与 OR 子句组合?

问题描述 投票:0回答:1

好吧,这有点令人困惑。我们的运营/报告数据位于 Oracle 数据库中。我们有用户想要在 SSRS 报告中对学生列表进行搜索。其中一些用户拥有超过 1000 个 ID 的学生列表。我们为他们创建了一个流程来创建存储这些值的自定义列表,但它们存储在 SQL Server 数据库中。在 SSRS 中,我们使用一个数据集从 SQL Server DB 获取学生 ID 列表,然后将这些值传递到“主”查询中以从 Oracle 获取数据。由于 Oracle 的参数值限制超过 1000 个,因此当用户尝试使用具有超过 1000 个 id 的自定义列表时会出现错误。不理想。我想出了如何通过删除

来解决 SQL 中的问题
WHERE PERSON_UID IN(:AllPIDMS)

从 SQL 查询并将其移动到数据集属性中的实际过滤器属性。 有用!我已成功让我的报告从 Oracle 表中返回 3000 多个学生。

太棒了!

但是,如果用户更愿意按其他参数(学院、学生级别等)进行过滤,则该报告根本不需要用户输入任何学生。因此,如果用户没有输入任何要过滤的学生 ID,我需要能够禁用过滤器。所以本质上是这样的:

PERSON_UID IN [@AllPIDMS] AND [@UsePIDMS] = 'Y'

OR

[@UsePIDMS] = 'N'    --in which case, don't filter on person_uid at all

这有道理吗?有没有人找到更好的方法来绕过 1000 值限制?有没有人找到一种方法来使过滤器属性成为有条件的?

我没有权限在 Oracle DB 中创建临时表来存储 ID,并且尝试对 1000 多个值进行元组(此特定报告的相关人员有 8000 名学生的列表)似乎是一场噩梦。将列表分解为多个 999 个值块也是如此。任何帮助将不胜感激!!

reporting-services oracle11g ora-01000
1个回答
0
投票

我想通了!因此,我已经通过将过滤器从查询代码移动到过滤器属性来修复 1000 个值的限制。我能够发送 1000 多名学生的名单。问题是使新的 SSRS 结构过滤器处理不发送任何学生 ID。归根结底是在没有输入 ID 的情况下定义学生 ID 的“集合”。就我而言,如果没有输入学生,则学生列表 = 0(这些都是隐藏参数,使其可见,以便您可以看到进度):

所以我将此代码添加到 Filter 属性中的表达式中:

因此,如果输入了学生(AllPIDMS <> 0),这就是“代码结果”

WHERE PERSON_UID IN(:AllPIDMS)

但是如果没有输入学生ID(AllPIDMS = 0),这就是代码结果:

(0) 中的 0

评估结果为真。

这运行得不是很快,但比其他绕过 1000 值限制的方法更容易/更快/更优雅。

我希望这对其他人有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.