0

状況: SQL Server 2012 SSAS 多次元モデルで、キューブに空のメジャーを作成し、スコープ ステートメントを使用して計算を入力することにより、計算されたメジャーを作成しました。(したがって、ここで説明されているように、計算でセキュリティ対策を使用できます)

SCOPE [Measures].[C];
THIS = IIF([B]=0,0,[Measures].[A]/[Measures].[B]);

また、上記の計算を含むメジャー グループ全体を対象とした時間計算も行いました。(ここで説明されているように

計算用に空のメンバーを作成します。

    --YTD Calculations
    CREATE MEMBER CURRENTCUBE.[Calender Calculations].[YTD-1]                       AS NULL;     
    CREATE MEMBER CURRENTCUBE.[Calender Calculations].[YTD]                     AS NULL;  
-- MOVING ANNUAL TOTAL Calculations
CREATE MEMBER CURRENTCUBE.[Calender Calculations].[MAT-1]                       AS NULL;  
   CREATE MEMBER CURRENTCUBE.[Calender Calculations].[MAT]                     AS NULL;
--SCOPE MEASUREGROUPMEASURES 

I scope the measuregroup on which the calculations will be performed:
SCOPE (MeasureGroupMeasures("Sales") 
        );

Next I scope the time calculations for the different Time Hierarchys:
SCOPE ([Calender].[Jaar].[Jaar].members,[Calender].[Calender ID].members); 

       --YTD          
        ([Calender Calculations].[YTD]=
        Aggregate(
        CrossJoin({[Calender Calculations].[Current Period]},
        PeriodsToDate(
        [Calender].[Month Hierarchy].[Jaar],
        [Calender].[Month Hierarchy].CurrentMember))
        )
        ); 

       --YTD -1    
        ([Calender Calculations].[YTD-1]=
        Aggregate(
        Crossjoin({[Calender Calculations].[Current Period]},
        PeriodsToDate(
        [Calender].[Month Hierarchy].[Jaar],
        ParallelPeriod(
        [Calender].[Month Hierarchy].[Jaar],1,
        [Calender].[Month Hierarchy].CurrentMember))
        )
        ));
    --MAT       
        ([Calender Calculations].[MAT]=
        Aggregate(
        CrossJoin({[Calender Calculations].&[Current Period]},
        ParallelPeriod([Calender].[Month Hierarchy].[Month],11,[Calender].[Month Hierarchy].CurrentMember) :
        [Calender].[Month Hierarchy].CurrentMember      
        ))); 

    --MAT-1      
        ([Calender Calculations].[MAT-1]=
        Aggregate(
        CrossJoin({[Calender Calculations].&[Current Period]},
        ParallelPeriod([Calender].[Month Hierarchy].[Month],23,[Calender]. [Month Hierarchy].CurrentMember) :
        ParallelPeriod([Calender].[Month Hierarchy].[Month],12,[Calender].[Month Hierarchy].CurrentMember)      
        ))); 

  --SCOPE Calendar END
    END SCOPE;   

メジャー グループ スコープを閉じる

--SCOPE MEASUREGROUPMEASURES END
END SCOPE;

結果: 「ベース メジャー」と「計算されたメジャー」を使用してキューブをクエリすると、時間計算の結果はベース メジャーでは正しいが、「計算されたメジャー」 C では正しくない。これは、メジャーが最初に計算され、その後で取得されるため時間計算が行われ、結果が集計されます。

例: 現在の月は 2015 年 4 月です。毎月のスコアは 5% です。YTD メジャーは 20% (1 月、2 月などは 5%) を示します。これは 5% である必要があります。

私の質問: 正しい結果が得られるように、時間計算または「計算メジャー」を変更するにはどうすればよいですか?

4

0 に答える 0