让Crystal Reports公式将数字字符串转换为值,但保留非数字空白/ null

时间:2012-12-13 10:47:49

标签: crystal-reports null formula

我有一个字符串字段,主要包含数字小数值,但有时包含“< 0.10”或“HEMOLYSIS”等值。

我想使用公式将这些数值字符串转换为值,将非值留空(null)。

if isNumeric({a_omgang.omg_resultat}) then
    toNumber({a_omgang.omg_resultat})
对于所有非数字值,

返回0,这使得很难计算,例如平均值或平均值,或计算值的数量。 (后者当然可以通过使用具有isNumeric评估公式的运行总计数来实现。)

如何建议我如何按照自己的意愿使用公式?

编辑:我希望该值为空(null),而不仅仅是非数字的可见性。

4 个答案:

答案 0 :(得分: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})

答案 1 :(得分:2)

您可以通过执行以下操作来实现此目的:

  1. 创建一个新公式,只需在其中输入一个数字,然后保存。 Crystal现在将此公式与数字返回值相关联。
  2. 返回公式并删除数字并重新保存。现在你有一个返回null的公式,但是CR已经将它关联为一个数字公式,所以你现在可以在任何可以使用数字类型的地方使用它。
  3. if isNumeric({a_omgang.omg_resultat}) 
      then toNumber({a_omgang.omg_resultat})
    else {@NullNumeric}

    请注意,您也可以将此用于任何其他数据类型(包括字符串,因为空字符串不等于空字符串),并且它对于使用汇总函数非常有用,您只需要直接忽略某些行。

答案 2 :(得分:0)

不确定这是否是最佳解决方案,但它是 解决方案。

为字段的最大值创建一个运行总公式。按公式评估
NumericText(Replace({a_omgang.omg_resultat}, ".", ","))
并按公式重置
true

这将为您提供每个条目的最大结果。 (即该条目。)仅评估可转换为值的条目,因此所有其他条目将为null。将true作为重置公式可确保始终获得正在评估的条目的值。

然后可以使用问题中的公式将此运行总计的结果转换为值。

Replace()归因于区域设置,可能不需要,具体取决于您的系统设置。如果需要,还必须在价值转换公式中使用它。

答案 3 :(得分:0)

据我所知,你不能直接这样做。如果数字公式字段返回null,则将其转换为0.

你说你无法抑制。你能转换成数字然后回到字符串吗?