2016-01-15 39 views
0

我正在嘗試使用MDX創建計算平均值的計算成員。我有兩項措施,[高中GPA]和[高中GPA]。如果[高中GPA]是數字,[高中GPA]設置爲1,否則爲0.因此,在過去,以下計算的成員工作得很好。在計算平均值時忽略零的MDX腳本

case 
    when [MEASURES].[Has High School GPA] is null 
     or [MEASURES].[Has High School GPA] = 0 
then null 
    else 
     [MEASURES].[High School GPA]/[MEASURES].[Has High School GPA] 
end 

現在,我需要排除[高中GPA]從我的平均值計算= 0.00,即使[具有高中GPA]將等於1,所以,我修改了我的腳本如下。

case 
    when [MEASURES].[Has High School GPA] IS null 
     or [MEASURES].[Has High School GPA] = 0 
     or [MEASURES].[High School GPA] = 0 
then null 
    else 
     [MEASURES].[High School GPA]/[MEASURES].[Has High School GPA] 
end 

但是,我的平均值仍然包括[高中GPA] = 0.00的記錄。任何關於如何解決這個問題的建議?

+0

在SQL數據庫中,這些GPA值是0還是爲null? – GregGalloway

+0

他們可以是零和空,我想忽略這兩個。我們將要求企業在源系統上修復此問題,以便我們未來不會看到任何0。但是我需要臨時MDX解決方案:-) – Raj

+0

如果SQL數據庫中的GPA值爲空,則[高中GPA]將設置爲0.但是,如果GPA值爲0,[高中GPA]設置爲1會影響平均值。 – Raj

回答

1

解決此問題的最簡單方法是在DSV中的該表上創建一個計算列。該計算應該是:

NULLIF(GPA,0)

然後在使用該列確保NullHandling屬性設置爲保存措施。這應該確保0和Null結束Null。

順便說一下,在MDX中,IS NULL語法不是你想要的。使用IsEmpty()代替。但在這種情況下,它是多餘的,因爲MDX中的Null = 0。所以適當的MDX應該是:

case 
    when [MEASURES].[Has High School GPA] = 0 
     or [MEASURES].[High School GPA] = 0 
then null 
    else 
     [MEASURES].[High School GPA]/[MEASURES].[Has High School GPA] 
end 
+0

感謝您的反饋。我試着實現你的解決方案,但恐怕平均仍然包含0。我使用NULLIF(HighSchoolGPA,0)作爲表達式在DSV中的相關表上添加了一個名爲計算的CorrectHighSchoolGPA。然後我創建了一個新的「正確的高中GPA ~~」度量來引用指定的計算,確保「NullProcessing」設置爲Preserve。最後,我使用您提供的MDX創建瞭如下的新計算。不過,我可以向你保證輸出仍然包含0。我通過查詢底層表來驗證這一點。 noluck – Raj

+0

@Raj hmm。這一切聽起來不錯。你在分母Has High School GPA上做了什麼?你是否也設置了NullHandling = Preserve?什麼是它的聚合函數? – GregGalloway

+0

我離開NullProcessing自動和AggregateFunction是Sum.I甚至嘗試以下沒有高中GPA,但得到了相同的結果。 ([高中GPA ~~]) 其他 [措施] [正確高中GPA ~~]/[措施] [高中GPA ~~] 結束 – Raj