2016-04-18 14 views
1

Ich versuche, eine Bucketing-Gruppierung mit MDX zu erstellen. Ich habe eine Maßnahme namens QtyOpen und eine Zeitdimension.So erstellen Sie eine Gruppierungsdimension mit mdx

Ich möchte eine Dimension mit dieser Logik haben:

Bucket 1 zeigt alle OpenQty bis yesterdays Datum

Bucket 2 für alle OpenQty zeigt für den heutigen

3 Bucket Datum für das Zeigen alle OpenQty für morgen Datum

Wenn also alle OpenQty bis gestern 15 ist, alle OpenQty für heute ist 7 und alle OpenQty für morgen ist 12, sollte es wie folgt angezeigt:

Bucket 1 | Todays date | Tomorrows date 
    15   7    12 

So habe ich es geschafft, die Syntax für den Datumsbereich, den ich will. Die Abfrage für das sieht etwa so aus:

select (
      {StrToMember("[Time].[Time YQMD].[Year].&[" + format(now(), "yyyy") + "].&[Q" + format(datepart("q", now())) + "].&[" + format(now(), "MMM") + "].&[" + format(now(), "dd") + "]") 
      : 
      StrToMember("[Time].[Time YQMD].[Year].&[" + format(now(), "yyyy") + "].&[Q" + format(datepart("q", now())) + "].&[" + format(now(), "MMM") + "].&[" + format(now(), "dd") + "].lead(3)")} 
      ) on columns, 
non empty ([PPV].[Country].[Country], [Measures].Receipt Quantity]) on rows 
from [Model] 

Was hier fehlt, ist „Bucket 1“, die die OpenQty für alle Tage vor heute sammelt.

Ich wäre ein großer Bonus, um diese Dimension über alle Arten von Maßnahmen zu verwenden.

Danke.

Schätzen Sie jede Hilfe.

Vielen Dank.

+0

sollte einfach genug sein, aber können Sie bitte etwas 'mdx' hinzufügen, die Sie bereits versucht haben, so dass wir hast du eine Vorstellung von den Dimensionen in deinem Würfel? – whytheq

+1

Hallo. Vielen Dank. Ich habe die Nachricht mit einigen MDX bearbeitet, die ich bereits funktionierte. – RunW

Antwort

0

Sie können dies in einer WITH Klausel:

WITH 
    SET [Today] AS 
    STRTOSET(
     "{[Time].[Time YQMD].[Year].&[" + format(now(), "yyyy") + "]" + 
     ".&[Q" + format(datepart("q", now())) + "]" & 
      ".&[" + format(now(), "MMM") + "].&[" + format(now(), "dd") + "]}" 
    ) 
    MEMBER [Time].[Time YQMD].[All].[Today] AS 
    [Today].item(0).item(0) 
    SET [Pre-Today] AS 
    {null:[Today].lag(1)} 
    MEMBER [Time].[Time YQMD].[All].[Pre-Today] AS 
    AGGREGATE([Pre-Today]) 
    MEMBER [Time].[Time YQMD].[All].[Tomorrow] AS 
    [Today].item(0).lead(1) 
    SET [BUCKETS] AS 
    { 
    [Time].[Time YQMD].[All].[Pre-Today] 
    ,[Time].[Time YQMD].[All].[Today] 
    ,[Time].[Time YQMD].[All].[Tomorrow] 
    } 
SELECT 
    [BUCKETS] ON 0, 
NON EMPTY 
    ([PPV].[Country].[Country], [Measures].Receipt Quantity]) ON 1 
FROM [Model]; 
1

Was Sie brauchen, heißt Dynamische Zeitberechnungen. Einfach einzurichten, aber nicht sehr einfach. Siehe diesen Link es wird Ihnen helfen aus: Dynamic Time Calculations