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

我希望我的报告看起来像

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

这当然看起来很正常。但我(或者,客户......)不希望这样。

有什么帮助吗?

4

3 回答 3

2

在 {Table 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

添加到详细信息部分。隐藏详细信息部分

在每个公式上插入一个汇总字段。移动到组头部分;与列标题对齐。

于 2012-08-17T18:55:41.273 回答
0

您可以使用变量来跟踪表 A 中每个条目的 A、B、C 值。

  1. 保留您已为 {TableA.ID} 设置的分组。将要显示的所有项目移动到组页脚中。
  2. 在(现在为空的)组标题中,初始化/重新调整大小为 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 中针对 tableA 中每个父记录的 A、B、C 的所有对应值。

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

于 2012-08-17T16:22:33.533 回答
0

我会使用交叉表对象,但我不确定您的数据到底是什么样子。

讲话:

无法显示 ID、Boo 和 Far 的标题。

您可以将它们组合成一个新列以显示为行标题。它们不会像 A、B 和 C 那样显示为单独的列,而只是一个用于元组的列。

讲话:

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

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

于 2012-08-21T13:39:16.940 回答