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

Crystal reports 交叉表报告如何计算特定列的值并从行总数中减去,crystal-reports,crosstab,calculated-columns,Crystal Reports,Crosstab,Calculated Columns,我被困在一个点上,在交叉表报告中,我只需要两列的值之和,然后用值减去总值,我该怎么办 如下图所示 Product 1 Product2 Product 3 Total ---------------------------------- Cust 1 4 5 2 11 Cust 2

我被困在一个点上,在交叉表报告中,我只需要两列的值之和,然后用值减去总值,我该怎么办

如下图所示

                   Product 1    Product2    Product 3    Total
                   ----------------------------------
           Cust 1      4           5           2          11
           Cust 2      5           9           7          19
我想求“产品1”和“产品3”的总和。然后从行总数中减去=>total 喜欢 [4+2]-11=>总计。 并希望为每位客户重复这一点


任何人请帮助我。

我不确定嵌入摘要是什么时候引入的,但我非常确定您的Crystal版本具有此功能。如果不是,我会提前道歉。我现在只使用这个方法几个月了,一开始它很混乱。至少对我来说是这样,但它已经派上了用场。。。。。 我对你的交叉表做了以下假设。根据需要更改名称

  • 行{yourtable.CustID}
  • 列{yourtable.product}
  • 汇总字段{yourtable.cost}

  • 在交叉表的左上角,右键单击转到高级计算并选择计算成员

    • 选择“新建”并输入说明
  • 对于类型:选择列
  • 对于插入求值:选择“之后”
  • 单击编辑插入值并输入
    CurrentColumnIndex=(GetNumColumns-2)//这将在total列之前插入一列
    
  • 单击“编辑标题公式”,并在引号中输入要调用该列的内容
  • 选择“值公式”中的内容,然后单击“编辑值公式”和“数值”
  • 保存并关闭,然后退出计算成员专家 交叉表现在应该有一个新列 在值上单击鼠标右键“转到计算成员”,然后选择“编辑计算公式”
  • 输入此公式
(
GridValueAt(CurrentRowIndex,0,0)//产品1值
+
GridValueAt(CurrentRowIndex,2,0)//产品2值
)
-
获取“yourtable.product”的总价值“


注意:天哪,很难在这个网站上发布

我不确定嵌入摘要是什么时候引入的,但我非常确定您的Crystal版本具有此功能。如果不是,我会提前道歉。我现在只使用这个方法几个月了,一开始它很混乱。至少对我来说是这样,但它已经派上了用场。。。。。 我对你的交叉表做了以下假设。根据需要更改名称

  • 行{yourtable.CustID}
  • 列{yourtable.product}
  • 汇总字段{yourtable.cost}

  • 在交叉表的左上角,右键单击转到高级计算并选择计算成员

    • 选择“新建”并输入说明
  • 对于类型:选择列
  • 对于插入求值:选择“之后”
  • 单击编辑插入值并输入
    CurrentColumnIndex=(GetNumColumns-2)//这将在total列之前插入一列
    
  • 单击“编辑标题公式”,并在引号中输入要调用该列的内容
  • 选择“值公式”中的内容,然后单击“编辑值公式”和“数值”
  • 保存并关闭,然后退出计算成员专家 交叉表现在应该有一个新列 在值上单击鼠标右键“转到计算成员”,然后选择“编辑计算公式”
  • 输入此公式
(
GridValueAt(CurrentRowIndex,0,0)//产品1值
+
GridValueAt(CurrentRowIndex,2,0)//产品2值
)
-
获取“yourtable.product”的总价值“


注意:天哪,很难在这个网站上发布

想了很久,我已经做了

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

因为我们有两张桌子。1个客户和2个客户是产品,通过这两种方式,我们生成了交叉表,其中包含产品销售(数量)的汇总字段和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 CCust As String为teli新客户名称保留最后一个客户
全局Ccol作为字符串'tht'用于保留最后一列/产品。包装类型和teli与新列
全局Rndx作为编号'这用于生成行的索引
全局totperx(22)as number'用于保存单元格的当前值并与以前的值相加
“我认为,客户数量将少于22个,否则您可以无限阵列
打印记录时
如果(CCust=“”),则
CCust=gridrowcolumnvalue(“表客户名称”)
Ccol=gridrowcolumnvalue(“Viw_产品包装”)
Rndx=1
公式=“新”
如果结束
如果CCustgridrowcolumnvalue(“Viw_产品包装”),则
公式=“相同”
Rndx=Rndx+1
其他的
公式=“Newag”
如果结束
如果Ccolgridrowcolumnvalue(“Viw_产品包装”),则
Rndx=1
如果结束
如果gridrowcolumnvalue(“Viw_产品包装”)=“Pilot”,则
totperx(Rndx)=totperx(Rndx)+currentfieldvalue
如果结束
公式=totext(currentfieldvalue,0,“”),尽管cstr函数totext将更改为45,而cstr将更改为45.00
CCust=gridrowcolumnvalue(“表客户名称”)
Ccol=gridrowcolumnvalue(“Viw_产品包装”)
现在我们将编辑总计列的“显示字符串”

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
Global my as number
全球totperx(22)作为编号
打印记录时

如果我的思考很久之后,我已经做了

你要清楚那喊声