2017-05-17 16 views
0

DimA、DimB、DimCおよびDimDのキューブを想像してください。SSAS MDX計算されたメンバー、複数のスコープ

計算メンバーは、DimAまたはDimBに対してスライスした場合にのみ計算する必要があります。 DimCまたはDimDに対してのみスライスした場合、Nullが返されます。

は現在、私は、以下の3人の計算メンバーを使用することによって、これを達成している:私はこれらのかなりの数を作成する必要が

Create Member CurrentCube.[Measures].[CalMeasure1] As Null, VISIBLE = 0; 

SCOPE([Measures].[CalcMeasure1]); 
     SCOPE ([DimA].[DimA].[DimA]); 
      This = [Measures].[Camp Index]; 
     END SCOPE; 
END SCOPE; 


Create Member CurrentCube.[Measures].[CalcMeasure2] As Null, VISIBLE = 0; 

SCOPE([Measures].[CalcMeasure2]); 
     SCOPE ([DimB].[DimB].[DimB]); 
      This = [Measures].[Camp Index]; 

CREATE MEMBER CURRENTCUBE.[Measures].[CalcMeasure3] 
AS IIF(ISEMPTY([Measures].[CalcMeasure1]),[Measures].[CalcMeasure2],[Measures].[CalcMeasure1]), 
VISIBLE = 1 ; 
     END SCOPE; 
END SCOPE; 

ので、理想的に、私はではなく、単一の尺度でこれをやってみたかったです3つの別々の措置。私は入れ子スコープの作成を試みました。また、両方のディメンション階層を単一のスコープ内に配置しようとしました。しかし、これらの方法のどちらも機能しません。両方の方法では、小節がDimAとDimBの両方に対してスライスされている必要があります。私はそれがDimAまたはDimBのいずれかに対してスライスされていれば動作する必要があります。別のピボットテーブルの用途のために、期待結果 - :

私の上記のコードは仕事、私は1つだけ計算されるメンバに

[編集]を、それを凝縮したくありません。

DimA Attribute CalcMeasure3 
1     1.1 
2     1.1 
3     8.6 


DimB Attribute CalcMeasure3 
4     2.1 
5     2.1 
6     9.6 


DimA Attribute DimC Attribute CalcMeasure3 
1     A     1.1 
2     B     1.1 
3     C     8.6 


DimB Attribute DimD Attribute CalcMeasure3 
4     D     1.1 
5     E     1.1 
6     F     8.6 

DimC Attribute CalcMeasure3 
A     (Null) 
B     (Null) 
C     (Null) 


DimD Attribute CalcMeasure3 
D     (Null) 
E     (Null) 
F     (Null) 

答えて

1

どのようにこの計算された措置について、スコープなし:

WITH MEMBER [Camp Index] AS 
IIF( 
    not ([DimA].[DimA].CurrentMember is [DimA].[DimA].[All]) or not([DimB].[DimB].CurrentMember is [DimB].[DimB].[All]), 
[You Calcuate], 
IIF( 
    not ([DimC].[DimC].CurrentMember is [DimC].[DimC].[All]) or not([DimD].[DimD].CurrentMember is [DimD].[DimD].[All]), 
    NULL, 
    [You Calcuate] 
), 
NULL 
) 
SELECT 
{[Camp Index]} on 0 
from [Adventure Works] 
+0

(upped)でスライスしたときのNULL – whytheq

0

私の最初の推測:

Scope([Measures].[Camp Index]); 
    This = IIF(
       [DimC].[DimC].[DimC].CurrentMember is [DimC].[DimC].[All] 
       and 
       [DimD].[DimD].[DimD].CurrentMember is [DimD].[DimD].[All] 
       [Measures].[Camp Index], 
       NULL 
    ); 
End Scope; 
+0

感謝。 [DimA]。[DimA] .CurrentMemberは[DimA]。[DimA]。[すべて]と[DimB]。[DimB]。[DimB] .CurrentMemberは[DimB]です。[DimB] 。[すべて]?その場合、DimA、DimB、またはその両方でスライスしても、常にnullが返されます。貢献度TomのおかげでDimC、DimDまたはDim(n) – user8025238

関連する問題