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

Crystal reports 使用Crystal Reports公式将数字字符串转换为值,但将非数字保留为空/null,crystal-reports,null,formula,Crystal Reports,Null,Formula,我有一个字符串字段,主要包含数字十进制值,但有时包含“之类的值,不确定这是否是最佳解决方案,但它是一个解决方案 为字段的最大值创建一个运行总计公式。按公式计算 NumericText(替换({a_omgang.omg_resultat},“.”,“,”) 并通过公式重置 true 这将为您提供每个条目(即该条目)的最大结果。只有可以转换为值的条目才会被计算,因此所有其他条目都将为空。将true作为重置公式可确保您始终获得被计算条目的值 然后,可以使用问题中的公式将该运行总计的结果转换为一个值 R

我有一个字符串字段,主要包含数字十进制值,但有时包含“之类的值,不确定这是否是最佳解决方案,但它是一个解决方案

为字段的最大值创建一个运行总计公式。按公式计算
NumericText(替换({a_omgang.omg_resultat},“.”,“,”)

并通过公式重置
true

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

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


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

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


你说你不能抑制。你能转换成一个数字,然后再转换成一个字符串吗?

你可以通过执行以下操作来实现这一点:

  • 创建一个新的公式,只需在其中输入一个数字,然后保存。Crystal现在会将此公式与数字返回值关联
  • 返回公式并删除数字并重新保存。现在您有了一个返回空值的公式,但CR已将其关联为数值公式,因此您现在可以在任何可以使用数值类型的地方使用它

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

    在过去,我创建了一个返回空值的SQL表达式:

    -- {@DB_NULL}
    -- Oracle syntax
    (
    SELECT NULL FROM DUAL
    )
    

    然后我在公式中引用此字段:

    // {@FormulaField}
    If IsNumberic({table.field} Then
      ToNumber({table.field})
    Else
      ToNumber({@DB_NULL})
    

    对于这个特定的报告,它将足以抑制,但我对一个通用的解决方案感兴趣。更新问题。有趣的概念,但我得到“无效的对象名'DUAL'“当我运行MS SQL server时。已尝试将其更改为实际表名,但仍会出现错误。请仅尝试
    选择NULL
    。我没有访问SQL Server的权限,因此无法对此进行测试。
    -- {@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})