仅适用于NonEmpty - SSAS MDX的平均值

时间:2016-03-04 15:03:22

标签: ssas mdx average

有一天(可能有几个日期时间记录)我想基于我的第一个度量创建仅针对AVG值计算nonempty的第二个度量。我尝试了以下内容:

"CREATE MEMBER CURRENTCUBE.[Measures].[M2] 
AS AVG([Measures].[M1]),
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'DATA' ;"

但SSAS AVG功能似乎给我一个总和:

日期时间“M1”
1/1/16 12:10“10”
1/1/16 13:10“12”
1/1/16 14:10
1/1/16 15:10“9”
1/1/16 16:10
1/1/16 17:10“21”
1/1/16 18:10
1/1/16 19:10“2”

非空的平均测量值(10 + 12 + 9 + 21 + 2)/ 5非空值= 10,8

2 个答案:

答案 0 :(得分:1)

如果你想要一个平均每日价值,那么@whytheq在MDX中展示了一种方法。但我相信你想要一个简单的平均值。在SSAS中执行此操作的正确方法是使用AggregateFunction = Sum(您已经拥有)创建一个绑定到SQL列M1的度量M1,并使用AggregateFunction = Count创建该度量值组中的SQL列M1上的第二个度量M1_Count。 p>

然后创建一个计算的度量:

CREATE MEMBER CURRENTCUBE.[Measures].[M1 Avg] as
IIF([Measures].[M1_Count]=0,null,[Measures].[M1]/[Measures].[M1_Count]);

答案 1 :(得分:0)

您需要计算一组的平均,因此您需要为AVG函数引入第一个参数。

从这里:
https://msdn.microsoft.com/en-us/library/ms146067.aspx?f=255&MSPPError=-2147217396

这是定义:

  

平均(Set_Expression [,Numeric_Expression])

而不是AVG([Measures].[M1])试试这个:

AVG(
 nonempty([Date].[Calendar].[Date], [Measures].[M1])
 ,[Measures].[M1]
)

...但我相信AVG功能会为你处理空值。所以以下内容应该是等效的:

AVG(
  [Date].[Calendar].[Date]
 ,[Measures].[M1]
)