【问题标题】:Maximum and Minimum values from a summed Formula in Crystal Reports 2008Crystal Reports 2008 中求和公式的最大值和最小值
【发布时间】:2014-05-24 00:47:12
【问题描述】:

求和公式问题的最大值和最小值

您好,我目前正在使用 Crystal Reports 2008,它从 Oracle 数据库中获取数据。我对此进行了详细研究,但一直找不到我需要的信息。我有关于从总计 2 个或更多字段的给定公式中获取最大值和最小值的查询。我正在使用的信息快照是:

Field1 = dB1.Left_Serious
Field2 = dB1.Left_Dangerous
Field3 = @Tester
Formula = @LeftTot

字段 1+2 是测试者对每个左测试给出的总分。

Test   Field1   Field2   Field3
1      2.0      4.0      J Adams
2      1.0      1.0      J Adams
3      1.0      0.0      S Grey
4      0.0      1.0      S Grey
5      5.0      0.0      D Jones
6      5.0      8.0      D Jones

获取每个测试者的左测试的总计的公式使用测试者分组:

@LeftTot  
Sum ({dB1.Left_Serious}, {@Tester}) + Sum (dB1.Left_Dangerous}, {@Tester})

使用上面的细节我们得到:

J Adams = 8.0 
S Grey = 2.0 
D Jones = 18.0 

因此最大值为 18.0,最小值为 2.0,所需的差值为 16.0。

我遇到的问题是我不能使用最大值或最小值命令,因为 Crystal 2008 不允许您在对两个字段求和的公式上使用像最大值这样的汇总函数。我知道您可以在数据库中创建一个新的聚合字段来解决问题,但是我目前没有对数据库的管理员访问权限,也无法创建任何新的数据表或字段。

我试图通过在 3 个新公式中使用以下代码来让球滚动:

@LeftTotGrpHdr
//This Formula needs to be placed into the Group Header to reset variable
WhilePrintingRecords;
NumberVar LEFTTL:=0

@LeftTotGrpFtr
//This Formula needs to be placed into the Group Footer to display variable
WhilePrintingRecords;
NumberVar LEFTTL

@LeftTotCr
//This Formula declares and works out Total Left Tests 
WhilePrintingRecords;
Global NumberVar LEFTTL:=LEFTTL + {@LeftTot}

但是当我尝试使用时

Maximum({@LeftTotCr})

在新公式中,我仍然收到错误消息“无法汇总此字段。”

还有其他方法吗?

干杯

戴维特

【问题讨论】:

    标签: global-variables max formula crystal-reports-2008 minimum


    【解决方案1】:

    有一个解决方法。

    当您同时汇总值时,将值存储在数组中并从数组中检索最大值和最小值。

        //@LeftTot  
        Shared StringVar Array x;
    
        x:=x+totext(Sum ({dB1.Left_Serious}, {@Tester}) + Sum (dB1.Left_Dangerous}, {@Tester}));
    1
    

    现在再创建一个公式@display

    EvaluateAfter(@LeftTotal);
    Whileprintingrecords;
    Shared StringVar Array x;
    
    Maximum(x);
    

    以同样的方式使用minimum 函数实现最小值。

    告诉我进展如何。

    【讨论】:

    • 您好 Siva 感谢您回复我。我想我遵循你在这里所做的,但是当我尝试设置这个公式时:Shared StringVar Array x; x:=x+totext(Sum ({dB1.Left_Serious}, {@Tester}) +Sum (dB1.Left_Dangerous}, {@Tester}));我收到错误消息:此数组必须下标。例如:数组 [i]。有什么想法吗?
    • 现在我没有工具...更改了代码..让我知道它是如何工作的..问题出在array 所以删除了数组并将值存储在字符串并找到字符串的最大值
    • @Dave-69 更改了代码并进行了测试......它对我有用......现在你可以使用上面的代码
    • 你好,Siva,我又试了一次,但都无法工作。第一个通知我最大值(x)仅适用于公式,第二个只是将公式设置为 1。我是否将公式插入错误的位置?你能告诉我应该把你的数组公式放在哪里吗?
    • @Dave-69 我在实施后给出了公式,它对我来说非常有效.. //@LeftTot 详细说明了您获取所有行并抑制公式的部分不要打印它.. @987654327 @ 放在页脚中.. 以获得最大值.. 你错了@Lefttot 是第一个,@display 是第二个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 2023-03-23
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多