1

我有一个带有公式字段的交叉表。查询返回类似

 CategoryID   Company       MarketValue   PaymentMode
  1            ABC             1000         H
  1            xyz             2000         H
  3            efg             9800         H

付款方式是半年一次,用“H”表示 我做了一个公式字段来评估付款方式

WhileReadingRecords;
numberVar mode;  
         if({PaymentMode}='H') then mode:=2 else mode:=12

然后我制作了另一个公式字段

WhileReadingRecords;
numberVar mode;
numberVar result:={MarketValue}/mod;
result

但是,它返回除以零错误。为什么我的付款模式公式无法正确评估。我尝试将付款模式公式放在报告标题中,交叉表是第二个标题,但它仍然抛出相同的错误。

4

2 回答 2

2

两个问题。

第一个语法错误 - 或者更确切地说是错字,最后一个'e'不见了:)

numberVar result:={MarketValue}/mode;

其次 - 您需要按指定顺序评估公式。假设您的第一个公式的名称为“calc_mode”,那么第二个公式应该从下一条语句开始:

EvaluateAfter({@calc_mode});
于 2011-01-20T07:37:31.710 回答
2

很高兴您已经找到 Arvo 的答案,但我有一些建议可以简化您的代码:

  1. Mode是一个内置的 Crystal 功能(参见 Crystal 的帮助文件)。所以当我看到你使用这个词作为自定义变量的名称时,我的大脑做了一个后空翻。不如叫它“numPayPeriods”?

  2. 由于您的示例公式包含字段值,Crystal 默认实现WhileReadingRecords(再次请参阅 Crystal 的帮助文件)。所以在这种情况下添加它是多余的。你可以把它完全拿出来。

  3. 您的示例中不需要 2 个单独的公式。此外,您的Result变量在 Crystal 语法中是不必要的。您可以将整个事情简化为 1 个公式:

    if({PaymentMode}='H') then
    {MarketValue}/2
    else
    {MarketValue}/12;

于 2011-01-20T14:43:37.510 回答