MDX前季度日范围

时间:2015-01-23 16:16:55

标签: sql time mdx business-intelligence

我的财务部门已经承担了一项相当奇怪的时间智能功能,我试图解决这个问题。

我被要求在我们的SSAS Cube中制定一项措施,以便根据我们在当前季度的距离来查看上一季度。但是,与其前几天相比,他们希望看到剩余的天数与前几天相比,而不是看到目前已经过去的天数的标准概念。

我的意思是,以2015年1月22日为例。我们在本季度剩余48天,我通过计算的方法得到。我需要找到上一季度的相应工作日,并且还剩下48天。

此时我可以创建一个日期范围,其中包含上一季度第一个日期以及上面相应日期的某些聚合函数,并得出他们正在寻找的内容。

我迄今为止最好的想法是在数据库部分本身可能会这样做,方法是创建一个新的列,该列基本上是剩余但存储的计算天数。但是那时我不确定如何在SSAS中采用计算的度量并过滤前一个四分之一日期成员以使用该属性。

2 个答案:

答案 0 :(得分:0)

您的立方体中是否有实用程序尺寸?我们有一个名为TimeCalculations。在那里,我们有诸如CurrentValue,MTDValue,PrevEquivMTD,Past7Days ......我认为你的新逻辑会适应这样的维度。

这是一个针对AdvWrks的PrevEquivQTD的例子,我刚刚玩过它。猜测这对你的场景并没有多大帮助,但我很乐意写它:

WITH 
  SET [NonEmptyDates] AS 
    NonEmpty
    (
      [Date].[Calendar].[Date].MEMBERS
     ,[Measures].[Internet Sales Amount]
    ) 
  SET [LastNonEmptyDate] AS 
    Tail([NonEmptyDates]) 
  SET [CurrQ] AS 
    Exists
    (
      [Date].[Calendar].[Calendar Quarter]
     ,[LastNonEmptyDate].Item(0)
    ) 
  MEMBER [Measures].[pos] AS 
    Rank
    (
      [LastNonEmptyDate].Item(0)
     ,Descendants
      (
        [CurrQ]
       ,[Date].[Calendar].[Date]
      )
    ) 
  MEMBER [Measures].[PrevEquivalentQTD] AS 
    Sum
    (
      Head
      (
        Descendants
        (
          [CurrQ].ITEM(0).PrevMember
         ,[Date].[Calendar].[Date]
        )
       ,[Measures].[pos]
      )
     ,[Measures].[Internet Sales Amount]
    ) 
SELECT 
  {[Measures].[pos],[Measures].[PrevEquivalentQTD]} ON 0
 ,[LastNonEmptyDate] ON 1
FROM 
(
  SELECT 
      [Date].[Calendar].[Date].&[20050111]
    : 
      [Date].[Calendar].[Date].&[20080611] ON 0
  FROM [Adventure Works]
);

答案 1 :(得分:0)

您的日期 2015年1月22日。您希望 上一季度的相同日期 ,这将是 2015年8月22日

如果这是你想要的,你将不得不使用MDX函数ParallelPeriod,如下面的示例所示。请用您自己的尺寸和立方体替换它。

Select
ParallelPeriod
( 
[Date].[Calendar Date].[Calendar Quarter],    -- Level Expression
1,                                            -- Index
[Date].[Calendar Date].[Date].&[20150122]     -- Member Expression
) On 0 
From [Adventure Works]

如果您想在下一季度中使用相同的日期,请将索引1替换为-1。

干杯