5

ほとんどが 10 進数の数値を含む文字列フィールドがありますが、「<0.10」や「HEMOLYSIS」などの値が含まれることがあります。

数式を使用してこれらの数値文字列を値に変換し、値以外を空白 (null) のままにしたいと考えています。

if isNumeric({a_omgang.omg_resultat}) then
    toNumber({a_omgang.omg_resultat})

すべての非数値に対して 0 を返すため、平均や平均などの計算や、値の数のカウントが困難になります。(後者は、もちろん、isNumeric評価式付きの累計カウントを使用して実現できます。)

数式を希望どおりに機能させる方法について何か提案はありますか?

編集:数値以外の場合は、可視性の切り替えだけでなく、値を空白(null)にしたい。

4

4 に答える 4

4

過去に、NULL を返す SQL 式を作成しました。

-- {@DB_NULL}
-- Oracle syntax
(
SELECT NULL FROM DUAL
)

 

-- {@DB_NULL}
-- MS SQL syntax
(
SELECT NULL
)

次に、数式でこのフィールドを参照します。

// {@FormulaField}
If IsNumberic({table.field} Then
  ToNumber({table.field})
Else
  ToNumber({@DB_NULL})
于 2012-12-13T21:31:13.053 に答える
2

次の手順を実行することで、これを機能させることができます。

  1. 新しい数式を作成し、それに数値を入力して保存します。Crystalは、この数式を数値の戻り値に関連付けます。
  2. 数式に戻り、数値を削除して再保存します。これで、nullを返す数式ができましたが、CRはすでに数式として関連付けているため、数値タイプを使用できる場所であればどこでも使用できます。
if isNumeric({a_omgang.omg_resultat}) 
  then toNumber({a_omgang.omg_resultat})
else {@NullNumeric}

これは他のデータ型(空の文字列はnull文字列と同等ではないため文字列を含む)にも使用でき、特定の行をそのまま無視したいサマリー関数で使用する場合に非常に便利です。

于 2012-12-13T16:26:18.570 に答える
0

これが最善の解決策かどうかはわかりませんが解決策です。

フィールドの最大値の累計計算式を作成します。式で評価し、式
NumericText(Replace({a_omgang.omg_resultat}, ".", ","))
でリセット
true

これにより、すべてのエントリの最大の結果が得られます。(つまり、そのエントリ。) 値に変換できるエントリのみが評価されるため、その他はすべて null になります。as resetting trueformula を使用すると、評価されるエントリの値を常に取得できます。

この累計の結果は、問題の式を使用して値に変換できます。

これReplace()はロケールによるものであり、システム設定によっては必要ない場合があります。必要に応じて、値変換式でも使用する必要があります。

于 2012-12-13T11:38:59.607 に答える