是否可以创建动态计算字段?

时间:2013-08-21 18:54:01

标签: ssas olap olap-cube

如何根据日期/时间戳创建动态计算字段以确定天数?

例如,假设我有一个具有日期时间戳的字段。我希望在浏览多维数据集时能够看到的是显示自时间戳以来天数的列。因此,如果日期时间戳为'8/21/13 12:00 PM'并且我在'8/22/13 12:00 PM'浏览多维数据集,则计算列“自以后的天数”将显示为1.

SSAS甚至可以实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

是的,你可以:

with member Measures.[date string] as
            Left(Right([Date].[Date].CurrentMember.UniqueName, 9), 8)
     member Measures.[date formatted] as
            Left(Measures.[date string], 4) + "-" +
            Mid(Measures.[date string], 5, 2) + "-" +
            Right(Measures.[date string], 2)
     member Measures.[date date] as
            CDate( Measures.[date formatted])
     member Measures.[to today] as
            now() -  Measures.[date date]
            , format_string = 'yy" years, "m" months, "d" days"'

select { 
          Measures.[date string],
          Measures.[date formatted],
          Measures.[date date],
          Measures.[to today]
       }
       on columns,
       [Date].[Date].[Date].Members
       on rows
  from [Adventure Works]

给出你想要的东西。你当然不需要所有的中间措施,它们只是逐步显示计算的内容。

但请注意:我使用to today格式化了yy指标的日期格式。一个四位数的年份将显示为“1912年”等,因为SSAS在内部使用自1900年1月1日以来的Excel天数编码日期。我在这里错误地使用了日期格式来格式化持续时间,这是一个数字而不是真实日期。这种格式化方法仅在不到100年的正持续时间内给出正确的结果。但这只是一个格式问题,主要的持续时间计算是正确的。它只显示持续时间(以天为单位),以及一天中的时间作为分数。