2016-06-14 4 views
1

Ich habe die folgende Hierarchie erstellt:CASE-Anweisung in MDX Verwendung von Daten aus unterschiedlicher Hierarchieebene

enter image description here

ich diese bestimmte Abfrage geschrieben habe mein Ergebnis:

WITH MEMBER [Ecotassa] AS 
CASE 
    WHEN [Tempo].[Anno].CurrentMember.MemberValue = '2011' THEN '9114646' 
    WHEN [Tempo].[Anno].CurrentMember.MemberValue = '2012' THEN '8787551.65' 
    WHEN [Tempo].[Anno].CurrentMember.MemberValue = '2013' THEN '8435651.26' 
    WHEN [Tempo].[Anno].CurrentMember.MemberValue = '2014' THEN '8917336.39' 
    WHEN [Tempo].[Anno].CurrentMember.MemberValue = '2015' THEN '9465533.37' 
    ELSE NULL 
END 

SELECT 
{ [Measures].[Dato], [Ecotassa] } ON COLUMNS, 
{ ([Tempo].[Periodo].[Mese Anno].MEMBERS) } ON ROWS 

FROM [AGRO] 
WHERE ([TipoMisura].[Tipo Misura].&[1], [TipoAnno].[Tipo Anno].&[2], 
[TipoPeriodo].[Tipo Periodo].&[2], 
[Mercato].[Mercato].&[1], 
[Aziende].[Descrizione Codice Azienda].&[100 - BASF]); 

Das Ergebnis dass ich bekomme ist:

enter image description here

Das ist nicht mein gewünschtes Ergebnis, für Ecotassa muss ich das Ergebnis für dieses spezielle Jahr erhalten. Aber ich bekomme null.

Keine Ahnung, dass ich mit der Abfrage falsch liege. Kann mir bitte jemand dabei helfen?

Antwort

1

Diese [Tempo].[Anno].CurrentMember ist gleich All in Ihrem Skript daher wählt NULL in der CASE Anweisung. Ich würde auch [Tempo].[Periodo] für Jahr zu nutzen versucht sein, und auch für Datum: statt [Tempo].[Anno]:

ich auch [Measures].[y] in die Auswahl geworfen haben, so können wir sehen, ob es in Ordnung funktioniert.

Also versuchen Sie dies:

WITH 
MEMBER [Measures].[y] AS 
    EXISTS(
    [Tempo].[Periodo].[Anno].members, 
    [Tempo].[Periodo].CurrentMember 
).ITEM(0).ITEM(0).Member_Caption 
MEMBER [Measures].[Ecotassa] AS 
    CASE 
    WHEN [Measures].[y] = '2011' THEN '9114646' 
    WHEN [Measures].[y] = '2012' THEN '8787551.65' 
    WHEN [Measures].[y] = '2013' THEN '8435651.26' 
    WHEN [Measures].[y] = '2014' THEN '8917336.39' 
    WHEN [Measures].[y] = '2015' THEN '9465533.37' 
    ELSE NULL 
    END 
SELECT 
{ 
    [Measures].[Dato] 
    ,[Measures].[Ecotassa] 
    ,[Measures].[y] 
} ON COLUMNS, 
[Tempo].[Periodo].[Mese Anno].MEMBERS ON ROWS 
FROM [AGRO] 
WHERE (
    [TipoMisura].[Tipo Misura].&[1] 
    ,[TipoAnno].[Tipo Anno].&[2] 
    ,[TipoPeriodo].[Tipo Periodo].&[2] 
    ,[Mercato].[Mercato].&[1] 
    ,[Aziende].[Descrizione Codice Azienda].&[100 - BASF] 
); 

Testskript

Was diese Rückkehr tut?

WITH 
MEMBER [Measures].[EcotassaTEST] AS 
    [Tempo].[Anno].CurrentMember.MemberValue 

SELECT 
{ [Measures].[Dato], [EcotassaTEST] } ON COLUMNS, 
{ ([Tempo].[Periodo].[Mese Anno].MEMBERS) } ON ROWS 

FROM [AGRO] 
WHERE ([TipoMisura].[Tipo Misura].&[1], [TipoAnno].[Tipo Anno].&[2], 
[TipoPeriodo].[Tipo Periodo].&[2], 
[Mercato].[Mercato].&[1], 
[Aziende].[Descrizione Codice Azienda].&[100 - BASF]); 
+0

danke es gibt mir das ergebnis nach meiner anforderung. Aber ich habe den Fluss nicht verstanden. Wie genau funktioniert es? Kannst du es mir bitte erklären? –

+0

@YousufSultan Hallo. Dies ist in der obigen Berechnung Y '[Tempo]. [Periodo] .CurrentMember' .... Tempo.periodo ist im aktuellen Kontext (dh die SELECT) -Klausel, während Sie' [Tempo]. [Anno] .CurrentMember 'Das war nicht im Zusammenhang. Dies ist der Hauptunterschied. Ich habe auch Ihre Benutzerhierarchie verwendet, anstatt Benutzer- und Attributhierarchien zu mischen ... Ich habe das Gefühl, dass "[Tempo]. [Anno]" eine Attributhierarchie trifft: Lassen Sie mich ein exploratives Skript hinzufügen, damit Sie sehen können. – whytheq

+0

Die Testabfrage, die Sie angegeben haben, gibt die entsprechenden Jahre für EcotassaTEST zurück –

Verwandte Themen