You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按Area Manager分组计算含共享numbervar的两公式商的问题

问题描述

我正在制作自定义报表,需按Area Manager分组展示除法计算结果,预期效果如下:

Area ManagerA/30=BTotal AgeTotal DD
Peter654.000123.0005.31
Peter653.000122.0005.35
Peter652.000121.0005.38

其中:

  • Total DD = 按Area Manager分组的sum(A/30=B) ÷ sum(age)
  • Age列通过子报表实现,其余内容在主报表中

遇到的问题:

  1. 曾出现"division by zero"错误
  2. 当前amt_ar(Total Age的共享变量)分组求和结果正确,但Total DD始终显示为0,00

现有公式:

  • 主报表中A/30=B的公式:{@Rev+Ppn}/30
  • 子报表内累加Age的公式:
Whileprintingrecords;
shared numbervar amt_ar:= amt_ar + Sum ({@amtagetotal}, {pmproj_seed.PROJECT})
  • 主报表中计算Total DD的公式:
whileprintingrecords;
numbervar amtdd;         // variable to display dd
numbervar a30;           // variable to display a/30=b
shared numbervar amt_ar; // variable to display Age

amtdd:=a30/amt_ar;
  • 组页脚展示amt_ar的公式gf_amt_ar:
Whileprintingrecords;
Shared numbervar amt_ar;
解决方案

1. 补全a30变量的分组求和赋值

当前计算公式仅声明了a30但未赋值为当前分组的sum(A/30=B),这是Total DD为0的核心原因,修改计算公式:

Whileprintingrecords;
numbervar amtdd;
// 赋值为当前Area Manager分组的sum(A/30=B)
numbervar a30 := Sum({@Rev+Ppn}/30, {你的Area Manager字段}); 
shared numbervar amt_ar;

// 添加除零判断,避免报错
if amt_ar <> 0 then
    amtdd := a30 / amt_ar
else
    amtdd := 0; // 也可赋值为null,按需调整

2. 重置跨组的共享变量

子报表的amt_ar是累加逻辑,会导致跨组时数值叠加,在Area Manager的组页眉添加重置公式:

Whileprintingrecords;
shared numbervar amt_ar := 0;

3. 确认子报表放置与关联

子报表必须放在Area Manager的组页眉或组页脚,且需设置主报表与子报表的关联字段(Area Manager),确保仅计算当前分组内的Age总和。

4. 调整公式执行顺序

Crystal Reports的公式执行顺序影响结果,需保证:

  • 组页眉的amt_ar重置公式先执行
  • 子报表的累加公式在组内数据处理完成后执行
  • Total DD计算公式放在组页脚的子报表下方

内容的提问来源于stack exchange,提问作者Muhammad Hidayat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 09:05:28