2016-12-16 101 views
0

多維數據集(SQL Server 2016)包含維度[Unit].[Unit].&[1][Unit].[Unit].&[2]。我創建了一個計算維度:設置計算維度的角色(SSAS多維數據集)

CREATE MEMBER CURRENTCUBE.[Unit].[Unit].[All].[1/2] AS [Unit].[Unit].&[1]/[Unit].[Unit].&[2] 

限制訪問我創建了角色的[Unit].[Unit].[All].[1/2]尺寸。 但我無法在DimensionData-Basic選項卡中選擇[Unit].[Unit].[All].[1/2],因爲此屬性未出現在屬性列表中。 如果我在MDX腳本Denied member set: {[Unit].[Unit].[All].[1/2]}的DimensionData-Advanced選項卡中指定屬性[Unit].[Unit].[All].[1/2],則用戶會看到此屬性。 如何限制對計算維度的訪問?

回答

1

如果您將DimUnit SQL表更改爲包含「1/2」行,則將​​3210語句替換爲以下內容,它應該工作相同,並且您應該能夠在部署完成後在維度數據安全性中看到此成員處理多維數據集:

([Unit].[Unit].[1/2]) 
    = DIVIDE([Unit].[Unit].&[1], [Unit].[Unit].&[2]); 

那麼你已經創建了一個角色,使1/2的成員消失瀏覽與該用戶的多維數據集時,你會得到一個錯誤之後。上述行更改爲以下:

(IIf(IsError(StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)),Head([Unit].[Unit].Members,0),StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)) 
    = DIVIDE([Unit].[Unit].&[1], [Unit].[Unit].&[2]); 

BTW,DIVIDE做安全的鴻溝,從而被零除不會造成問題。

關閉我的頭頂我不記得StrToMember是否有必要而不僅僅是一個成員參考,所以我玩它安全。隨意嘗試沒有StrToMember。

要清楚整個腳本應該說:

CALCULATE; 

(IIf(IsError(StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)),Head([Unit].[Unit].Members,0),StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)) 
    = DIVIDE([Unit].[Unit].&[1], [Unit].[Unit].&[2]); 
+0

我取代舊的「創建成員」,並瀏覽與該用戶的多維數據集時我有錯誤。 我不明白我該在哪裏插入 '(IIf(IsError(StrToMember(「[Unit]。[Unit]。[1/2]」,CONSTRAINED)),Head([Unit]。[Unit] .Members ,[0],0),StrToMember(「[Unit]。[Unit] .1/2」,CONSTRAINED))= DIVIDE([Unit]。[Unit]。&[1],[Unit]。[Unit]。& [012]] 在多維數據集中的「計算」或角色中的DimensionData-Advanced選項卡(「Denied member set」)? – Natalya

+0

轉到計算選項卡並翻轉到腳本視圖。 !'CALCULATE' – GregGalloway

+0

感謝您的幫助 我在寫一個腳本:。 'CALCULATE; 創建成員CURRENTCUBE [單位] [單位] [1/2] AS (IIF(ISERROR(StrToMember(「[單位]。[Unit] .1/2',CONSTRAINED)), HEAD([U (Unit)。[Unit]。[Unit] .Members,0), StrToMember('[Unit]。[Unit]。1/2'',CONSTRAINED))= DIVIDE ,[單位]。[單位]。 &[2]));' 但是我得到一個錯誤「當字符串[Unit]。[Unit]。&[1/2]被解析時,在該立方體中找不到該對象。 – Natalya

相關問題