0

我有一个包含大约 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 个公式。

有没有简单的方法来实现这一点?

4

2 回答 2

1

脚步:

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

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

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

  • 抑制销售和目标字段

但是,我(还)还没有找到删除多余空间的方法。

样本:

在此处输入图像描述

于 2012-10-23T17:19:57.970 回答
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 回答