我正在使用 Crystal Reports 2016。我没有用它做很多工作,而且我所做的大部分工作都是我管理的,但遇到了一个我似乎无法找到解决方案的问题。
作为一个组织,我们有客户承诺每月捐赠一定金额。我有一份需要写的报告,其中显示有多少客户提供的金额高于、等于或低于他们的承诺金额。
通过使用共享变量创建运行总计,我设法解决了由于“总和”或“不同计数”而导致运行总计不工作的问题。然而,现在我遇到了一个障碍,公式都可以按照我的意愿工作,除了变量在报表页脚中添加了最后一行数据两次。
我已经进行了各种 Google 搜索并尝试了一系列建议,包括将某些公式从“WhilePrintingRecords”切换到“EvaluateAfter”,但我所做的似乎没有改变最终计数。
以下是我的公式示例及其在报告中的位置。请注意,这些不会重置,以便我获得最终总数。
位于组页脚 1a)
@Pledge 与实际:
WhilePrintingRecords;
If (Shared CurrencyVar Amount) = {Pledge.field} then ToNumber ("1") // 1 is where pledge and payments are "Equal"
else if (Shared CurrencyVar Amount) > {Pledge.field} then ToNumber ("2") // 2 is where payments are "More" than pledge
else if (Shared CurrencyVar Amount) < {Pledge.field} then ToNumber ("3") // 3 is where payments are "Less" then pledge
这个公式只是为了确定某人是否提供了更多、等于或少于他们的承诺,以便我可以根据该标准评估数据。对于“更多”和“更少”标准,我有与以下示例中相同的公式。
@EqualAmount1:
WhilePrintingRecords;
Shared CurrencyVar EqualValue1;
EqualValue1 := If {@Pledge vs Actual} = 1 then Shared CurrencyVar Amount;
如果相关客户在给定时间段内捐赠的金额加起来等于该金额(使用共享 CurrencyVar 金额公式按客户记录(即第 1 组)求和),则此公式将给出一个值,例如 50 英镑。
位于组页脚 1b)
@EqualAmount2:
WhilePrintingRecords;
Shared CurrencyVar EqualValue2;
EqualValue2 := EqualValue2 + {@EqualValue1};
这给出了到目前为止所有客户金额的总和,例如 £50 £100 £100 £100 £150 £150 £200 £250
位于报告页脚
@EqualAmount3:
Shared CurrencyVar EqualValue3;
EqualValue3 := {@EqualValue2};
我认为这将简单地显示通过上述公式获得的最终金额,如果这是最后一行,则为 250 英镑,但它再次添加最后一行,例如赚 300 英镑。
这是我第一次使用变量,所以几乎肯定错过了一些非常非常简单的东西。因此,任何指导将不胜感激。
更新:好的,所以按照赫林格的建议做了,一切都很好;我也可以使用相同的公式来生成承诺金额的运行总计,但我现在再次陷入困境,因为我无法为捐赠的总金额创建运行总计。
我的意思是,在报告的底部,我需要说明以下内容:
10 位客户的捐赠超过了他们的承诺——他们承诺了 100 英镑,总共捐赠了 200 英镑。50 位客户完全做出了承诺——他们承诺并捐赠了 500 英镑。5 位客户的捐款低于他们的承诺——他们承诺了 200 英镑,但捐赠了 100 英镑。
因此,我可以在这些句子的前两部分出色地使用 Running Totals,但最后一点 - 他们的捐款总和 - 不能使用相同的 Running Totals 公式完成,因为客户可能有多个订单行,它们是相加以显示客户给出的总数。
这是我的报告到目前为止的样子:
因此,例如,如果客户 {Sum of @Gross} 是 100 英镑,它可能由 3 行组成,1 行是 50 英镑,2 行是 25 英镑。使用运行总计仅使用最高订单行。对不起,我对Crystal的了解真的很有限,因为我不经常使用它,只知道如何做基础知识。:(