我有一个字符串字段,主要包含数字十进制值,但有时包含"<0.10"或"溶血"等值。
我想使用公式将这些数值字符串转换为值,将非值留空 (null)。
if isNumeric({a_omgang.omg_resultat}) then
toNumber({a_omgang.omg_resultat})
为所有非数值返回 0,这使得计算平均值或平均值或计算值的数量变得困难。(后者当然可以通过使用带有isNumeric
评估公式的运行总数来实现。
任何建议如何使公式按我想要的方式工作?
编辑:我希望值为空(null),而不仅仅是非数字的可见性。
过去,我创建了一个返回 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})
您可以通过执行以下操作来使其工作:
- 创建一个新公式,只需在其中输入一个数字,然后保存。Crystal 现在将此公式与数字返回值相关联。
- 返回公式并删除数字并重新保存。现在,您有一个返回 null 的公式,但 CR 已将其关联为数值公式,因此您现在可以在任何可以使用数值类型的任何地方使用它。
if isNumeric({a_omgang.omg_resultat})
then toNumber({a_omgang.omg_resultat})
else {@NullNumeric}
请注意,您也可以将其用于任何其他数据类型(包括字符串,因为空字符串不等同于空字符串),并且对于与摘要函数一起使用非常有用,因为您只想直接忽略某些行。
不确定这是否是最好的解决方案,但这是一个解决方案。
为字段的最大值创建汇总公式。通过公式
评估 NumericText(Replace({a_omgang.omg_resultat}, ".", ","))
并按公式
重置 true
这将为您提供每个条目的最大结果。(即该条目。仅计算可转换为值的条目,因此所有其他条目均为 null。将true
作为重置公式可确保始终获得正在评估的条目的值。
然后,可以使用问题中的公式将此汇总的结果转换为值。
Replace()
是由于区域设置造成的,根据您的系统设置,可能不需要。如果需要,还必须在值转换公式中使用它。
据我所知,你不能直接这样做。如果数值公式字段返回 null,则将其转换为 0。
你说你压制不了。你能转换成一个数字然后转换回一个字符串吗?