水晶报告 - 链接子报告参数

时间:2012-10-26 16:48:55

标签: crystal-reports

我正在尝试添加子报表并将参数从主报表传递到子报表。当我链接所有内容时,子报告会运行数千条记录,查找我的测试主题的保险信息,但没有记录。

如果我转到查询工具并使用我希望在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

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

2 个答案:

答案 0 :(得分:2)

我以前做过这个。我花了一些时间来弄清楚如何在子报表中获取参数到SQL命令。这是真的,你在那里的SQL将获取所有记录,因为没有 where 子句。如果您要传递参数以在选择专家中获取它,则在检索10,000+条记录后进行过滤。从主报表中,参数必须进入子报表的SQL命令,以便检索特定记录。这是如何做到的。

您可以从主报告传递oiginal参数或字段(如果可用)。由于你写了“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个参数应该仍然存在。确保在两个参数上取消选中“在子报表中选择基于字段的数据”。如果选中此选项,则会将参数发送到选择专家。因为它将在SQL命令中,所以应该取消选中它。

答案 1 :(得分:0)

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

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

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