2012-12-13 52 views
5

我有一個字符串字段,主要包含數字十進制值,但有時包含像「< 0.10」或「HEMOLYSIS」的值。有Crystal Reports公式將數值字符串轉換爲值,但保留非數字空白/空

我想使用公式將這些數字值字符串轉換爲值,並將非空值留空(空)。

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

對於所有的非數字值返回0,這使得它很難計算例如,平均值或平均值,或者計算值的數量。 (當然,後者當然可以通過使用isNumeric評估公式使用運行總數來實現。)

任何建議如何讓公式按我的意願工作?

編輯:我希望該值爲空(空),而不是僅僅在非數字時纔可見。

回答

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}) 
+0

有趣的概念,但是當我針對MS SQL服務器運行時,我得到了「無效的對象名稱'DUAL'」。試圖將其更改爲實際的表名,但仍然出現錯誤。 – LapplandsCohan

+2

試試'SELECT NULL'。我沒有訪問SQL Server的權限,所以我無法測試它。 – craig

+0

工作正常!我認爲這是最通用的解決方案。 – LapplandsCohan

0

不知道這是否是最佳解決方案,但它是a的解決方案。

爲該字段的最大值創建運行總計公式。由式
NumericText(Replace({a_omgang.omg_resultat}, ".", ","))
評估和式
true

復位這會給你每個項目的最大結果。 (即該條目)。只有可以轉換爲值的條目纔會被評估,所有其他條目都將爲空。將true作爲重置公式可確保您始終獲得正在評估的條目的值。

然後可以使用問題中的公式將此運行總計的結果轉換爲值。

Replace()是由於語言環境而定,可能不需要,具體取決於您的系統設置。如果需要,它也必須用在價值轉換公式中。

0

據我所知,你不能直接這樣做。如果數字公式字段返回空值,則將其轉換爲0.

你說你不能壓制。你可以轉換成一個數字然後回到一個字符串?

+0

對於這個特定的報告來說,這足以壓制,但我對一個通用的解決方案感興趣。更新問題。 – LapplandsCohan

2

你可以得到這個做的工作如下:

  1. 創建一個新的公式,只要輸入一個數字,然後保存。 Crystal現在將此公式與數字返回值相關聯。
  2. 回到公式中,刪除號碼並重新保存。現在你有一個返回null的公式,但是CR已經將它作爲一個數字公式,所以你現在可以在任何可以使用數字類型的地方使用它。
if isNumeric({a_omgang.omg_resultat}) 
    then toNumber({a_omgang.omg_resultat}) 
else {@NullNumeric}

請注意,您也可以使用此爲任何其他數據類型(包括因爲一個空字符串字符串不等於空字符串),它是非常有用的與在那裏你只是想彙總函數使用直接忽略某些行。

相關問題