2016-05-04 18 views
1

Ich habe einen Cube mit einer Datumsdimensionshierarchie (Jahr, Semester, Quartal, Monat, Tag).MDX - Berechnete MTD-Kennzahl, die Nullwert zurückgibt

Im Datawarehouse sind 2 Messungen verfügbar.

[AUD DLY] : Daily numbers 
[AUD YTD] : Daily incremental YTD numbers 

Hierarchie ist als

Date - Dimension 
Financial - Hierarchy 

Year - [Date].[Financial].[Year] 
Semester - [Date].[Financial].[Semester] 
Quarter - [Date].[Financial].[Quarter] 
Month - [Date].[Financial].[Month] 
Day - [Date].[Financial].[Day] 

Measures [AUD DLY] 
Measures [AUD YTD] 

folgt ich ein MTD-Feld in den Maßnahmen hinzufügen müssen, dass, wenn das Geschäft für zB ein bestimmtes Datum auf ihre Slicer in Excel wählen, den 3. März 2016 MTD sollte als eine der beiden folgenden Arten berechnet werden:

1) [AUD MTD] should be calculated by subtracting [AUD YTD] on 
last day of previous month from the current selected date. 
So if we select 3 March 2016 then 

[AUD MTD] = [AUD YTD] on 3 March 2016 - [AUD YTD] on 29 Feb 2016 

OR 

2) [AUD MTD] should be calculated by adding the [AUD DLY] from first day 
of the current month until the selected date in that month. 
So if we select 3 March 2016 then 

[AUD MTD] = SUM ([AUD DLY] from 1 March 2016 to 3 March 2016) 

ich habe ein neues berechnetes Mitglied von Registerkarte Berechnungen im Cube-Designer in den BIDS 2010. die MDX-Abfrage ist unten. Wenn ich jedoch versuche, den Würfel zu durchsuchen, geben die [AUD MTD] -Werte nur Nullen zurück.

Kann jemand bitte helfen, was mache ich falsch?

CREATE MEMBER CURRENTCUBE.[Measures].[AUD MTD] 
AS Aggregate 
(
    PeriodsToDate 
     (
     [Date].[Financial].[Month] 
     ,[Date].[Financial].CurrentMember 
     ) 
     ,[Measures].[AUD DLY] 
), 
FORMAT_STRING = "Currency", 
NON_EMPTY_BEHAVIOR = { [AUD DLY] }, 
VISIBLE = 1 , DISPLAY_FOLDER = 'AUD Values' , ASSOCIATED_MEASURE_GROUP = 'Measures' ; 

Auch würde das Unternehmen die neue berechnete Kennzahl in Excel werden die Slicer, indem sie ein beliebiges Datum auswählen möchten und Lage sein, den MTD-Wert für diesen Monat anzuzeigen.

Kann auch jemand bitte mit MDX-Abfrage für beide Methoden (1) und (2) helfen?

Ihre Hilfe sehr geschätzt.

+0

Auch können Sie bitte den Code Sie verwenden für die Lieferung 'YTD' Maßnahme – whytheq

+0

Ihre Abfrage gibt alle Mitglieder zurück. [AUD YTD] Maßnahme existiert im Datawarehouse. Business lädt es hoch und ich zeige es einfach auf dem Cube. Nicht sicher, ob das hilft, aber ich bin immer noch nicht in der Lage, die Werte für das MTD-berechnete Mitglied zu bekommen. – Scorpio

Antwort

0

Ich denke, das Problem mit Ihrem zitierten Code (Methode 2) ist, dass [Datum]. [Financial] .CurrentMember muss auf einem Niveau unter oder unter dem [Datum]. [Finanziell]. [Monat] Ebene sein. Andernfalls gibt PeriodsToDate eine leere Menge zurück.

Das Problem liegt also nicht in der berechneten Elementdefinition, sondern irgendwo in der Abfrage, in der es verwendet wird. In dieser Abfrage kann [Datum]. [Finanz] .CurrentMember ein Mitglied auf einer höheren Ebene als Monate zurückgeben. Schwer zu sehen, ohne die Abfrage selbst zu sehen.

Methode (1) ist fiddly. Sie können mit

Ancestor([Date].[Financial].CurrentMember,[Date].[Financial].[Month]).PrevMember.LastChild 

den letzten Tag des Vormonats, aber Sie würden in einem gewissen Logik für Tage im ersten Monat des Geschäftsjahres zu bauen, die sonst den Wert für ein vorheriges Finnen Jahr subtrahieren würden aus dem diesjährigen YTD-Wert. Also ich würde Methode (2) empfehlen.

Soweit ich weiß ein Datum (ich meine ein Datum, nicht ein Monat) in der Excel-Slicer wird dieses Datum zu machen .CurrentMember. Ich bin etwas zögerlich, weil Excel manchmal ziemlich bizarre MDX erzeugt.

EDIT: Ein anderes mögliches Problem ist eine Hierarchieabweichung. Sie können einen perfekten Tag in einer Datumshierarchie auswählen, aber wenn er nicht genau in der Hierarchie liegt, die Sie in der berechneten Elementdefinition angeben, können Sie seltsame Ergebnisse erzielen. IMHO neuere Versionen von SSAS ermutigen eine Vermehrung von Attributhierarchien und mehrere "echte" Hierarchien, was dies zu einem echten Problem macht.

0

Als Test können Sie bitte diese sehr einfache Maßnahme, um sicherzustellen, hinzufügen, dass Currentmember wie erwartet verhält:

CREATE MEMBER CURRENTCUBE.[Measures].[AUD MTD] 
AS [Date].[Financial].CurrentMember.member_caption 

Wenn, wenn Sie das vor allem es gibt verwenden ist das All Mitglied dann wissen Sie, was ist falsch.

Sie müssen Ihre Beziehungen und Datentypen, die in Ihren Datumshierarchien verwendet werden, doppelt überprüfen, da dies häufig der Grund für Zeitberechnungsprobleme ist.


Dies ist eine Alternative zu Ihrer Maßnahme aber ich vermute, wenn das ursprüngliche Skript dann nicht funktioniert, noch wird dies ...

CREATE MEMBER CURRENTCUBE.[Measures].[AUD MTD] 
AS SUM 
    (
     MTD([Date].[Financial].CurrentMember) 
    , [Measures].[AUD DLY] 
    )