2016-03-01 79 views
0

我有一個具有10個屬性1..10的維度X.爲了使一個範圍內的措施Ÿ自定義計算,我可以寫這樣的說法:MDX適用於維度的所有屬性的範圍

SCOPE([X].[1].CHILDREN, [Measures].[Y]); 
THIS = 1+1; 
END SCOPE; 

這將確保當維度屬性1與Y中的一起,那麼結果將是2

是否有任何簡單的方法來編寫它以確保它適用於維度X內的所有屬性,而不是使用嵌套範圍並明確定義所有屬性?

SCOPE([X]。[*])或類似的東西?

回答

1

再創建一個計算的成員如下:

CREATE MEMBER DimSelected AS 
IIF(
[X].[1].CURRENTMEMBER IS [X].[1].[All] 
AND 
[X].[2].CURRENTMEMBER IS [X].[2].[All] 
AND 
[X].[3].CURRENTMEMBER IS [X].[3].[All] 
AND 
[X].[4].CURRENTMEMBER IS [X].[4].[All] 
AND 
[X].[5].CURRENTMEMBER IS [X].[5].[All] 
AND 
[X].[6].CURRENTMEMBER IS [X].[6].[All] 
AND 
[X].[7].CURRENTMEMBER IS [X].[7].[All] 
AND 
[X].[8].CURRENTMEMBER IS [X].[8].[All] 
AND 
[X].[9].CURRENTMEMBER IS [X].[9].[All] 
AND 
[X].[10].CURRENTMEMBER IS [X].[10].[All], 
NULL, 
1) 

並修改範圍的邏輯如下:

SCOPE([Measures].[Y]); 
IF Measures.DimSelected = 1 THEN This = 1+1 END IF; 
END SCOPE; 

此外,如果只打算以往任何時候都選擇在某個給定軸昏暗的下方,可能工作:

CREATE MEMBER MembersSelected AS 
GENERATE(AXIS(1) AS a, a.current.item(0).unique_name) 

CREATE member HasX as 
IIF(instr(1,MembersSelected,"[X].") <> 0, "Yes", NULL) 

然後修改您的範圍邏輯如下:

SCOPE([Measures].[Y]); 
IF Measures.HasX = "Yes" THEN This = 1+1 END IF; 
END SCOPE; 
+0

我實際上玩過AXIS功能,但是您的解決方案看起來好多了。謝謝! – user2053579