2016-04-01 9 views
0

Ich erstelle ein Dataset für die Verwendung in einem SSRS-Liniendiagrammbericht, der gegen einen Analysis Services-Cube mit MDX verstößt. Wir verwenden SQL Server 2008 R2 und BIDS in Visual Studio 2008. Als seltener Benutzer von MDX habe ich Probleme damit, die benötigten Daten zu ziehen.Erstellen einer MDX-Abfrage für den SSRS-Diagrammbericht

Das Ziel: ein SSRS Liniendiagramm erstellen mit 4 Zeilen: 1. Aktuelles Jahr Stewardship Nummern (zB 2016) 2. Letzten Jahr Stewardship Zahlen (2015) 3. Zwei Jahre nach Stewardship Zahlen (2014)
4. Aktuelles Jahr Prognose Geschätzte Zahlen (2016)

Das Problem: Ich habe eine Abfrage erstellt, die die richtigen Daten erhält, aber nicht in einer einzigen Zeile zum Erstellen des Diagramms. Hier ist meine Frage:

with 
member [Measures].[ ImpValueCurrQtr] as 
IIF([Measures].[DIVIDE NUMBER]=0, null, [Measures].[SUMOF IMP VALUE]/[Measures].[DIVIDE NUMBER]) 

member 
Measures.TrendPastYear as ([Measures].[ImpValueCurrQtr], 
ParallelPeriod([DimDate].[BCast Qtr Week Number].[BCast Qtr], 4, [DimDate].[BCast Qtr Week Number].CurrentMember)) 

member 
Measures.TrendPast2Years as ([Measures].[ImpValueCurrQtr], 
ParallelPeriod([DimDate].[BCast Qtr Week Number].[BCast Qtr], 8, [DimDate].[BCast Qtr Week Number].CurrentMember)) 

SELECT 
NON EMPTY { 
[Measures].[ImpValueCurrQtr], 
[Measures].[TrendPastYear], 
[Measures].[TrendPast2Years] 
} ON COLUMNS, 
NON EMPTY { (
[DimNetwork].[Network].[Network].ALLMEMBERS * 
[DimDate].[BCast Qtr Week Number].[BCast Qtr Week Number].ALLMEMBERS * 
[DimDemograph].[Demo Name].[Demo Name].ALLMEMBERS * 
[DimDelImpDataType].[Data Type Name].[Data Type Name].ALLMEMBERS * 
[DimDelImpsSource].[DEL IMPS SOURCE ID].[DEL IMPS SOURCE ID].ALLMEMBERS * 
[DimDelImpsSource].[Del Imps Source].[Del Imps Source].ALLMEMBERS * 
[DimExecDaypartConformed].[Network Daypart].[Daypart Name].ALLMEMBERS 
) } 
ON ROWS 
FROM (SELECT ({ 
[DimExecDaypartConformed].[Network Daypart].[Daypart Name].&[YYY]&[TPC] }) ON COLUMNS 
FROM (SELECT ({[DimDelImpsSource].[ SOURCE ID].&[1],[DimDelImpsSource].[ SOURCE ID].&[10]}) ON COLUMNS 
FROM (SELECT ([DimDemograph].[Demo Name].&[A25-54]) ON COLUMNS 
FROM (SELECT ([DimDelImpDataType].[Data Type Name].&[C3]) ON COLUMNS 
FROM (SELECT ([DimDate].[BCast Qtr Week Number].[BCast Qtr].&[Q116]) ON COLUMNS 
FROM (SELECT ([DimNetwork].[Network].&[XXX]) ON COLUMNS 
FROM [TRACCube])))))); 

Das Netzwerk, BCAST Qtr, Datentyp Name und Demo-Name in den Unter wählt sind Parameter des Berichts, die für diese Darstellung fest einprogrammiert sind. Die SOURCE ID und die Daypart-Namen sind fest codierte konstante Werte.

Das Ergebnis hat die richtigen Daten aber in zwei Linien ...

Before Results

