5

我有一个字符串字段,主要包含十进制数值,但有时包含“<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}

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

于 2012-12-13T16:26:18.570 回答
0

不确定这是否是最好的解决方案,但它是一个解决方案。

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

这将为您提供每个条目的最大结果。(即那个条目。)只有可以转换为值的条目才会被评估,所以所有其他条目都将为空。拥有true作为重置公式可确保您始终获得正在评估的条目的值。

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

Replace()是由于语言环境,可能不需要,具体取决于您的系统设置。如果需要,还必须在值转换公式中使用它。

于 2012-12-13T11:38:59.607 回答
0

据我所知,您无法直接执行此操作。如果数字公式字段返回空值,则将其转换为 0。

你说你压制不住。你能转换成数字然后再转换回字符串吗?

于 2012-12-13T13:31:50.263 回答