2017-04-19 1 views

Répondre

0

J'ai posté un très utile article pour ce cas:

Aggregate(
    LastPeriods(
     3, 
     StrToMember('[Date].[Calendar].[Month].&[' + Format(Now(),'yyyyMM') + ']') 
    ), 
    [Measures].[YourNotCalulatedMeasure]   
) 
1

Si vous devez couvrir des comptages distincts ainsi que des sommes, alors AGGREGATE est la fonction à utiliser, mais si vous n'avez pas besoin de comptes distincts, vous pouvez simplement utiliser SUM.

Si vous avez un mois sélectionné ou mois ON ROWS puis de retourner le mois sélectionné alors quelque chose comme ce qui suit devrait fonctionner:

[Date].[Date - Calendar Month].CurrentMember 

Pour aller puis retour 3 mois, vous pouvez ajouter la fonction LAG:

[Date].[Date - Calendar Month].CurrentMember.LAG(3) 

maintenant, pour obtenir cette gamme de mois utilisent l'opérateur ::

[Date].[Date - Calendar Month].CurrentMember.LAG(3) 
: 
[Date].[Date - Calendar Month].CurrentMember 

Donc, ceci pourrait maintenant être utilisé contre une mesure spécifique, par ex. Revenu comme ceci:

SUM(
    [Date].[Date - Calendar Month].CurrentMember.LAG(3) 
    : 
    [Date].[Date - Calendar Month].CurrentMember 
,[Measures].[Revenue] 
)  

Dans un script ce serait ajouté à une clause WITH:

WITH  
MEMBER [Measures].[4MonthRevenue] AS 
    SUM(
     [Date].[Date - Calendar Month].CurrentMember.LAG(3) 
     : 
     [Date].[Date - Calendar Month].CurrentMember 
    ,[Measures].[Revenue] 
    ) 
SELECT 
    [Date].[Date - Calendar Month].[Calendar Month].MEMBERS 
     ON ROWS, 
    NON EMPTY 
     [Measures].[4MonthRevenue] 
     ON COLUMNS 
FROM [YourCube];