当我有多个表时如何使用详细信息部分
How do I use the Detail Section when I have multiple Tables
我最近不得不接手使用 CR 2013 创建报告,但我得到的介绍有点乏味,所以我 运行 有时会遇到一些问题。
最近我不得不第一次使用详细信息部分,因为我能够以某种方式仅通过分组和子报表来处理以前的报表。
现在,我所做的是创建一份报告,在 table 中列出每个人的某些个人资产。
首先我按组织分组,然后按人员分组,然后将带有资产的字段放入详细信息中。
在我应该附加一个只有在包含任何记录时才应显示的子报表之前,这工作正常。
在我的第一次尝试中,如果子报表的主要对象的 ID 字段为 Null,我将子报表附加到报表页脚并取消了该部分。
但这导致详细信息部分中的所有个人资产都被复制,我猜是因为它重印了原始 table 和子报告中所有记录的详细信息。
我通过从主记录中删除 table 并在其自身内抑制子报表来解决这个问题。
但是有没有办法只打印特定table记录的详细部分?甚至有理由这样做吗?我问是因为我想确定我理解这些概念。
提前致谢。
我了解到第二个 table 的引入导致了细节的重复,因为它导致 Crystal 生成两个 table 的笛卡尔积。
我们这样称呼两个table方便:TableA,TableB。
当您仅使用 TableA 时,认为 Crystal 这样做:
select * from TableA
然后你引入TableB,然后Crystal会这样做(只是一个心智模型,我不是说它真的会做):
select * from TableA, TableB
如果您理解 SQL,您会注意到发生了什么:两个 table 中所有元素的组合。
然后,详细信息部分将考虑此组合的每个结果。
例如:表A = {1,2};表 B = {X,Y};结果 = {1X,1Y,2X,2Y}
一般来说,有两种方法可以避免这种情况。我不知道哪个适用,因为我不知道你的案例的所有细节。
- 让您的主报表只知道 TableA,子报表只知道 TableB。
- 创建一个额外的组(代理,最里面)。它应该按 TableA 中的唯一值分组(Id 值会很好)。然后将字段从详细信息部分移动到这个新的组页脚部分并隐藏详细信息部分。
还有另一种方法:在两个 table 之间创建一个 link,但这可能取决于数据,所以我不能说它会起作用。这将导致 Crystal 做类似的事情:
select * from TableA, TableB where TableA.Id = Table.ReferenceToA
它可能会删除重复项。
我最近不得不接手使用 CR 2013 创建报告,但我得到的介绍有点乏味,所以我 运行 有时会遇到一些问题。
最近我不得不第一次使用详细信息部分,因为我能够以某种方式仅通过分组和子报表来处理以前的报表。
现在,我所做的是创建一份报告,在 table 中列出每个人的某些个人资产。 首先我按组织分组,然后按人员分组,然后将带有资产的字段放入详细信息中。
在我应该附加一个只有在包含任何记录时才应显示的子报表之前,这工作正常。 在我的第一次尝试中,如果子报表的主要对象的 ID 字段为 Null,我将子报表附加到报表页脚并取消了该部分。
但这导致详细信息部分中的所有个人资产都被复制,我猜是因为它重印了原始 table 和子报告中所有记录的详细信息。
我通过从主记录中删除 table 并在其自身内抑制子报表来解决这个问题。
但是有没有办法只打印特定table记录的详细部分?甚至有理由这样做吗?我问是因为我想确定我理解这些概念。
提前致谢。
我了解到第二个 table 的引入导致了细节的重复,因为它导致 Crystal 生成两个 table 的笛卡尔积。
我们这样称呼两个table方便:TableA,TableB。
当您仅使用 TableA 时,认为 Crystal 这样做:
select * from TableA
然后你引入TableB,然后Crystal会这样做(只是一个心智模型,我不是说它真的会做):
select * from TableA, TableB
如果您理解 SQL,您会注意到发生了什么:两个 table 中所有元素的组合。
然后,详细信息部分将考虑此组合的每个结果。
例如:表A = {1,2};表 B = {X,Y};结果 = {1X,1Y,2X,2Y}
一般来说,有两种方法可以避免这种情况。我不知道哪个适用,因为我不知道你的案例的所有细节。
- 让您的主报表只知道 TableA,子报表只知道 TableB。
- 创建一个额外的组(代理,最里面)。它应该按 TableA 中的唯一值分组(Id 值会很好)。然后将字段从详细信息部分移动到这个新的组页脚部分并隐藏详细信息部分。
还有另一种方法:在两个 table 之间创建一个 link,但这可能取决于数据,所以我不能说它会起作用。这将导致 Crystal 做类似的事情:
select * from TableA, TableB where TableA.Id = Table.ReferenceToA
它可能会删除重复项。