0

私は約9つの異なるグループを含むCrystalReportを持っており、ある値を別の値で除算することを含む要約を作成できるようにしたいと考えていました。

例(表):

Period    Company   Division   Region  State   City   Store   Employee   Sales   Goal
01-2012   Ab Works  Northern   NW      OR      Ball   888     Foo        100     150
01-2012   Ab Works  Northern   NW      OR      Ball   888     Choo       175     120
02-2012   Ab Works  Southern   SE      GA      Chip   743     Bar        34      75
02-2012   Perrywee  Northern   NC      MN      Fedd   147     Bill       80      64
03-2012   Perrywee  Eastern    FE      WV      Wood   98      Tim        75      250
01-2012   Perrywee  Eastern    FE      WV      Wood   92      Karl       84      250
01-2012   Perrywee  Western    W       CA      Fub    398     Fubar      175     170

私の出力は次のようになります。

Company   Jan2012   Feb2012   Mar2012 ...  YTD-Avg
Ab Works  70.3%     87.3%     87.5%        84.3%
Perrywee  93.5%     97.3%     130.3%       90.4%

それぞれ、その下のグループにドリルダウンできます。値は、グループの売上の合計をグループの目標の合計で割って計算されます。14の期間と8つのグループがあるので、115までのフォーマルを作成する必要はありません。

これを達成する簡単な方法はありますか?

4

2 に答える 2

1

私は似たようなことをしましたが、パーセンテージを使用していません。私が考えた方法はほとんど苦痛ですが、ドリルダウン機能があります。私が思いついたものを投稿しますが、誰かがこれを変更して簡単にすることができれば、ぜひ。

まず、使用する8つのグループを作成し、それらを非表示にします。期間の列を作成するには、14個の数式が必要です。最初の期間の式(および次の期間)は次のようになります。

IF {table.period} = "01-2012" THEN
    IF DrillDownGroupLevel = 0 THEN
        SUM({table.sales}, {table.group1}) / SUM({table.goal}, {table.group1})
    ELSE IF DrillDownGroupLevel = 1 THEN
        SUM({table.sales}, {table.group2}) / SUM({table.goal}, {table.group2})
    ELSE IF DrillDownGroupLevel = 2 THEN
        SUM({table.sales}, {table.group3}) / SUM({table.goal}, {table.group3})
    ELSE IF DrillDownGroupLevel = 3 THEN
        SUM({table.sales}, {table.group4}) / SUM({table.goal}, {table.group4})
    ...
    ELSE
        SUM({table.sales}, {table.group8}) / SUM({table.goal}, {table.group8})
ELSE
    0

この式が行うことは、それがどの期間であるかを識別し、次にそれがどのグループレベルにあるかを決定することです。次に、グループがそのレベルで何を想定しているのかを考慮して、売上と目標を合計します。

  • IF{table.period}= "01-2012" THENの場合、パラメータとして設定して、複数年機能するようにします。
  • 関数を使用して自分がどのグループレベルにいるかを判断したいのですが、知っているのはDrillDownGroupLevelだけです。これは便利ですが、グループで何か凝ったことをしようとした場合(条件付き抑制)、単純なドリルダウンを行わない場合は欠陥があります。
  • {table.group1}を、そのグループレベルで使用したフィールドに変更します。つまり、{table.company}

この数式の欠点は、ドリルダウンするたびに、DrillDownGroupLevelが変更されることです。表示する新しいレベルは正しいですが、まだ表示されている以前のレベルは変更されます。

お役に立てれば。

于 2012-10-24T02:35:50.680 に答える
1

手順:

  • クロスタブを挿入します。company行の合計。period列の合計の場合(グループオプションを「各月」に設定)。要約されたフィールドに追加salesおよびgoal
  • プレビューレポート
  • セルを右クリックし、[埋め込みの概要] goal、[埋め込みの概要の挿入]の順に選択します。
  • デザインモードに切り替えます(クロスタブエキスパート)。フィールドの順序(上から下)が、、であることを確認し@Embedded SummarySum of SalesくださいSum of Goal
  • プレビューモードに移動します。「埋め込み要約」フィールドを右クリックして、「計算式の編集」を選択します。以下を追加します。

    ローカル番号varn:= GridValueAt(CurrentRowIndex、CurrentColumnIndex、1); ローカル番号vard:= GridValueAt(CurrentRowIndex、CurrentColumnIndex、2);

    d <> 0の場合、n / d * 100

  • 販売フィールドと目標フィールドを抑制します

ただし、余分なスペースを削除する方法は(まだ)見つかりませんでした。

サンプル:

ここに画像の説明を入力してください

于 2012-10-23T17:19:57.970 に答える