Generate (MDX)

Wendet eine Menge auf jedes Element einer anderen Menge an und verknüpft die entstehenden Mengen durch den Vereinigungsoperator. Alternativ gibt die Funktion eine verkettete Zeichenfolge zurück, die durch Auswerten eines Zeichenfolgenausdrucks über einer Menge erstellt wurde.

Syntax

Set expression syntax
Generate( Set_Expression1 ,  Set_Expression2 [ , ALL ]  )

String expression syntax
Generate( Set_Expression1 ,  String_Expression [ ,Delimiter ]  )

Argumente

  • Set_Expression1
    Ein gültiger MDX-Ausdruck (Multidimensional Expressions), der eine Menge zurückgibt.

  • Set_Expression2
    Ein gültiger MDX-Ausdruck (Multidimensional Expressions), der eine Menge zurückgibt.

  • String_Expression
    Ein gültiger Zeichenfolgenausdruck, bei dem es sich in der Regel um den Namen des aktuellen Elements (CurrentMember.Name) jedes Tupels in der angegebenen Menge handelt.

  • Delimiter
    Ein gültiges Trennzeichen, ausgedrückt als Zeichenfolgenausdruck.

Hinweise

Wenn eine zweite Menge angegeben wird, gibt die Generate-Funktion eine Menge zurück, die generiert wird, indem die Tupel in der zweiten Menge auf jedes Tupel in der ersten Menge angewendet werden und dann die entstehenden Mengen durch Vereinigungsmengenbildung verknüpft werden. Wenn ALL angegeben wird, werden doppelte Werte in der sich ergebenden Menge beibehalten.

Wenn ein Zeichenfolgenausdruck angegeben wird, gibt die Generate-Funktion eine Zeichenfolge zurück, die generiert wird, indem der angegebene Zeichenfolgenausdruck für jedes Tupel in der ersten Menge ausgewertet wird und dann die Ergebnisse verkettet werden. Optional kann die Zeichenfolge begrenzt werden, sodass die einzelnen Ergebnisse in der verketteten Ergebniszeichenfolge voneinander getrennt sind.

Beispiele:

Menge

Im folgenden Beispiel gibt die Abfrage eine Menge zurück, die Measure Internet Sales Amount vier Mal enthält, da in der Menge [Date].[Calendar Year].[Calendar Year].ELEMENTE vier Elemente zu finden sind:

SELECT 
GENERATE( [Date].[Calendar Year].[Calendar Year].MEMBERS
, {[Measures].[Internet Sales Amount]}, ALL)
ON 0
FROM [Adventure Works]

Lässt man ALL weg, gibt die Abfrage Internet Sales Amount nur ein Mal zurück:

SELECT 
GENERATE( [Date].[Calendar Year].[Calendar Year].MEMBERS
, {[Measures].[Internet Sales Amount]})
ON 0
FROM [Adventure Works]

Am häufigsten wird Generate verwendet, um einen komplexen Mengenausdruck wie TopCount auf eine Elementmenge anzuwenden. Die folgende Beispielabfrage zeigt die obersten 10 Produkte für jedes Kalenderjahr in Zeilen an:

SELECT 
{[Measures].[Internet Sales Amount]}
ON 0,
GENERATE( 
[Date].[Calendar Year].[Calendar Year].MEMBERS
, TOPCOUNT(
[Date].[Calendar Year].CURRENTMEMBER
[Product].[Product].[Product].MEMBERS
,10, [Measures].[Internet Sales Amount]))
ON 1
FROM [Adventure Works]

Hierbei ist zu beachten, dass die obersten 10 jedes Jahr andere sein können und die Verwendung von Generate die einzige Möglichkeit ist, dieses Ergebnis zu erhalten. Eine simple Verknüpfung der Kalenderjahre und der Menge der obersten 10 Produkte über Crossjoin würde mit jährlicher Wiederholung die 10 obersten Produkte der ewigen Bestenliste anzeigen, wie das folgende Beispiel zeigt:

SELECT 
{[Measures].[Internet Sales Amount]}
ON 0,
[Date].[Calendar Year].[Calendar Year].MEMBERS
TOPCOUNT(
[Product].[Product].[Product].MEMBERS
,10, [Measures].[Internet Sales Amount])
ON 1
FROM [Adventure Works]

String

Das folgende Beispiel veranschaulicht, wie Generate verwendet wird, um eine Zeichenfolge zurückzugeben:

WITH 
MEMBER MEASURES.GENERATESTRINGDEMO AS
GENERATE( 
[Date].[Calendar Year].[Calendar Year].MEMBERS,
[Date].[Calendar Year].CURRENTMEMBER.NAME)
MEMBER MEASURES.GENERATEDELIMITEDSTRINGDEMO AS
GENERATE( 
[Date].[Calendar Year].[Calendar Year].MEMBERS,
[Date].[Calendar Year].CURRENTMEMBER.NAME, " AND ")
SELECT 
{MEASURES.GENERATESTRINGDEMO, MEASURES.GENERATEDELIMITEDSTRINGDEMO}
ON 0
FROM [Adventure Works]
HinweisHinweis

Diese Form der Generate-Funktion kann beim Debuggen von Berechnungen hilfreich sein, da sie eine Zeichenfolge mit den Namen aller Mengenelemente zurückgeben kann. Diese ist leichter lesbar als die strikte MDX-Darstellung einer Menge, wie sie die SetToStr (MDX)-Funktion zurückgibt.

Siehe auch

Verweis