2014-10-20 73 views
0

我正在使用SSAS 2008 R2多維數據集並通過Excel 2010查詢數據。在多維數據集中,我有一個計算來有條件地格式化數據。該邏輯是,如果一個量度包含正被觀看的事實的特定值,則該事實應該爲紅色,如下所示:SSAS多維數據集中的計算不能用於零數據值

CALCULATE;  

SCOPE 
(
    [Measures].[Data value] 
); 

If([Fact Base].[Confidentiality Status].[Confidential]) Then 
    Fore_Color(This) = 255 
End If;  

END SCOPE; 

當我有0(零)的FORE_COLOR沒有按一個[data value]中在Excel中不呈現紅色。如果我將數據值更改爲零以外的值,並重新處理呈現爲紅色的多維數據集。有什麼我失蹤,或者是否有更好的MDX腳本,也可以爲零值工作?

+0

你確定發生錯誤渲染的值真的是0嗎?或者它們可能是空的(即缺少記錄)? – FrankPl 2014-10-20 17:18:14

+0

@FrankPl是的,我甚至嘗試將數據從0更改爲其他內容,然後重新處理多維數據集。當我這樣做時,顏色呈現爲預期(即紅色)。當我改回0時,它再也沒有了。 – 2014-10-20 20:09:54

+0

我不確定這是Excel還是Analysis Services問題。您可以從Management Studio運行一個MDX查詢,您可以在語句的最後(在所有FROM和WHERE子句之後)追加'CELL PROPERTIES VALUE,FORMATTED_VALUE,FORE_COLOR',然後在結果中雙擊一個包含零到請參閱FORE_COLOR屬性值? – FrankPl 2014-10-21 07:45:59

回答

0

有效您具備以下條件:(?...所以不希望0呈現爲紅色)

If([Fact Base].[Confidentiality Status].[Confidential] = 1) Then 
    Fore_Color(This) = 255 
End If;  

執行以下操作平均數據0是紅色的?:

If([Fact Base].[Confidentiality Status].[Confidential] = 0) Then 
    Fore_Color(This) = 255 
End If; 
+0

不,我沒有 - 我有一個表,其中包含一個稱爲機密性狀態的字段和一個稱爲數據值的字段。當機密性狀態=「機密」時,數據值(即範圍)呈現爲紅色。如果保密狀態有任何其他值,則數據值不應爲紅色。由於某種原因,如果數據值爲零(非空),那麼它不顯示紅色。 – 2014-10-20 20:25:48

+0

爲了進一步闡明機密性作爲退化維而暴露,但與數據值位於同一個表中。 – 2014-10-20 23:59:24

0

您應該使用

SCOPE 
(
    [Measures].[Data value], [Fact Base].[Confidentiality Status].[Confidential] 
); 

    Fore_Color(This) = 255 

END SCOPE; 

備選地,但效率較低:

SCOPE 
(
    [Measures].[Data value] 
); 

If([Fact Base].[Confidentiality Status].CurrentMember IS [Fact Base].[Confidentiality Status].[Confidential]) Then 
    Fore_Color(This) = 255 
End If;  

END SCOPE; 

這設置前景色度量Data valueConfidential構件。

什麼您的代碼做是設置前景色如果,對於Confidential構件,當前度量的值(其爲總是Data value範圍內)不爲空或0。當評估數值表達式作爲條件,在MDX中,所有不爲0或null的值都被評估爲true。如果您在此處使用會員,MDX會檢查其當前值的值。要檢查層次結構的當前成員是否是特定的成員,請使用IS,正如我在上面的第二個版本中所做的那樣。

編輯 由於要求是,以檢查是否在當前單元格,則包含的數據,如果該維度包含在查詢或不被涉及到保密狀態的「機密」,沒關係,你可以使用方法:

SCOPE 
(
    [Measures].[Data value] 
); 

If(Intersect(EXISTING [Fact Base].[Confidentiality Status].[Confidentiality Status].Members, 
      {[Fact Base].[Confidentiality Status].[Confidential]}).Count = 1 Then 
    Fore_Color(This) = 255 
End If;  

END SCOPE; 

這用來檢查與當前小區和由Confidential構件中的所述一個元件組的數據存在Confidentiality Status水平Confidentiality Status屬性層次結構的所有成員之間的交叉點具有一個元件,用換句話說,如果該成員包含在現有成員中rs級別。

+0

這兩種解決方案都可以工作,但它們依賴於機密性狀態是一個活動維度 - 即,如果未使用,則數據不會變爲紅色。我的問題中的初始腳本不需要在查詢中選擇保密狀態。 – 2014-10-23 23:32:42

+0

@Greg你的要求是什麼? – FrankPl 2014-10-24 06:49:36

+0

@FrankPI無論包含機密性狀態的維度是否實際拖入數據透視表,我需要能夠將數據值顯示爲紅色,如果其機密性狀態爲「機密」。除了零值之外,我在問題中發佈的初始代碼的行爲方式如此。我認爲你的解決方案很接近,但我懷疑還有另一個價值,而不是我可以使用的「CurrentMember」。對不起,我還是新來的MDX。 – 2014-10-24 07:23:24

相關問題