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

ただし、ゼロ除算エラーが返されます。支払いモードの式が正しく評価されないのはなぜですか。支払いモードの式をレポート ヘッドに配置しようとしましたが、クロス タブは 2 番目のヘッダーですが、それでも同じエラーがスローされます。

4

2 に答える 2

2

Arvoの答えをすでに見つけてくれてうれしいですが、コードを単純化するためのいくつかの提案があります。

  1. モードは組み込みのCrystal関数です(Crystalのヘルプファイルを参照してください)。そのため、カスタム変数の名前としてその単語を使用しているのを見たとき、私の脳はバク転しました。代わりに「numPayPeriods」と呼んではどうでしょうか。

  2. サンプルの数式にはフィールド値が含まれているため、CrystalはデフォルトでWhileReadingRecordsを実装します(ここでも、Crystalのヘルプファイルを参照してください)。したがって、この場合、追加は冗長です。あなたはそれを完全に取り除くことができます。

  3. あなたの例では、2つの別々の数式は必要ありません。また、 Crystal構文ではResult変数は不要です。全体を1つの式に単純化できます。

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

于 2011-01-20T14:43:37.510 に答える
2

2 つの問題。

最初の構文エラー - というかタイプミスです。最後の 'e' がありません :)

numberVar result:={MarketValue}/mode;

第二に、指定された順序で式を評価する必要があります。最初の数式の名前が「calc_mode」であるとします。次に、2 番目の数式は次のステートメントで開始する必要があります。

EvaluateAfter({@calc_mode});
于 2011-01-20T07:37:31.710 に答える