1

クロス集計レポートで、2 つの列の値のみの合計を取得し、その値で合計を減算する必要があるという点で立ち往生しています。どうすればよいですか?

以下のように、

                   Product 1    Product2    Product 3    Total
                   ----------------------------------
           Cust 1      4           5           2          11
           Cust 2      5           9           7          19

「商品1」「商品3」の値を合計したい。行の合計から減算 => 合計 LIKE [4+2]-11 => TOtal. 顧客ごとにこれを繰り返したい..

誰でも私を助けてください。

4

2 に答える 2

1

埋め込み要約がいつ導入されたのかはわかりませんが、Crystal のバージョンにこの機能があることは確かです。そうでない場合は、事前に謝罪します。私はこの方法を数か月しか使用していませんが、最初はかなり混乱しています. 少なくとも私にとっては非常に便利ですが、クロス集計について次のことを想定しています。必要に応じて名前を変更します

  • 行 {yourtable.CustID}
  • 列 {yourtable.product}
  • 集計フィールド {yourtable.cost}

  • クロスタブの左上で、右クリックして高度な計算に移動し、計算メンバーを選択します

    • [新規] を選択し、説明を入力します
  • タイプ: 列を選択
  • 挿入評価の場合: [後] を選択
  • 挿入値の編集をクリックして入力します
    CurrentColumnIndex=(GetNumColumns-2)//This will insert a column just before the total column
  • ヘッダー式の編集をクリックし、列の名前を引用符で囲んで入力します
  • [値の数式] でコンテンツを選択し、[値の数式と数値の編集] をクリックします。
  • 保存して終了し、計算メンバー エキスパートを終了します クロスタブに新しい列が作成されます 値を右クリックして [計算メンバー] に移動し、[計算式の編集] を選択します
  • この式を入力してください

( GridValueAt (CurrentRowIndex,0 , 0) // Product 1 value + GridValueAt (CurrentRowIndex,2 , 0) // Product 2 value ) - GetTotalValueFor "yourtable.product")

注: このサイトに投稿するのは難しいです。

于 2013-04-15T06:47:28.343 に答える
0

よく考えた後、私はやった......

第 1 に、Crystal Report 10 は次の関数「CurrentRowIndex」、「GridValueAt」を提供していないことを明確にしてください。そのため、「CoSpringsGuy」による上記のソリューションは適用されません.......

2 つのテーブルがあるためです。1 番目の顧客と 2 番目の製品の両方で、product_sold (数量) のサマライズ フィールドと 2 つのクロス集計列 "Product.name" およびサブ列 product を含むクロス集計を生成します。タイプ

ここで、各顧客に販売された製品の product.packing type ="Pilot" の下の値を合計し、すべての製品 (製品タイプ "Normal" および "Pilot") の総計から合計を差し引きます。

この問題では、最初に、Crystal の実行時に数式の書式設定に取り組み、集計フィールドの「表示文字列」を操作する必要があります。次に、合計、つまり最後の列を編集します。

最初の編集は、次のコードの助けを借りて、フィールドされた「表示文字列」を要約します

Global CCust As String  to keeping last customer for teli new customer name
Global Ccol As String ' tht is for keeping last  column/product.packing type and teli with new col
Global Rndx as number ' this is for generating index of the row
Global totperx(22) as number ' is to hold the currnt value of cell and adding with previous value 
                              ' and i imagen that number of customers will less then 22 otherwise you can take unlimited array

Whileprintingrecords
if (CCust="") then
   CCust=gridrowcolumnvalue("Table_Cust.Name")
   Ccol=gridrowcolumnvalue("Viw_Prod.Packing")
   Rndx=1
   formula="new"
end if

if CCust<>gridrowcolumnvalue("Viw_Prod.Packing") then
    formula="same"
    Rndx=Rndx+1
else
    formula="Newag"
end if

if Ccol<>gridrowcolumnvalue("Viw_Prod.Packing") then
    Rndx=1
end if

if gridrowcolumnvalue("Viw_Prod.Packing")="Pilot" then
    totperx(Rndx)=totperx(Rndx)+currentfieldvalue
end if

formula=totext(currentfieldvalue,0,"") ' despite of cstr function totext will change 45 to 45 while cstr changes 45 to 45.00
CCust=gridrowcolumnvalue("Table_Cust.Name")
Ccol=gridrowcolumnvalue("Viw_Prod.Packing")

次に、総計列の「表示文字列」を編集します

Global my as number
Global totperx(22) as number
whileprintingrecords
if my<1 then
my=1
end if
formula=currentfieldvalue-totperx(my)
my=my+1
于 2013-04-20T06:24:50.123 に答える