2016-03-04 51 views
0

对于一天(可能有多个datetime记录),我想根据我的第一个度量创建第二个度量,仅计算nonemptyAVG值。我已经试过如下:仅适用于NonEmpty - SSAS MDX

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

但SSAS AVG功能似乎回到我总:

日期时间 “M1”
16年1月1日12:10 “10”
1 /十六分之一13:10 “12”
16年1月1日14:10
16年1月1日15:10 “9”
16年1月1日16:10
16年1月1日17:10“21”
1/1/16 18:10
16年1月1日19点10分 “2”

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

+0

有没有一种方法,以获得M1非空值的数量?在我的日期设置示例预期的答案是5 – SESAMAREVA

回答

1

如果你想日均值,那么@whytheq显示的方式做到这一点的MDX。但我相信你想要一个简单的平均值。在SSAS中执行此操作的正确方法是,使用AggregateFunction = Sum(已具有)创建与SQL列M1相关的度量M1,并使用AggregateFunction = Count在度量值组中创建SQL列M1上的第二个度量M1_Count。

然后创建一个计算度量:

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

您好格雷格GAlloway,我试过这个解决方案之前,我的帖子,但没有达到预期的结果。用SUM(M1)/ COUNT(Rows)计算的AVG考虑到了M1的空值,我只想保留非空值 – SESAMAREVA

+0

@SESAMAREVA正确。这就是为什么你需要一个M1_Count度量,它是该特定列的计数。 – GregGalloway

+0

感谢您的反馈。它现在工作正常:) – SESAMAREVA

0

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

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

这是定义:

AVG(Set_Expression [,数值_])

代替AVG([Measures].[M1])试试这个:

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

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

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

我提交了一个不同的答案,我认为这个问题是一个更好的答案。 – GregGalloway

+0

@GregGalloway根本不用担心:我不允许修改我们的立方体设置或设计,所以我部分地猜测了上述情况。 – whytheq