交叉表报告如何计算特定列值并从行总计中减去

时间:2013-04-12 14:20:47

标签: crystal-reports crosstab calculated-columns

我坚持认为,在交叉表报告中,我需要只有两个列的值的总和,并减去该值的总和我应该做什么?

如下所示,

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

我想将“产品1”,“产品3”的值相加。然后从行总数减去=>总 喜欢 [4 + 2] -11 =个总。 并希望为每位客户重复这一点..

任何人都可以帮帮我。

2 个答案:

答案 0 :(得分:1)

我不确定何时引入了嵌入式摘要,但我很确定您的Crystal版本具有此功能。如果不是,我提前道歉。我现在只使用这种方法几个月了,起初它很混乱。至少对我而言它已经派上用场了...... 我对你的交叉表做了以下假设。根据需要更改名称

  • row {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")

注意:Geez很难在这个网站上发布!

答案 1 :(得分:0)

很久以后,我已经做了......

首先要明确晶体报告10不提供以下功能 “CurrentRowIndex”,“GridValueAt” 这就是“CoSpringsGuy”的上述解决方案不适用的原因.......

因为我们有两张桌子。 1个客户和第2个产品,我们生成交叉表,其中包含product_sold(数量)和2个交叉表列“Product.name”和子列产品的汇总字段。型

现在我们想要将产品的产品和产品类型“正常”和“试点”的总和减去产品的产品。包装类型=“试点”。 p>

对于这个问题,我们必须在crystal运行时处理格式化公式并操作到汇总字段的“显示字符串” 然后我们将编辑总数,即最后一栏

第1次编辑在下面的代码

的帮助下总结了“显示字符串”
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