在Crystal Reports 2008中更新Reports以使用Oracle函数进行筛选



我有几个报告,每个报告上都包含一些表。

比方说3张表,表A、表B和表C。我想使用以下Oracle函数来过滤同时传递报告参数的结果集:

AND function(tableB.field1, tableB.field2, tableB.field3, {?report_parameter}) = 'S'

需要注意的事实:

  • Oracle函数只能用于Crystal Reports中的SQL表达式和/或SQL命令
  • SQL表达式不能包含报表参数(因此,不是选项)
  • Crystal Reports允许您用SQL命令替换报表表,但不允许将多个表替换为单个SQL命令
  • 我们不想重新构建所有的报告
  • 我们不想将单个表替换为SQL命令,因为Crystal在执行报告时不会在单个查询上转换表和SQL命令,因此它会在较高级别上影响性能
  • 此Oracle函数从其他表中选择数据,因此不能在报表自定义函数中重写
  • {?report_parameter}是只有应用程序知道的信息。它由应用程序在将报告导出给用户之前填写

我能做些什么来解决这个问题?

我不知道你的函数为什么需要表和参数,只能给你一些模糊的、未经测试的选项。没有一个选项是理想的:

  • 将Oracle函数重写为"自定义函数"(CF);在记录选择公式中引用CF;过滤器将应用WhileReadingRecords(即函数不会发送到数据库)
  • 将函数重写为一个存储过程,该过程接受一个参数,但返回一个记录集(CrystalReports将识别该参数);将其他表连接到存储过程。存储过程的编写方式需要支持Crystal Reports的数据需求(在asp.net应用程序中使用带有参数的存储过程的结果作为量表图表-Crystal报告的值)

最新更新