我最近不得不接手使用CR 2013创建报表,但是我得到的介绍有点晦涩难懂,因此我有时会遇到一些问题。
最近,由于我能够以某种方式仅通过分组和子报表来处理以前的报表,所以我不得不第一次使用详细信息部分。
现在,我正在做的是创建一个报告,在表中列出每个人的某些个人资产。首先,我按组织分组,然后按人员分组,然后将字段及其资产放入详细信息。
这很好,直到我应该附加一个子报表,该子报表仅在包含任何记录时才显示。在我的第一次尝试中,如果子报表主要对象的ID字段为Null,则将子报表附加到报表页脚中并禁止显示该部分。
但是这导致重复了详细信息部分中的所有个人资产,我想是因为它重新打印了原始表和子报表中所有记录的详细信息。
我通过从主记录中删除表并抑制其内部的子报告来解决此问题。
但是有一种解决方案,只为特定表的记录打印明细部分?甚至有理由这样做吗?我之所以问是因为我想确保自己理解以后的概念。
谢谢你。
我知道第二张表的引入引起了细节的重复,因为它使Crystal产生了两张表的笛卡尔积。
为了方便起见,我们这样调用两个表:TableA,TableB。
[仅使用TableA时,请认为Crystal可以这样做:
select * from TableA
然后您介绍TableB,然后Crystal会做到这一点(只是一种心理模型,我并不是说它确实做到了):
select * from TableA, TableB
如果您了解SQL,您会注意到会发生什么:两个表中所有元素的组合。
然后,详细信息部分将考虑此组合的每个结果。
例如:TableA = {1,2}; TableB = {X,Y};结果= {1X,1Y,2X,2Y}
通常,有两种方法可以避免这种情况。我不知道哪一个适用,因为我不知道您案件的所有细节。
还有另一种方法:在两个表之间创建链接,但是可能取决于数据,所以我不能声称它会起作用。这将导致Crystal做类似的事情:
select * from TableA, TableB where TableA.Id = Table.ReferenceToA
它可能会删除重复项。