Was ich brauche ist zu tun, um die Zahlen für die Prognose stellen Schätzungen auf der gleichen Linie, so dass die Grafik alle 4 sehen Datenpunkte. So ...

After Results

Wenn ich einfach die Quelle-ID herausnehmen und Quelle nennt die Abfrage in allen acht Datenquellen im Würfel zieht und die Zahlen sind aus Art und Weise. Kann ich meine berechneten Mitglieder auf eine bestimmte Quell-ID beschränken, die einer Bereichsangabe im Cube ähnelt? Dann kann ich ein viertes Calculate Member für die Forecast Estimates erstellen.

Vielen Dank für Ihre Hilfe!

Antwort

0

Wenn ich das richtig verstanden, sollte es relativ einfach sein, nur die spezifischen Elemente in die Maßnahmen zu bewegen:

with 
member [Measures].[ ImpValueCurrQtr] as 
IIF(
[Measures].[DIVIDE NUMBER]=0 
, null 
, DIVIDE(
    //>>tuple start>> 
    (
     [Measures].[SUMOF IMP VALUE] 
     ,[DimDelImpsSource].[Del Imps Source].[Del Imps Source].[Stewardship] 
    ) 
    //>>tuple end>> 
    ,[Measures].[DIVIDE NUMBER] 
) 
) 

Sie können die oben in Ihrem anderen Maßnahmen verwenden, wenn Sie möchten nur eine bestimmte auf ein Maß begrenzen, Mitglied einer Hierarchie.

Eine Alternative, die die Tupel nur schönere ist, zu setzen ON COLUMNS: perfekt

WITH 
... 
... 
SELECT 
NON EMPTY { 
( [Measures].[ImpValueCurrQtr] 
    ,[DimDelImpsSource].[Del Imps Source].[Del Imps Source].[Stewardship]) 
,( [Measures].[TrendPastYear] 
    ,[DimDelImpsSource].[Del Imps Source].[Del Imps Source].[Stewardship]) 
,( [Measures].[TrendPast2Years] 
    ,[DimDelImpsSource].[Del Imps Source].[Del Imps Source].[Stewardship]) 
,( [Measures].[ImpValueCurrQtr] 
    ,[DimDelImpsSource].[Del Imps Source].[Del Imps Source].[Forecast]) 
} ON COLUMNS, 
NON EMPTY { (
[DimNetwork].[Network].[Network].ALLMEMBERS * 
[DimDate].[BCast Qtr Week Number].[BCast Qtr Week Number].ALLMEMBERS * 
[DimDemograph].[Demo Name].[Demo Name].ALLMEMBERS * 
[DimDelImpDataType].[Data Type Name].[Data Type Name].ALLMEMBERS * 
[DimExecDaypartConformed].[Network Daypart].[Daypart Name].ALLMEMBERS 
) } 
ON ROWS 

FROM 
... 
+0

Works! Vielen Dank. Ich entschuldige mich dafür, eine solche grundlegende Frage gestellt zu haben, aber ich benutze MDX einmal alle 6 Monate oder so. Danke noch einmal! – BradD

+0

Besonderer Hinweis: Whytheq's Antwort ist korrekt, aber nur eine Variante funktioniert in SSRS. Beide arbeiten in SSMS, aber SSRS mag den Verweis auf die Dimensionshierarchie in der SELECT-Anweisung nicht. Der Fehler, den SSRS gibt, lautet: "Die Abfrage kann nicht vorbereitet werden: Die Abfrage muss mindestens eine Achse enthalten. Die erste Achse der Abfrage darf nicht mehrere Hierarchien enthalten, noch sollte sie auf eine andere Dimension als die Dimension" Kennzahlen "verweisen." Sie müssen also die erste Variante verwenden, bei der der Bereich in der Member-Anweisung begrenzt ist. Danke nochmal, whytheq! – BradD

+0

@BradD ok - Ich benutze ssrs nicht so viel wie ich möchte, aber ich erinnere mich, dass es mdx Daten in einem bestimmten Format abgeflacht werden möchte - daher Ihr Fehler. – whytheq