2012-08-17 88 views
1

是以下可能使用Crystal Reports?显示父子报告

表A

ID Boo Far 
1 Test 15 
2 Tast 24 

表B

Foo Bar ParentID 
A 1 1 
B 2 1 
C 3 1 
A 17 2 
c 18 2 

而且我想Withou使用交叉表我的报告看起来像

ID Boo Far A B C 
1 Test 15 1 2 3 
2 Tast 24 17 18 

?因为使用交叉表,我得到标题A,B,C但不能显示ID,Boo和Far的标题。另外,我可以对每条记录的A,B和C进行行总结,但是我无法为所有记录创建所有B的列总和。

我已经尝试创建一个不错的小组,通过,但是这给了我类似的结果:

ID Boo Far 
1 Test 15 
      Bar 
      1 
      2 
      3 

这似乎正常的,当然。但是我(或者客户......)不希望这样。

任何帮助?

回答

2

上创建{表A.ID}的基团 添加表A字段组报头部分;抑制组页脚节

创建三个公式:

// {@a} 
If {Table B.Foo}='A' Then {Table B.Bar} 
Else 0 

// {@b} 
If {Table B.Foo}='B' Then {Table B.Bar} 
Else 0 

// {@c} 
If {Table B.Foo}='C' Then {Table B.Bar} 
Else 0 

添加到细节部分。隐藏细节部分

插入摘要字段在每个这些配方。移到组头部分;与列标题对齐。

+0

太棒了。奇迹般有效! – 2012-08-22 19:07:58

0

您可以使用变量来跟踪每一个项,B,C中值的表A

  1. 请您已设置了{} TableA.ID分组。将要显示的所有项目移到组页脚中。
  2. 在(现在是空的)组头,初始化/ REDIM大小的数组3.
  3. 在(现在是空的)详述部分中,有条件地更新阵列,使得索引1包含用于“A”的值,2“B”,等等。就像这样:

    whileprintingrecords; 
    numbervar array myArray; 
    select {TableB.Foo} 
    case 'A' : myArray[1]:={tableB.Bar} 
    case 'B' : myArray[2]:={tableB.Bar} 
    case 'C' : myArray[3]:={tableB.Bar} 
    default : 0 //handle error case
  4. 禁止该组头和细节两部分,因此它们不会显示在您的报告。现在
  5. ,在组页脚你应该有访问所有tableB的为A,B,C对应的值的TableA中每个父记录。

注意:所有的公式都需要使用whileprintingrecords;才能正常工作。

0

我会用交叉表对象,但我不知道你的数据应该有的样子。

为了解决:

无法显示ID,啵和远头。

您可以将它们组合成一个新列以显示为rowheader。它们不会显示为单个列,如A,B和C,只是一个用于元组。

到地址:

我无法创建所有B的所有记录的列总和。

我引入一个新的行,最后排序,包含数据源中每个组的所有总和。