在水晶报告中展平数据

时间:2009-10-15 21:24:29

标签: crystal-reports

好的,这可能是一个奇怪的请求,但是可以在水晶报告中基本上展平我的数据集吗?

我在C#中创建了一个用连接创建的数据表,所以当它在报告中点击它的2条记录时。大多数列都有相同的数据,最后几列显示不同的地址。

我不需要多次打印细节部分而是使用大多数相似的数据,而是需要显示1条“记录”,其中公共数据打印一次,每个记录地址排列在旁边。如同,所有公共字段显示在一个区域中,然后在记录中的地址字段旁边,其中'AddressType = 1',然后旁边的地址字段'AddressType = 2'

这是子报告吗?因为即使使用子报表,我也无法仅使用第一条记录中的数据打印1个详细信息部分。

这甚至可以用水晶吗?由于长期存在的原因,我无法在数据到达报告之前将其展平。

4 个答案:

答案 0 :(得分:1)

好的,办公室里有人给我指路,所以我会把它放在那里。

给定cols A,B,C的数据,所有的共同点和D,E在不同的行中有所不同,这就是我'平化'水晶中的数据集的方式:

  1. 根据col A创建一个组,并将A,B,C放在该组头中 - 完全删除详细信息部分
  2. 在每个数据行的组头中创建一个子报表,在我的案例中为2个子报表
  3. 在每个子报表中,放置字段D,E。重要提示:这些子报告没有链接!
  4. 对于每个子报表,请转到“选择专家”并创建仅显示1个特定数据行的条件。此条件将为每个子报表具有相同的字段,但具有不同的值。在我的例子中,它是AddressType ='A',而AddressType ='B'
  5. 这将生成1个报告,其中A,B,C列出一次,D,E列出每个子报告一次(每行数据一次)

    这令人困惑,耗时,而且我现在比以往更讨厌水晶报道。

答案 1 :(得分:0)

这将非常难看,但您可以为Group Expert中的每个公共字段添加一个组,然后显示最后一个组标题中公共字段的数据。因此,如果您的公共字段是field1到field5,您将创建五个组并将所有五个字段放在field5的组头中。然后,您将在详细信息部分中放置唯一的地址字段(称为字段field6到field8)。

现在的诀窍是让所有内容正确排列。您可以在field5的组头上设置“underlay以下部分”;这将导致field1到field5“落入”详细信息部分。你只需要确保field6到field8都在field1到field5的右边,这样文本就不会重叠。

现在,如果您希望水平打印两个地址记录,我认为您需要一个包含多列的子报表。但同样的原则适用 - 只需确保子报告位于field1到field5的右侧,这样数据就不会重叠。

答案 2 :(得分:0)

您是否在每个非地址字段上尝试过suppress if duplicated选项?

否则,您可以按公共ID分组,将公共字段放在该标题中,然后在详细信息部分显示多个地址。

或者,您可以从数据源中删除地址,并使用子报表为每条记录获取此数据。由于每条记录的地址必须select,这将绕过连接并成为性能最慢的选项。

答案 3 :(得分:0)

好的,首先让我看看我是否理解这一点:

您想要一种格式为

的报告

MainDetails地址(type1)
MainDetails地址(type2)

改为格式为

MainDetails地址(type1)地址(type2)

假设只有两种地址类型,您可以执行以下操作:

1)按主要细节分组(无论唯一条目是什么 2)将地址详细信息放在它们旁边的组标题中,在右侧 3)同样将地址详细信息放在详细信息部分中,但定位好像它们位于地址(type2)列位置,所以它看起来像:

GH MainDetails地址
d .......................................地址

4)接下来,在AddressType字段的报告中添加一个排序,以便首先显示AddressType = 1 5)将条件抑制公式添加到详细信息部分,说{AddressType = 1}
6)使用Section Expert,在Group Header中勾选'underlay following sections'框

只要地址数为1或2,这就应该有效。