2017-06-26 2 views
0

Wir versuchen, einige MDX-Abfragen zu entwickeln, die es dem Benutzer ermöglichen, die berechnete Profitnummer basierend auf einem Transaktionstyp zu generieren. Hier ist ein Beispiel:MDX-Mitglied wird nicht gefiltert

WITH MEMBER [Measures].[Profit] AS 
'((Sum({[Transaction Type].[All Transaction Types].[SALE]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[MOTO]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[FORCECAPTURE]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[FORCE]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[RECURRINGSALE2]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[SPECIALFORCE]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[VOICEAUTH]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[VALIDATION]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[REPEATCHECK]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[CONVERSION]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[GENERICCHECK]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[CASHIN]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[CHECKMANUALDEPOSIT]}, [Measures].[Amount]) - 
Sum({[Transaction Type].[All Transaction Types].[RECURRINGCREDIT]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[ACH]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[GUARANTEEANDCHECK2]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[RECURRINGACH]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[GUARANTEE]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[SUPERVISORAPPROVAL]}, [Measures].[Amount])) - 
Sum({[Transaction Type].[All Transaction Types].[RELOAD]}, [Measures].[Amount]) - 
Sum({[Transaction Type].[All Transaction Types].[CASHOUT]}, [Measures].[Amount]) - 
Sum({[Transaction Type].[All Transaction Types].[CREDIT]}, [Measures].[Amount]))' 
SELECT {{[Measures].[Profit],[Measures].[Transaction Number]}} ON COLUMNS, NON EMPTY {(DESCENDANTS([Location].[All Locations].&[1],1))} ON ROWS FROM (SELECT (-{[Voided].[Voided].[Voided].&[true]}, 
{[Transaction Response].[TransactionResponses].&[APPROVED]},{[Transaction Type].[All Transaction Types].[SALE],[Transaction Type].[All Transaction Types].[CREDIT]}) ON COLUMNS FROM [DashBoardCube]) 
WHERE ([Time].[YEAR].&[2012]) 

Die Probleme kommt, wenn wir versuchen, diese Abfrage mit dem Transaktionstyp zu filtern, wie Sie oben in der Probe zu sehen. Der Profit-Wert ist immer der gleiche, ich nehme an, dass das wegen der Definition des Mitglieds ist.

Es gibt eine Möglichkeit, dies zu archivieren, basierend auf einem berechneten Element, wie wir es definiert haben?

Mit besten Grüßen,

+0

Frage ist immer noch nicht klar, Ihre oben genannten MDX sollte die Summe der Transaktionsarten [Verkauf] und [KREDIT] zurückgeben, richtig? – Jigar

+0

Korrekt, aber stattdessen gibt es immer die Summe aller Transaktionen zurück. – rfders

Antwort

0

Wie Sie beachten, die Definition des Elements [Measures]. [Profit] ist über Reiten die Filterung von [Transaktionsart] im Teilcube. Die "Adressen" der Tupel, die sich zu dem [Profit] berechneten Member addieren (zB (MOTO, Amount) in Kurzschrift), werden für den gesamten Cube aufgelöst, nicht gegen den Teilcube (wo in Ihrem Beispiel kein MOTO-Member existiert)).

Das ist seltsam, aber es ist die Art und Weise, MDX funktioniert (zumindest in SSAS, weiß ich nicht über andere Plattformen).

Es ergibt sich ein Widerspruch zwischen der Formel von TTypes, die "Profit" (X + Z + Y-A-B) und die Teilmenge von ihnen, die Sie im Teilcube angeben.

Ich weiß es nicht genau, weil ich Ihre Anforderungen nicht sehen kann: Aber ist das nicht ein echter Widerspruch, anstatt nur etwas seltsam, dass MDX tut? Laut Ihrem Subcube versuchen Sie, SALE-CREDIT zu sehen. Ist das nicht wirklich eine neue Figur, und nicht eine spezielle Art von "Profit"? Kann es wirklich "Profit" heißen, wenn es das (-CASHOUT) -Element ignoriert? Wenn das Ignorieren von (-CASHOUT) in diesem Kontext geeignet ist, können Sie garantieren, dass es immer über den Cubespace hinweg stattfindet, d. H. Dass diese Berechnung immer Sinn ergibt?

Eine Lösung könnte einfach explizit angeben (SALE-CREDIT) als die Maßnahme, die Sie hier wollen, ohne in [Measures] gefangen zu werden. [Profit].

Eine andere Möglichkeit könnte darin bestehen, jedem Blattelement der Dimension [Transaktionsart] ein Attribut (Kredit oder Soll) zu geben, das angibt, auf welcher Seite der Gewinnberechnung es weitergehen soll. Ein berechnetes Element, so etwas wie dieses (Pseudo-Code)

Iif([Transaction Types].IsCreditOrDebit.CurrentMember IS [Transaction Types].IsCreditOrDebit.[Credit],Measures.Amount,-Measures.Amount) 

könnte dann über die gesamte [Transaktionsart] Dimension aggregiert werden, und würde durch Transaktionsart schneidbar sein.

Verwandte Themen