【问题标题】:Years of Service Anniversary formula - Cognos Analytics - Costpoint 8.0.0服务周年纪念公式 - Cognos Analytics - Costpoint 8.0.0
【发布时间】:2022-08-04 01:22:30
【问题描述】:

这个已经困扰了我几个星期了......我正在尝试在 Cognos Analytics(成本点)中编写一个公式,如果有人在实际月份达到新的服务里程碑,则返回该公式。

返回一个简单的“真/假”或“是/否”是完美的

本质上,这只是他们的服务年限介于多个日期范围之间(例如:我希望当前服务年限为 4.95 年的人返回值“是”,因为他们将在接下来的一个月内达到 5 年)

  • 服务年限在 excel 的“A”列和 costpoint (cognos) 的 [服务年限] 列中采用数字格式(例如:9.154、4.982、24.995 ...)

我得到了一个可以工作的 Excel 版本,如下所示:

  • =IF(OR(AND(A1>4.91,A1<=5),(AND(A1>9.91,A1<=10)),(AND(A1>14.91,A1<=15)),(AND (A1>19.91,A1<=20)),(AND(A1>24.91,A1<=25)),(AND(A1>29.91,A1<=30))),\"是\",\"否\")

我仍然只是熟悉 Cognos(costpoint) 语法,所以我尝试如下编写它:

  • if(or(and([服务年限]>4.91,[服务年限]<5),(and([服务年限]>14.91,[服务年限]<15)))则 (\ '是\')否则(\'空\')

没有任何运气...

有人想试一试吗?? :)

  • 您的服务年限精确到千分之一,但没有开始日期?使用日期会简单得多。另外,您的 Excel 公式过于复杂。
  • 我确实有开始日期,只是不知道如何搜索多个特定范围

标签: validation syntax return date-range cognos


【解决方案1】:

查看各种 case 函数并尝试将它们用于您的表达式。

【讨论】:

    【解决方案2】:

    在没有开始日期的情况下,这会更容易,并且处理更一般的情况(如果他们的服务年限接近 45 年怎么办?):

    case
      when MOD(MOD([Years Of Service], 5) + 1, 5) > 0.91
       and MOD(MOD([Years Of Service], 5) + 1, 5) <= 1
        then 'yes'
      else 'no'
    end
    

    要查看谁在下个月达到了 5 年里程碑的“服务年限”值,请创建一个过滤器:

    mod(
        _months_between (
            _first_of_month (
                _add_months (current_date, 1)
            ), 
            _first_of_month ([StartDate])
        ), 
        60
    ) = 0
    

    但是,如果您有服务开始日期,则可以使用日期计算来查看下个月谁达到了 5 年里程碑:

    mod(
        _months_between (
            _first_of_month (
                _add_months (current_date, 1)
            ), 
            _first_of_month ([StartDate])
        ), 
        60
    )
    

    【讨论】:

    • 我确实有开始日期。什么是更简单的解决方案?
    • 可能,但这取决于要求。您是否真的在问诸如“谁将在下个月达到 5 年服务周年纪念日?”之类的问题?使用日期会容易得多。
    • 这正是要求,但不仅是 5 年,每 5 年的增量也是如此。
    【解决方案3】:

    我认为您不需要开始日期,您可以只关注服务年限字段的小数部分。您知道,如果小数部分等于或大于 ).9166,则服务年限为最后一个月。

    if ([YOS]-cast([YOS],integer)>=0.9166)
    then
    ('Yes')
    else
    ('No')
    

    如果您想计算一个重要的里程碑年份,例如 5、10、15,那么您可以进一步使用该表达式。

    if mod(
        if ([YOS]-cast([YOS],integer)>=0.9166)
        then
        (cast([YOS],integer)+1)
        else
        (cast([YOS],integer)),5=0)
    then ('Milestone Year')
    else ('Keep on Working!')
    

    希望以上对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      相关资源
      最近更新 更多