仅针对 NonEmpty 的平均值 - SSAS MDX

Average only for NonEmpty - SSAS MDX

一天(可能有多个日期时间记录)我想创建一个第二个度量,根据我的第一个度量计算一个 AVG 仅用于 nonempty 值。我尝试了以下方法:

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

但是 SSAS AVG 函数似乎 return 我一个总和:

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

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

您需要计算集合的平均值,因此您需要向 AVG 函数引入第一个参数。

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

这是定义:

Avg( Set_Expression [ , Numeric_Expression ] )

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

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

...但我相信 AVG 函数会为您处理空值。所以下面应该是等价的:

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

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

的度量组中

然后创建计算度量:

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