BO 4.0 (IDT) 中的月份偏移

Month Offset in BO 4.0 (IDT)

我想参考当前日期进行月份偏移(我使用的是 BusinessObjects 4.0 信息设计工具)。 因此,例如,有一列的值为 201505(表示 2015 年 5 月),新列的值应为“2”(假设当前月份为 201503 - 2015 年 3 月)。 另一个示例,如果第一列的值为“201410”,则新列应具有相应的值“-7”。

我尝试通过分析'Current Month Num - 12'列来实现'month offset'列,其定义如下:

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 函数,也无法在 Internet 上找到有关它们的任何信息。

我的想法是通过采用第一列中的值(值为 201401、201502)并从当前日期中减去这些值(例如 201501、201501、 201403...).

谁能帮我解决以下问题:

  1. 解释 convert、dateadd 函数以及上面的表达式
  2. 帮我定义 'month offset' 列

谢谢!

函数 convertdateadd 是 SQL 服务器函数,而不是 BusinessObject 函数。您可以在 Transact-SQL Reference > Built-in Functions 部分的 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将数据类型从字符串更改为整数。

您不能使用结果值开始计算(例如,从 201501 中减去 201401),因为这不会考虑您处理的是年和月)。后一个示例将 return 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 服务器版本中有了显着改进,无需执行此类复杂的转换。再次查看联机丛书,了解您正在使用的 SQL 服务器版本中的可用内容。