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 のフィールドをグループ ヘッダー セクションに追加します。グループ フッター セクションを非表示にする

3 つの式を作成します。

// {@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. これで、グループフッターで、tableAの各親レコードのA、B、CのtableBの対応するすべての値にアクセスできるようになります。

注:whileprintingrecords;正しく機能するには、すべての数式を使用する必要があります。

于 2012-08-17T16:22:33.533 に答える
0

クロス集計オブジェクトを使用しますが、データが実際にどのように見えるかわかりません。

対処するには:

ID、Boo、Far のヘッダーを表示できません。

それらを新しい列に結合して、行ヘッダーとして表示できます。A、B、C のような個々の列として表示されるのではなく、タプルの 1 つだけです。

対処する:

すべてのレコードのすべての B の列合計を作成できません。

データソース内の各グループのすべての合計を含む、最後に並べ替えられた新しい行を導入します。

于 2012-08-21T13:39:16.940 に答える