我对Crystal报表很新,并使用Crystal Reports 2008来满足我们的报表需求。
我们要求来自单一来源的数据需要以3种不同的方式呈现在报告中。
因此,我设计它的方式是,将3个不同的子报告与数据源设置为来自DB的相同过程和容纳这些子报告的容器报告。根据用户选择单独或分组查看报告,我可以抑制/不抑制容器报告中的子报告。
报告根据当前设计的要求完美运行。但是,当用户选择一起查看所有3种呈现模式时,即当调用所有3个子报告时,我对报告的性能感到困扰。显而易见的原因是,通过子报告从DB中获取的数据相同,而不是在子报告中一次性获取和重用。我认为应该有一种方法可以在子报告之间共享来自源的数据集,而无需再次访问数据库。但我还没有找到一种方法在Crystal Reports中做到这一点。有没有办法可以明显地实现这一点,以获得性能优势?
备注:
1)我选择了3个独立子报告的设计来呈现相同的数据 因为要求要求模块化。但我知道, 通常不建议在使用数据时使用子报告 相同。
2)每个子报告中的数据表示相当复杂。每 子报告使用至少4到5个组部分,而它们不是 子报告中也是如此。所以基本上我不知道一种方法 实现具有多个组部分的不同演示文稿 单个报告,不使用子报告来解决此问题 性能问题。
3)我几乎已经优化了DB程序中的所有内容 不是痛点。
我正在环顾四周使用谷歌,我从我的理解中假设,我正在寻找像Crystal Reports中的SSRS数据区域这样的功能。我可能错了,因为我不了解SSRS并且不理解我读到的数据区域。
总而言之,Crystal Reports是否支持我想要的功能,从主容器报告中的数据库中获取数据并在子报告中传递/使用它而不再次访问数据库?
答案 0 :(得分:2)
子报表绑定到数据源,就像主报表一样。主报告中的数据通常作为参数传递。据我所知,绑定过程中没有数据缓存。如果您通过自定义报表查看器显示报表,则可以将子报表的数据源与主报表绑定到相同的数据源,并将额外的往返行程保存到服务器。否则,根据您的描述,如果主报表和子报表的数据来自同一存储过程,您可以创造性地使用条件格式来隐藏/显示组部分。