2013-08-27 57 views
1

我有一個業務需求來掩蓋低數字的機密性。SSAS多維數據集 - 模糊低數字

我一直在嘗試使用隱藏度量和計算來做到這一點。隱藏的措施被命名爲「Encounters_Count」和我使用的用於計算的MDX是:

CREATE MEMBER CURRENTCUBE.[Measures].[Number of Encounters] 
    AS IIF([Measures].[Encounters_Count] <= 5, "<hidden>", [Measures].[Encounters_Count]), 
FORMAT_STRING = "#,##0", NON_EMPTY_BEHAVIOR = { [Encounters_Count] }, VISIBLE = 1; 

這個工程除了在某些情況下有可能從組總計工作了隱藏的數字。

我試着寫一個遞歸計算,使用IsLeaf()從總數中排除「<隱藏的>」的結果,通過應用不同的規則,取決於它是父母還是子女,但我不知道該怎麼做這是正確的。

這是我一直在努力做的事情:

... 
IIF(IsLeaf([Measures].[Encounters_Count]), 
    IIF([Measures].[Encounters_Count] <= 5, "<hidden>", [Measures].[Encounters_Count]), 
    SUM(IIF([Measures].[Number of Encounters] <> "<hidden>", [Measures].[Number of Encounters], NULL)) 
), 
... 

 

編輯:這裏是什麼,我試圖避免的截圖,在這種情況下,你可以工作<隱藏的>數字爲4.對於Grand Total顯示31,163,因爲這是可見數字的總數。

Excel Screenshot

+0

我是新來的SSAS和已被拋入深處,我搜索谷歌和嘗試多種方法無濟於事。 – AeroX

+1

由於度量本身位於「度量值」層次結構的底層,因此「IsLeaf」將始終返回true,因爲該度量值恰好只有一個級別。 – FrankPl

回答

0

一旦你開始隱藏號碼,實現總量擺弄,報告準確度會降低......所以......如果說你的商業用戶,他們很高興與不準確的,爲什麼不想想其他辦法實現你的目標(在考慮MDX之前)?

你可以添加5%至所有總量/更換最右邊的數字爲「8」 /四捨五入到最接近的100 ...

這樣做是爲了所有總量,和你MDX沒有擔心IsLeaf()或者其中一些總數是否有隱藏的值,有些則沒有。

WITH MEMBER [Measures].[Obscured Values] AS 
IIF([Measures].[Encounters_Count] <= 5, "<hidden>", 
    IIF([Measures].[Encounters_Count] > 100, VBA!round([Measures].[Encounters_Count]*1.1, 0), [Measures].[Encounters_Count]) 
) 
+0

也許如果我詳細說明模糊低數字的原因。我們處理的一些數據是敏感數據。數字較小可能會使數據背後的人們被識別出來,這將違反保密規定。如果使用的維度可以識別人員,而不是概述數據,則應隱藏數據。 – AeroX

+1

我明白了。但是如果你打算改變一些總數中的數字,我想如果你巧妙地將所有總數改變爲隨機數,也許無關緊要。這仍然可以給出一個很好的概述(例如,A的總數爲200-ish,而B的總數爲1000-ish)。只是一個想法。抱歉,我無法使用MDX。 –

1

據我所知,你需要的是,如果數字很低,或者它接近總數,你必須隱藏它。

CREATE MEMBER CURRENTCUBE.[Measures].[Number of Encounters] AS 
    IIF(([Measures].[Encounters_Count] <> 0 AND [Measures].[Encounters_Count] <= 5) 
     OR ( ([Measures].[Encounters_Count], [Dim1].[Hier1].[All]) - [Measures].[Encounters_Count] > 0 
      AND ([Measures].[Encounters_Count], [Dim1].[Hier1].[All]) - [Measures].[Encounters_Count] <= 5) 
     OR ( ([Measures].[Encounters_Count], [Dim1].[Hier2].[All]) - [Measures].[Encounters_Count] > 0 
      AND ([Measures].[Encounters_Count], [Dim1].[Hier2].[All]) - [Measures].[Encounters_Count] <= 5) 
     OR ( ([Measures].[Encounters_Count], [Dim2].[Hier1].[All]) - [Measures].[Encounters_Count] > 0 
      AND ([Measures].[Encounters_Count], [Dim2].[Hier1].[All]) - [Measures].[Encounters_Count] <= 5) 
     OR // add all 'All' members of all hierarchies here 
     , "<hidden>", [Measures].[Encounters_Count]), 
    FORMAT_STRING = "#,##0", NON_EMPTY_BEHAVIOR = { [Encounters_Count] }, VISIBLE = 1; 

會隱藏這些。這是一個相當長的陳述,只要更改多維數據集中的任何層次結構,就需要仔細維護。

對於一個完美的解決方案,還不止一個All成員的組合將不得不進行治療,但是這可能會導致一個combinatorial explosion,我不知道你是否能得到這些組合與標準的客戶端工具不允許你可以編寫你自己的MDX。但是 - 說實話 - 我對此沒有多少想法。

您可能希望圍繞這些值使用Abs()以避免出現負值的問題。

+0

感謝您的貢獻,我更新了這個問題以更好地展示我想要實現的目標。 – AeroX

+0

我建議的定義不會顯示「其他」列的值,因爲它與Excel顯示的「所有」成員的差異小於5,列標題爲「總計」。你試過了嗎?您只需使用您在測試查詢中使用的那些層次結構進行測試,而不是使用多維數據集中的所有層次結構。 – FrankPl

0

我不知道是否可以接受使原始措施不可見,並創建另一種措施來顯示值並在需要時保護/取消。這種方式可以像往常一樣聚合/計算事物。

+0

如果您知道一種可能安全或禁止可能有效的措施的方法。提供的其他一些解決方案的主要問題是,我不知道用戶將事先使用哪種尺寸組合。 – AeroX

+0

您可以將原有的mesaure隱形。那麼除非他們對魔方擁有特殊權利,否則任何人都不會看到它。所以它不是真的安全,但隱藏。 – ebayindir

相關問題