2016-05-17 10 views
1

Ich bin ein erfahrener SQL-Entwickler, der versucht MDX in meiner Freizeit zu lernen. Ich verstehe, wie man einen Würfel einsetzt und eine zweidimensionale Abfrage schreibt. Ich versuche jetzt, eine dreidimensionale Abfrage zu schreiben. Ich habe einen Würfel mit mehreren Dimensionen eingesetzt, wie unten gezeigt (und inspiriert von diesem Tutorial: https://www.youtube.com/watch?v=ctUiHZHr-5M):3+ dimensionale MDX-Anweisung

enter image description here

Ich versuche eine MDX zu schaffen, die in drei Dimensionen einer abgeleiteten Tabelle verwendet. In einer vorherigen Frage hier: MDX - 3rd + dimension example needed whytheq liefert Beispiele, aber sie Fehler.

Ich kann kein einziges Tutorial online finden, das darüber spricht, wie mehr als zwei Dimensionen zu verwenden sind, z. Seiten; Abschnitte usw. Jedes einzelne Tutorial, das ich gelesen habe, und jedes einzelne Beispiel in dem Buch, das ich gekauft habe, verwendet einfache zweidimensionale Beispiele. Daher die Frage zu versuchen und loszulegen.

Zum Beispiel habe ich dies versucht:

SELECT 
    [full name] ON 0, 
    measures.amount ON 1 
FROM(
    SELECT 
    customer.[full name].members on 0, 
    salesman.[id].members on 1, 
    [Measures].[Amount] on 2 
    FROM [Analysis Services Test] 
); 

Der Fehler ist: "Query (3, 10) Parser. Die Syntax für 'id' ist falsch"

Aktualisieren @mxix gibt an, dass Excel-Pivot-Tabellen nur zwei Dimensionen anzeigen können. Ist dies nicht ein Beispiel für eine dreidimensionale Pivot-Tabelle (sie hat Dimensionen für: Verkäufer, Kunde und Auto)?

enter image description here

+1

Könnten Sie die Abfragen hinzufügen, die Sie versucht haben, und die Fehler? – mxix

+0

Die Antwort ist so einfach, ich denke, es muss einen Aspekt zu Ihrer Frage geben, den Sie uns nicht deutlich genug gesagt haben. Bitte zeigen Sie uns, was Sie versucht haben und welchen Fehler Sie bekommen haben. Welchen Fehler haben Sie erhalten, als Sie das Beispiel von WhyTheQ ausprobiert haben? –

+0

@Tab Alleman, ich habe die Frage aktualisiert. Ich bin sehr neu dazu. Ich versuche nur eine multidimensionale MDX-Abfrage zu sehen, die kompiliert wird. – w0051977

Antwort

1

Ich glaube nicht, dies Ihre Frage beantwortet, aber ich hoffe, es hilft. Für die angegebenen Abmessungen, die Sie geliefert haben. Zunächst möchte ich darauf hinweisen, dass die meisten Client-Anwendungen nur 2 Achsen anzeigen können, und deshalb konzentrieren sich die meisten Beispiele auf 2 Achsen. SSMS- und Excel-Pivot-Tabellen sind einige Beispiele für Clients, die nur 2 Achsen anzeigen können. Spalten und Zeilen.

Sie können mehr Axis abfragen, aber SSMS kann Sie nicht anzeigen, da es nur tabellarische Darstellungen von Daten geben kann.

Dies ist eine gültige MDX-Abfrage: (aber Sie sollten einen Fehler auf SSMS, wenn Sie es versuchen)

SELECT 
    [Car].[Id].MEMBERS ON COLUMNS, 
    [Time].[Date].MEMBERS ON ROWS, 
    [Salesman].[Id].MEMBERS ON PAGES 
FROM [Analysis Services Test] 
WHERE 
    [Measures].[Amount] 

Aber man kann Crossjoin (*) Dimension in einachsige Ihre Daten zu erhalten aus diese Dimensionen in einer gültigen 2-Achsen-Darstellung.

SELECT 
    NON EMPTY 
    [Car].[Id].MEMBERS ON COLUMNS 
    NON EMPTY 
    [Time].[Date].MEMBERS * 
    [Salesman].[Id].MEMBERS ON ROWS 
FROM [Analysis Services Test] 
WHERE 
    [Measures].[Amount 

EDIT:

Eine Pivot-Tabelle nur 2 Achsen hat, Sie haben in der Tat 3 Dimensionen dargestellt auf 2 Achsen, Spalten und Zeilen. Sie sollten das Konzept von Axis und Dimensionen nicht mischen. Sie sind nicht gleich.

Es gibt eine coole Erweiterung für Excel, wo Sie die MDX-Abfrage hinter den Kulissen sehen können. https://olappivottableextend.codeplex.com/

Sie werden bemerken, dass alle erzeugten Abfragen auf 0 (COLUMNS) und 1 (ROWS) Axis sind.

+0

Ich habe meine Frage mit Ihrem Kommentar aktualisiert. Könnten Sie einen Blick darauf werfen? – w0051977

+0

Die von Ihnen hinzugefügte Pivot-Tabelle ist dem zweiten Skript von mxix sehr ähnlich - mit der Auto-Dimension als einem anderen Crossjoin in Reihen.Also verwendet es 2 Hauptdimensionen (Zeilen/Spalten) und den Slicer (die WHERE-Klausel, die manchmal konzeptionell als dritte Dimension betrachtet wird) – whytheq

+0

@mxix - wir brauchen eine weitere Stimme (deine Stimme?), Um ein mdx-Tag zu erstellen die neue Dokumentationsseite: http://StackOverflow.com/Documentation/MDX/Commit – whytheq

3

Die Abfrage, die Sie geschrieben haben, hat die folgenden Fehler:

select [full name] from (
select customers.[full name].members on rows, 
salesman.id.members on columns, 
measures.amount on pages 
from [Analysis Services Test] 
) as test; 
  1. Eine Alias ​​am Ende as test
  2. Sie haben keine Achse in diesem Abschnitt genannte select [full name] from (
  3. Du bist mit customers während in dem Screenshot kann ich nur sehen Customer
  4. In dem Screenshot kann ich nicht sehen [full name] s o werde ich ändern [Customer].[id]

es so versuchen:

SELECT 
    [Customer].[Id].[Id].members ON 0, 
    [measures].[amount] ON 1 
FROM(
    SELECT 
    [Customer].[Id].[Id].members on 0, 
    [Salesman].[Id].[Id].members on 1, 
    [Measures].[Amount] on 2 
    FROM [Analysis Services Test] 
); 

Die oben (einmal funktioniert!) nicht wirklich viel, so versuchen Sie in der subselect spezifisch:

SELECT 
    [Customer].[Id].members ON 0, 
    [measures].[amount] ON 1 
FROM(
    SELECT 
    [Customer].[Id].[Id].[whytheq] on 0, 
    [Salesman].[Id].[Id].[Ian] on 1, 
    [Measures].[Amount] on 2 
    FROM [Analysis Services Test] 
); 

note

Aber warum Sorgen über Seiten und Abschnitte? Es gibt nicht viel Dokumentation über sie, weil sie nicht benutzt werden.

Selbst mit nur zwei Dimensionen kann es ziemlich schnell ziemlich kompliziert werden. Es gibt viele Beispiele gibt, nehmen Sie dieses Skript von Chris Webb:

WITH 
MEMBER MEASURES.[Returning Customers] AS 
COUNT(
NONEMPTY(
NONEMPTY(
[Customer].[Customer].[Customer].MEMBERS 
, [Measures].[Internet Sales Amount]) 
, {[Measures].[Internet Sales Amount]} 
* {NULL : [Date].[Calendar].CURRENTMEMBER.PREVMEMBER} 
) 
) 
MEMBER MEASURES.[New Customers] AS 
[Measures].[Customer Count] – MEASURES.[Returning Customers] 
SELECT 
{[Measures].[Customer Count] 
, MEASURES.[Returning Customers] 
, MEASURES.[New Customers]} ON 0, 
[Date].[Calendar].[Calendar Year].MEMBERS ON 1 
FROM [Adventure Works]; 

https://blog.crossjoin.co.uk/?s=mdx+new+and+returning

+0

Danke für die Veröffentlichung. Der erste Fehler, den ich bekam, war: "'[Kunden]' wurde nicht im Würfel gefunden, wenn die Zeichenfolge", also habe ich das korrigiert, dann: '[Kunden]' wurde nicht im Cube gefunden, wenn die Zeichenfolge ", korrigierte ich das, dann "'[Sales Amount]' wurde nicht im Cube gefunden, wenn die Zeichenfolge", also habe ich das korrigiert. Jetzt heißt es: "" Abfrage (6, 5) Die Funktion MEMBERS erwartet einen Hierarchieausdruck für das Argument member expression wurde verwendet – w0051977

+0

Ich habe die Namen geändert, die Sie verwendet haben – whytheq

+0

Danke Ich habe Ihre zweite Abfrage versucht Die Antwort war: "Die Dimension '[Kunden]' wurde nicht im Cube gefunden, wenn die Zeichenfolge [Kunden]. [vollständiger Name], wurde analysiert. "Ich habe das korrigiert. Nun lautet der Fehler:" sehr (6, 5) Die Funktion MEMBERS erwartet einen Hierarchieausdruck für das Argument. Ein Mitgliedsausdruck wurde verwendet. " – w0051977

Verwandte Themen