将 Crystal Reports 公式转换数字字符串为值,但将非数字留空/空。

5

我有一个字符串字段,大部分包含数字小数值,但有时也包含像“<0.10”或“HEMOLYSIS”这样的值。

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

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

对于所有非数字类型的值,返回0,这使得计算例如平均值或均值,或计算值的数量变得困难。(当然,可以使用运行总数计数与isNumeric评估公式来实现后者。)

有什么建议可以让公式按照我想要的方式工作吗?

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

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

有趣的概念,但是当我在 MS SQL 服务器上运行时,会出现“无效对象名称 'DUAL'”的错误。尝试将其更改为实际表名,但仍然出现错误。 - LapplandsCohan
2
尝试使用 SELECT NULL。我无法访问SQL Server,因此无法测试。 - craig

2
你可以按照以下步骤来实现此功能:
  1. 创建一个新的公式并输入一个数字,然后保存。Crystal 现在将把此公式与一个数值返回值关联起来。
  2. 进入公式并删除数字,然后重新保存。现在你有了一个返回 null 的公式,但 CR 已将其视为数值公式,因此你可以在任何可以使用数值类型的地方使用它。
if isNumeric({a_omgang.omg_resultat}) 
  then toNumber({a_omgang.omg_resultat})
else {@NullNumeric}

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

0

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

为字段的最大值创建一个累加公式。通过以下公式进行评估:
NumericText(Replace({a_omgang.omg_resultat}, ".", ","))
并通过以下公式重置:
true

这将给出每个条目的最大结果。(即该条目。)只有可以转换为值的条目才会被评估,因此所有其他条目都将为空。使用 true 作为重置公式可确保始终获取正在评估的条目的值。

然后,可以使用问题中的公式将此累加总和的结果转换为值。

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


0
据我所知,您无法直接这样做。如果数字公式字段返回空值,则会将其转换为0。
您说您无法抑制。您能否将其转换为数字,然后再转换回字符串?

对于这个特定的报告来说,抑制一下就足够了,但我对一个通用解决方案感兴趣。正在更新问题。 - LapplandsCohan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接