如何在IBM cognos中为上一年的开始/结束日期,今年的开始日期创建计算

时间:2018-07-30 14:38:47

标签: cognos-bi

我正在运行cognos报表,当我在2018-07-05上运行报表时,我希望MTD的开始日期为2018-06-01,因此我将日期函数逻辑用作
“ _ first_of_month(_add_months(current_date,-1))” 以获取MTD的开始日期(前一个月的开始日期'2018-06-01')和 “ _ last_of_month(_add_months(current_date,-1))” 以获取MTD结束日期(上个月结束日期为'2018-06-30')。 您能帮我创建要提取的日期逻辑吗 年初至今的开始日期为'2018-01-01', 年初至今结束日期为'2018-06-30', 上一年开始日期为“ 2017-01-01”,并且 上一年的结束日期为“ 2017-06-30”,并且该逻辑在1月份运行报告时也应该能够获取12月的数据。 谢谢

2 个答案:

答案 0 :(得分:0)

假设您正在尝试创建过滤器...

您可以为此使用宏,以便在与数据库服务器联系之前进行计算。

上个月初

[Namespace].[Query Subject].[Query Item] > #timestampMask (_add_months ($current_timestamp, -1), 'yyyy')#-#timestampMask (_add_months ($current_timestamp, -1), 'mm')#-01

上个月末

[Namespace].[Query Subject].[Query Item] < #timestampMask (_last_of_month (_add_months ($current_timestamp, -1)), 'yyyy-mm-dd')#

今年初

[Namespace].[Query Subject].[Query Item] > #timestampMask ($current_timestamp, 'yyyy')#-01-01

如果仅需要在报表上显示值,则可以使用“布局计算”来完成,这样就不会涉及数据库服务器。语法会有所不同。

答案 1 :(得分:0)

年初至今(截至上个月)

(
    extract(month,current_date) > 1 
    AND extract(year,current_date) = extract(year,[Date]) 
    AND [Date] <= _last_of_month(_add_months(current_date,-1))
)
OR
(
    extract(month,current_date) = 1 
    AND extract(year,current_date)-1 = extract(year,[Date])
)

年初至今(截至上个月)

(
    extract (month,current_date) > 1 
    AND extract(year,current_date)-1 = extract(year,[Date]) 
    AND [Date] <= _last_of_month(_add_months(_add_years(current_date,-1),-1))
(
OR 
(
    extract(month,current_date) = 1 
    AND extract(year,current_date)-2 = extract(year,[Date])
)

我们只需要应对一个月;一月。如果当前月份是一月,那么我们只需获取上一年的全部年初至今。 LY YTD同样适用,但在这种情况下,我们将获得两年前的全部年份。在2019年1月运行它,年初至今将在2018年完成,而年初至今将在2017年完成。

关于获得本年度的第一天,这很容易:

cast(extract(year,current_date) || '-01' || '-01',date)

..去年第一天:

cast(extract(year,current_date)-1 || '-01' || '-01',date)