2016-03-04 102 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