我们的数据每月更新一次,可用数据的最后日期可能会落后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,状态仍为绿色。
答案 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] )
你可能不得不在这里调整一些东西,我是在没有测试的情况下从内存中编写的,但这是一般的想法。