Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 为选定月份的基线平均值设置MDX目标表达式_Sql Server_Ssas_Mdx - Fatal编程技术网

Sql server 为选定月份的基线平均值设置MDX目标表达式

Sql server 为选定月份的基线平均值设置MDX目标表达式,sql-server,ssas,mdx,Sql Server,Ssas,Mdx,我们的数据每月更新一次,可用数据的最后日期可以晚于45-75天。例如,截至2014年8月25日,数据为截至2014年6月30日的最新数据 我有一个名为[Calendar]的时间维度层次结构,其中有[Year]>[Half Year]>[Quarter]>[Month]>[Date] 我有一个度量值,[度量值][死亡率]设置为计算成员。 我将[Measures].[Detairies]设置为值表达式的KPI。我的问题是如何设置目标表达式 我试图设定一个目标表达式,即5年基线平均值第7年:第3年的减

我们的数据每月更新一次,可用数据的最后日期可以晚于45-75天。例如,截至2014年8月25日,数据为截至2014年6月30日的最新数据

我有一个名为[Calendar]的时间维度层次结构,其中有[Year]>[Half Year]>[Quarter]>[Month]>[Date] 我有一个度量值,[度量值][死亡率]设置为计算成员。 我将[Measures].[Detairies]设置为值表达式的KPI。我的问题是如何设置目标表达式

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

我已将以下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
问题是,目标是在日历层次结构的年份级别获取全年平均值。例如,在所附的屏幕截图中,当死亡人数为空时,死亡人数目标将为空,更重要的是,日历层次结构中年度级别的目标将仅为1-6月目标的总和。本例中的死亡目标应为2014日历年的549.28,且状态仍为绿色


你可以用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] )

您可能需要在这里调整很多内容,我在没有测试的情况下从内存中编写了它,但这是总体思路。

谢谢您的回复。通过删除任何没有数据的日历层次结构成员的目标,这解决了一半的问题。剩下的问题是,日历2014目标仍将采用5年基线的平均值,而不是5年基线中每5年前6个月的基线。编辑回复,让您了解需要做什么。