【问题标题】:Have a Crystal Reports formula convert numeric strings to values, but leave non-numeric blank/null让 Crystal Reports 公式将数字字符串转换为值,但将非数字留空/空
【发布时间】:2012-12-13 10:47:48
【问题描述】:

我有一个字符串字段,主要包含十进制数值,但有时包含“

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

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

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

有什么建议可以让公式按我的意愿工作吗?

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

【问题讨论】:

    标签: crystal-reports null formula


    【解决方案1】:

    过去,我创建了一个返回 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'”。已尝试将其更改为实际的表名,但仍然出现错误。
    • 试试SELECT NULL。我无权访问 SQL Server,因此无法对此进行测试。
    【解决方案2】:

    您可以通过执行以下操作来使其工作:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

        【解决方案4】:

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

        你说你不能压制。能不能先转成数字再转回字符串?

        【讨论】:

        • 对于这个特定的报告,压制就足够了,但我对通用解决方案感兴趣。更新问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-25
        • 1970-01-01
        • 1970-01-01
        • 2012-07-13
        • 2014-02-09
        相关资源
        最近更新 更多