2016-03-24 6 views
1

Ich möchte Verkaufsdaten mit einem Durchschnitt von 12 Monaten erhalten. Ich schrieb dieses MDX-Abfrage:Wie Abfrage 12-Monats-Durchschnitt von SSAS Multidimensional Cube (MDX) mit Datumsbereich?

WITH MEMBER [Measures].[12m average] AS 
Avg 
(
[Date].[Month].CurrentMember.Lag(11) : 
[Date].[Month].CurrentMember, 
[Measures].[Sales Quantity] 
) 
SELECT 
{ [Measures].[Sales Quantity], [Measures].[12m average] } ON COLUMNS, 
NON EMPTY { CROSSJOIN([Product].[Product Name].Allmembers, [Date].[Month].AllMembers) } ON ROWS 
FROM [Sales] 
where { [Date].[Date].&[2016-01-01T00:00:00] : [Date].[Date].&[2016-02-28T00:00:00] } 

Abfrage gibt korrekte Verkaufsmenge Aggregation, aber 12m Durchschnitt ist falsch. Der Durchschnitt kann die letzten 12-Monats-Daten aufgrund des Datumsbereichs nicht abrufen.

Zum Beispiel für 2016-01 Monat 12m Durchschnitt müssen wir 2015-01 - 2016-01 Daten bekommen, aber Datum Wut von 2016-01-01T00: 00: 00.

Wie löst man dieses Problem?

Antwort

1

Wie Tab sagt kann der Bereich in der WHERE bewegen:

WITH 
SET [TargetMths] AS 
    EXISTS(
    [Date].[Month].AllMembers 
    ,[Date].[Date].&[2016-01-01T00:00:00] : [Date].[Date].&[2016-02-28T00:00:00] 
    ) 
MEMBER [Measures].[12m average] AS 
    Avg(
    [Date].[Month].CurrentMember.Lag(11):[Date].[Month].CurrentMember, 
    [Measures].[Sales Quantity] 
) 
SELECT 
    { 
    [Measures].[Sales Quantity] 
    ,[Measures].[12m average] 
    } ON 0, 
NON EMPTY 
    [Product].[Product Name].Allmembers 
    * [TargetMths] ON 1 
FROM [Sales]; 
0

Nehmen Sie den Datumsbereich aus der WHERE-Klausel heraus, und machen Sie Ihre [Verkaufsmenge] zu einer berechneten Kennzahl, die diesen Datumsbereich verwendet.