【问题标题】:Cognos 10 fixed MM/dd but variable yearCognos 10 固定 MM/dd 但可变年份
【发布时间】:2017-05-26 01:31:44
【问题描述】:

想要将 7 月 01 日设置为月份和日期,但有一个年份变量。总是希望默认为最近的 7 月 01 日。

必须在 Cognos 10.2 中的参数范围内工作。尝试了几个带有 date2strings 和 string2date 函数的 If 语句。还尝试了一系列旨在递归过滤数据的列。

逻辑 如果 current_month

此时无法只见树木不见森林。继续探索,如果实现将发布解决方案。

【问题讨论】:

    标签: cognos-10


    【解决方案1】:

    您希望将日期保留为日期格式,并尽可能避免转换为字符串和串联。 Cognos 为您提供了几个无需转换即可操作日期的本机函数。

    这是你的表情:

    _add_years(
        _add_months(
            _first_of_month(
                current_date
            ),
            7 - extract(
                month,
                current_date
            )
        ),
        floor(
            extract(
                month,
                current_date
            )
            / 7
        ) - 1
    )
    

    如果你从里到外检查它会更容易理解。

    _first_of_month() 函数返回当前月份的第一天。然后,我们使用一些数学来确定要传递给 _add_months() 函数的偏移量,该函数将针对每个可能的月份值将当前月份的第一天转换为当年七月的第一天。最后,我们再次使用数学来使用 _add_years() 函数将 0 或 1 年添加到结果日期。对于小于 7 的所有月份,我们添加 -1,对于 7 个月及以上的月份,我们添加 0。

    【讨论】:

    • 感谢您花时间回答。将更详细地探索您的表达方式。我发布了一个在上面有效的解决方案。请随时批评我的解决方案。
    【解决方案2】:

    这行得通。仍在试图弄清楚 _make_timestamp () 如何神奇地知道当前 FY 开始日期?

    if ( month( current_date ) 6 ) then ( _make_timestamp ( [Year of Today] + 0, 7, 1 ) ) else NULL

    【讨论】:

    • 您的解决方案也应该可以工作。我在这里看不到任何“魔法”。你告诉它你的财政年度开始日期隐含在你的 IF 条件中。如果月份为 6 岁及以下,我们处于一个财政年度,如果月份为 7 岁及以上,我们处于下一财政年度。
    • 是的,该解决方案确实有效。已经运行了几次迭代。感谢您的时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 2019-01-15
    • 2016-04-29
    • 2021-10-14
    • 2017-04-28
    • 2020-10-23
    • 1970-01-01
    相关资源
    最近更新 更多