在选定月份中为基准平均值设置MDX目标表达式

时间:2014-08-25 19:09:22

标签: sql-server ssas mdx

我们的数据每月更新一次,可用数据的最后日期可能会落后45-75天。例如,截至2014年8月25日,数据截至2014年6月30日当前。

我有一个名为[日历]的时间维度层次结构,其中[年份]> [半年]> [季度]> [月]> [日期] 我有一个措施,[Measures]。[Fatalities]设置为计算成员。 我有[测量]的KPI。[死亡率]设置为值表达式。我的问题是设置目标表达式。

我正在尝试设定一个目标表达式,即5年基线平均值的减少百分比(第7年:第3年)。因此,对于本年度(2014年,2014年6月的数据),目标将是2007年1月至6月,2008年1月至6月,2009年1月至6月,2010年1月至6月,1月 - 的平均值减少20% 2011年6月。

我已将以下MDX设置为目标表达式:

.8*((
([Measures].[Fatalities],
PARALLELPERIOD([Time].[Calendar].[Year],7,[Time].[Calendar].CurrentMember))
+
([Measures].[Fatalities],
PARALLELPERIOD([Time].[Calendar].[Year],6,[Time].[Calendar].CurrentMember))
+
([Measures].[Fatalities],
PARALLELPERIOD([Time].[Calendar].[Year],5,[Time].[Calendar].CurrentMember))
+
([Measures].[Fatalities],
PARALLELPERIOD([Time].[Calendar].[Year],4,[Time].[Calendar].CurrentMember))
+
([Measures].[Fatalities],
PARALLELPERIOD([Time].[Calendar].[Year],3,[Time].[Calendar].CurrentMember))

)/5

问题在于目标是将日历层次结构的年份平均值视为全年平均值。例如,在附加的屏幕截图中,当死亡人数为空时,死亡率目标将为空,更重要的是,日历层次结构的年级目标只是Jan-Jun目标的总和。此示例中的死亡率目标应在2014年日历年级读取549.28,状态仍为绿色。

Screenshot

1 个答案:

答案 0 :(得分:0)

你可以用Iif:

来做
Iif( IsEmpty ([Measures].[Fatalities],[Time].[Calendar].CurrentMember) ), null, (...) )

这样,只有您拥有数据的时段才会有目标。

[编辑]

根据您的其他问题,如何仅根据过去5年的等效时间段计算2014年目标。它有点棘手,需要定义一个相当长的计算量。

步骤1:确定您拥有数据的月数

WITH Member [Measures].[Months with Data] as Count( Filter( Descendants( [Time].[Calendar].[Year].[2014], [Time].[Calendar].[Month] ), NOT IsEmpty( [Measures].[Fatalities] ) ) )

第2步:为相应的月份定义给定年份的度量

MEMBER [Measures].[Fatalities in Period] as Aggregate( Head( Descendants( [Time].[Calendar].CurrentMember, [Time].[Calendar].[Month] ), [Measures].[Months with Data] ) )

步骤3:生成前5年的值

MEMBER [Measures].[Target] as Avg( ( [Time].[Calendar].[Year].[2014].Lag(5) : [Time].[Calendar].[Year].[2014].Lag(1) ), [Measures].[Fatalities in Period] )

你可能不得不在这里调整一些东西,我是在没有测试的情况下从内存中编写的,但这是一般的想法。