Cognos 10 固定 MM/dd 但年份可变

Cognos 10 fixed MM/dd but variable year

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

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

逻辑 如果 current_month <= 6 那么年份(current_date,-1 )否则年份(current_date)。想要将年份与 xxxx-06-01 或最好是 06/01/xxxx 连接起来。不断收到 运行 次错误,而不是查询计算中的错误。

目前只见树木不见森林。继续探索,如果实现的话会post解。

您希望以日期格式保留日期并尽可能避免转换为字符串和连接。 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() 函数 returns 当前月份的第一天。然后我们使用一些数学来确定一个偏移量以传递给 _add_months() 函数,该函数将每个可能的月份值将当前月份的第一天转换为当年七月的第一天。最后,我们再次使用数学,使用 _add_years() 函数将 0 年或 1 年添加到结果日期。对于所有小于 7 的月份,我们添加 -1,对于 7 个月和更大的月份,我们添加 0。

这行得通。仍然想弄清楚 _make_timestamp () 是如何神奇地知道当前财年开始日期的?

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