Generate (MDX)
Wendet eine Menge auf jedes Element einer anderen Menge an und verknüpft dann 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.
Trennzeichen
Ein gültiges Trennzeichen, ausgedrückt als Zeichenfolgenausdruck.
Bemerkungen
Wenn eine zweite Menge angegeben wird, gibt die Generate-Funktion eine Menge zurück, die generiert wird, indem die Tupel im zweiten Satz auf jedes Tupel im ersten Satz angewendet und dann die resultierenden Mengen durch Union miteinander verknüpfen. Wenn ALL angegeben ist, behält die Funktion Duplikate im resultierenden Satz bei.
Wenn ein Zeichenfolgenausdruck angegeben wird, gibt die Generate-Funktion eine Zeichenfolge zurück, die generiert wird, indem der angegebene Zeichenfolgenausdruck mit jedem Tupel im ersten Satz ausgewertet und dann die Ergebnisse verkettet wird. Optional kann die Zeichenfolge begrenzt werden, sodass die einzelnen Ergebnisse in der verketteten Ergebniszeichenfolge voneinander getrennt sind.
Beispiele
Set
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]
Die gängigste praktische Verwendung von Generate besteht darin, einen komplexen Satzausdruck wie TopCount über eine Reihe von Membern auszuwerten. 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]
Beachten Sie, dass für jedes Jahr eine andere Top 10 angezeigt wird und dass die Verwendung von Generieren die einzige Möglichkeit ist, dieses Ergebnis zu erhalten. Ein einfacher Crossjoin der Kalenderjahre und der Menge der obersten 10 Produkte 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 zeigt die Verwendung von Generate , 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]
Hinweis
Diese Form der Generate-Funktion kann beim Debuggen von Berechnungen nützlich sein, da sie es Ihnen ermöglicht, eine Zeichenfolge zurückzugeben, die die Namen aller Member in einer Gruppe anzeigt. Dies ist möglicherweise einfacher zu lesen als die strikte MDX-Darstellung eines Satzes, den die SetToStr-Funktion (MDX) zurückgibt.