Bestimmen des ersten oder letzten Members mit Daten

Zusammenfassung

In einigen Anwendungen ist es hilfreich, das erste oder letzte Dimensionselement zu finden, dem Daten zugeordnet sind. In diesem Artikel wird veranschaulicht, wie Sie mithilfe der HEAD() , TAIL() -und- UNION() Funktionen das erste und letzte Member einer Dimension mit Daten zurückgeben. Der Artikel veranschaulicht auch die Verwendung der- NonEmptyCrossJoin() Funktion.

Original Version des Produkts:   SQL Server
Ursprüngliche KB-Nummer:   301934

Weitere Informationen

Es wird davon ausgegangen, dass die Aufgabe darin besteht, das erste und letzte Member der Time-Dimension mit Daten aus dem FoodMart 2000-Beispiel zu suchen. Für viele besteht der erste Gedanke für die Suche nach dem ersten Element mit Daten darin, die FirstChild() Funktion wie folgt zu verwenden:

SELECT {[Time].FirstChild} ON COLUMNS
FROM SALES

Ebenso wäre der erste Gedanke für die Suche nach dem letzten Member der Time-Dimension mit Daten die Verwendung der LastChild() Funktion wie folgt:

SELECT {[Time].[1998].[Q4].LastChild} ON COLUMNS
FROM SALES

Die erste MDX-Abfrage (Multidimensional Expression) gibt jedoch den Wert zurück, der [1997] zugeordnet ist. [Q1] und nicht den Wert, der [1997] zugeordnet ist, bei dem es sich um das erste Element mit Daten handelt. Die zweite MDX-Abfrage gibt den Wert zurück, der [1997] zugeordnet ist. [Q4]. [12], bei dem es sich um das letzte Element der Dimension handelt, jedoch nicht um das letzte Element mit Daten.

Alternativ HEAD() gibt die Funktion die erste angegebene Anzahl von Elementen in einer Gruppe zurück und kann verwendet werden, um das erste Element der Dimension zurückzugeben. Entsprechend gibt die TAIL() Funktion eine Teilmenge vom Ende einer Gruppe zurück und kann verwendet werden, um das letzte Element der Dimension zurückzugeben. Die MDX-Abfrage, um das erste Element der Time-Dimension zurückzugeben, würde das folgende Format annehmen:

SELECT HEAD([Time].Members,1) ON COLUMNS
FROM SALES

Diese Abfrage gibt 1997 als erstes Element der Dimension mit Daten zurück.

Die MDX-Abfrage zum Zurückgeben des letzten Elements der Dimension würde das folgende Format annehmen:

SELECT TAIL([Time].Members,1) ON COLUMNS
FROM SALES

Diese MDX-Abfrage gibt [1998] zurück. [Q4]. [12] als letztes Element der Dimension. Das zurückgegebene Element ist jedoch nicht das letzte Element der Dimension mit Daten. Um Elemente ohne Daten zu entfernen, sollte die- NonEmptyCrossJoin() Funktion verwendet werden, um alle Elemente in der Dimension zu filtern, denen keine Daten zugeordnet sind.

Die MDX-Abfrage zum Suchen nach dem ersten Element mit Daten übernimmt dann das Formular

SELECT HEAD(NonEmptyCrossJoin([Time].Members,1),1) ON COLUMNS
FROM SALES

und die MDX-Abfrage, um das letzte Element mit Daten zu suchen, hat dann das folgende Format:

SELECT TAIL(NonEmptyCrossJoin([Time].Members,1),1) ON COLUMNS
FROM SALES

Die- UNION() Funktion kann dann verwendet werden, um die beiden MDX-Abfragen in einer einzigen Abfrage zu kombinieren:

SELECT
UNION(HEAD(NonEmptyCrossJoin([Time].Members,1),1), TAIL(NonEmptyCrossJoin([Time].Members,1),1)) ON COLUMNS
FROM SALES