我的财务部门已经承担了一项相当奇怪的时间智能功能,我试图解决这个问题。
我被要求在我们的SSAS Cube中制定一项措施,以便根据我们在当前季度的距离来查看上一季度。但是,与其前几天相比,他们希望看到剩余的天数与前几天相比,而不是看到目前已经过去的天数的标准概念。
我的意思是,以2015年1月22日为例。我们在本季度剩余48天,我通过计算的方法得到。我需要找到上一季度的相应工作日,并且还剩下48天。
此时我可以创建一个日期范围,其中包含上一季度第一个日期以及上面相应日期的某些聚合函数,并得出他们正在寻找的内容。
我迄今为止最好的想法是在数据库部分本身可能会这样做,方法是创建一个新的列,该列基本上是剩余但存储的计算天数。但是那时我不确定如何在SSAS中采用计算的度量并过滤前一个四分之一日期成员以使用该属性。
答案 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。
干杯