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...).
谁能帮我解决以下问题:
- 解释 convert、dateadd 函数以及上面的表达式
- 帮我定义 'month offset' 列
谢谢!
函数 convert
和 dateadd
是 SQL 服务器函数,而不是 BusinessObject 函数。您可以在 Transact-SQL Reference > Built-in Functions 部分的 Books Online 文档中获得更多信息.
关于现有的表达式:最里面打散现有的列值并将其转换为日期,例如201412
到 2014-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 服务器版本中的可用内容。
我想参考当前日期进行月份偏移(我使用的是 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...).
谁能帮我解决以下问题:
- 解释 convert、dateadd 函数以及上面的表达式
- 帮我定义 'month offset' 列
谢谢!
函数 convert
和 dateadd
是 SQL 服务器函数,而不是 BusinessObject 函数。您可以在 Transact-SQL Reference > Built-in Functions 部分的 Books Online 文档中获得更多信息.
关于现有的表达式:最里面打散现有的列值并将其转换为日期,例如201412
到 2014-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 服务器版本中的可用内容。