组摘要涉及分割Crystal Reports

时间:2012-10-22 16:47:35

标签: crystal-reports crystal-reports-2008

我有一个包含大约9个不同组的Crystal Report,希望能够得到一个包含将一个值除以另一个值的摘要。

例如(表格):

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个表格。

有没有一种简单的方法可以实现这一目标?

2 个答案:

答案 0 :(得分:1)

步骤:

  • 插入交叉表;行总数company;列总计period(将组选项设置为'每个月');将salesgoal添加到汇总字段
  • 预览报告
  • 右键单击goal单元格,选择“嵌入式摘要”,然后选择“插入嵌入式摘要”
  • 切换到设计模式(交叉表专家);确保字段的顺序(从上到下)为@Embedded SummarySum of SalesSum of Goal
  • 进入预览模式;右键单击Embedded Summary字段并选择'Edit Calculation Formula';添加以下内容:

    local numbervar n:= GridValueAt(CurrentRowIndex,CurrentColumnIndex,1); local numbervar d:= GridValueAt(CurrentRowIndex,CurrentColumnIndex,2);

    如果d<> 0则n / d * 100

  • 取消销售和目标字段

然而,我还没有找到一种方法来消除多余的空间。

样品:

enter image description here

答案 1 :(得分: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都会更改。您显示的新级别将是正确的,但仍显示的先前级别将更改。

希望这有帮助。