4

我正在尝试添加一个子报表并将参数从我的主报表传递到子报表。当我将所有内容链接起来时,子报告会遍历数千条记录,以查找有关我的测试对象的保险信息,但没有记录。

如果我使用查询工具并使用我希望在 Crystal 报表查询中添加的 WHERE 子句运行查询,则需要几毫秒才能返回任何行。

当我在 Crystal 报表中运行预览时,需要几分钟才能浏览所有记录。为什么查询不返回应有的记录?或者只是我正在寻找的一个特定的,如果有记录的话?我不希望所有 10,000 多条记录都返回给水晶,只是我应该根据我从主报告传递的参数得到的一个或零!

感谢您的指导,莱斯利

编辑:我对需要 PatID 和 Episode_Number 的主报告进行了查询。我对我的子报告有一个查询,我想根据 SAME PatID 和 Episode_Number 进行过滤。子报表查询为:

select b.patid, b.episode_number, b.guarantor_name, Trim(b.guar_address_line1|| ' ' || ifNull(b.guar_address_line2, '')) address, b.guar_address_city || ', ' || b.guar_address_state || ' ' || b.guar_address_zip location, b.guar_phone_number from billing_guar_data b

我没有在这个命令中添加任何“额外”参数。我有通过此链接添加的这些参数: Pm-Command.PATID and Pm-Command.Episode_Number

我在创建子报告时从链接页面中选择的

4

2 回答 2

3

我以前做过。我花了一段时间才弄清楚如何将参数输入到子报表中的 SQL 命令中。确实,您拥有的 SQL 将获取所有记录,因为没有where子句。如果您传递参数以在Select Expert中获取它,则您在检索 10,000 多条记录后进行过滤。从主报表中,参数必须进入子报表的 SQL 命令才能检索特定记录。这是如何做到的。

您可以从主报告传递原始参数或字段(如果可用)。由于您编写了“Pm-Command.PATID 和 Pm-Command.Episode_Number”,因此您正在传递该字段。首先,在 SQL 命令中添加where子句

select 
   b.patid, b.episode_number, b.guarantor_name, Trim(b.guar_address_line1|| ' ' || ifNull(b.guar_address_line2, '')) address, b.guar_address_city || ', ' || b.guar_address_state || ' ' || b.guar_address_zip location, b.guar_phone_number 
from
   billing_guar_data b
where
   b.patid = {?Pm-Command.PATID}
   and b.episode_number = {?Pm-Command.Episode_Number}

接下来,在侧面参数列表的同一窗口中,创建 2 个参数

  • Pm-Command.PATID
  • Pm-Command.Episode_Number

然后在主报告中显示更改子报告链接...您发送的 2 个参数应该仍然存在。确保在两个参数上都未选中“根据字段选择子报表中的数据”。如果选中此项,它会将参数发送到Select Expert。因为它将在 SQL 命令中,所以应该取消选中它。

于 2012-10-27T08:46:51.317 回答
0

Crystal 可能没有对您认为的子报表使用 WHERE 子句。这可能是因为您在子报表的记录选择公式中使用了 Crystal 语法或 Crystal 函数,它无法转换为 SQL。发生这种情况时,它将从数据库中获取所有记录并在本地执行记录选择,这听起来就像您的情况一样。

要检查子报表的查询,首先预览整个报表,然后在 Crystal 中自己的选项卡中打开子报表(这将像在 Crystal 中自己的报表一样打开它),然后转到“数据库”->“显示 SQL 查询”。

如果您发布选择标准,那也会有所帮助。

于 2012-10-26T17:00:07.583 回答