BO 4.0中的月偏移(IDT)

时间:2015-03-02 11:10:48

标签: sql-server business-objects

我想在参考当前日期时使用一个月的偏移量(我使用的是BusinessObjects 4.0信息设计工具)。 例如,有一个值为201505(意味着2015年5月)的列,新列应具有值' 2' (假设当前月份是201503 - 2015年3月)。 另一个示例是,如果第一列的值为' 201410',则新列应具有相应的值' -7'。

我尝试实施“月份抵消”'通过分析当前月份数 - 12'列,定义如下:

cast(
convert(
    char(6), 
    dateadd(m, -12,
                left(cast(( Zeitdimension.Year_Month_NUM ) as char(6)), 4) 
                + '-' 
                + right(cast(( Zeitdimension.Year_Month_NUM ) as char(6)), 2)
                + '-01')
    , 112
) 
as int
)

(Zeitdimension.Year_Month_NUM的值为201402,201901 ......)

但是我不理解convert和dateadd函数,也无法在互联网上找到任何关于它们的信息。

我的想法是调整“当前月数 - 12”的定义。列取第一列中的值(值为201401,201502)并从当前日期减去这些值(201501,201403 ......等值)。

任何人都可以帮助我:

  1. 解释convert,dateadd函数以及上面的表达式
  2. 帮我定义月份偏移量'柱
  3. THX!

1 个答案:

答案 0 :(得分:1)

函数convertdateadd是SQL Server函数,而不是BusinessObject函数。您可以在 Transact-SQL参考>部分的Books Online文档中了解有关它们的更多信息。 内置函数

关于现有表达式:最里面的分解现有列值并将其转换为日期,例如2014122014-12-01

left(cast(( Zeitdimension.Year_Month_NUM ) as char(6)), 4) 
+ '-' 
+ right(cast(( Zeitdimension.Year_Month_NUM ) as char(6)), 2)
+ '-01')

dateadd函数然后减去12个月。 convert将日期更改为字符串(格式YYYYMMDD)并删除最后2位数字,从而生成201312

最后,cast将数据类型从字符串更改为整数。

您无法开始使用结果值进行计算(例如从201401减去201501),因为这不会考虑您处理的年数和月数) 。后一个示例将返回100而不是12

相反,要计算与当前日期相比的月数偏移量,请尝试以下表达式:

datediff(mm
        ,dateadd(d, datepart(d, getdate()) * -1, getdate())
        ,left(cast(( Zeitdimension.Year_Month_NUM ) as char(6)), 4) 
        + '-' 
        + right(cast(( Zeitdimension.Year_Month_NUM ) as char(6)), 2)
        + '-01')

这将采用当前日期,减去当前天数(因此您总是在该月的第一个日期结束),然后使用datediff来计算月数差异。

在最新的SQL Server版本中,可用的日期时间功能得到了显着改善,无需执行此类错综复杂的转换。再次,查看联机丛书,了解您正在使用的SQL Server版本中可用的内容。