Generate (MDX)

Wendet eine Menge auf jedes Element einer anderen Menge an und fügt dann die resultierenden Mengen durch Vereinigung hinzu. Alternativ gibt diese Funktion eine konkatenierte Zeichenkette zurück, die durch die Auswertung eines Zeichenzeichenausdrucks über einer Menge erstellt wird.

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 Multidimensional Expressions (MDX)-Ausdruck, der eine Menge zurückgibt.

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

String_Expression
Ein gültiger String-Ausdruck, der typischerweise der Name des aktuellen Elements (CurrentMember.Name) jedes Tupels in der angegebenen Menge ist.

Trennzeichen
Ein gültiger Trenner, ausgedrückt als Zeichenkettenausdruck.

Bemerkungen

Wenn eine zweite Menge angegeben ist, gibt die Generate-Funktion eine erzeugte Menge zurück, die erzeugt wird, indem die Tupel der zweiten Menge auf jedes Tupel der ersten Menge angewendet und dann die resultierenden Mengen durch Vereinigung verbunden werden. Wenn ALL spezifiziert ist, behält die Funktion Duplikate in der resultierenden Menge.

Wenn ein Zeichenkettenausdruck angegeben ist, gibt die Generate-Funktion einen erzeugten Zeichenstring zurück, indem der angegebene Zeichenausdruck gegen jedes Tupel der ersten Menge ausgewertet und anschließend die Ergebnisse verkettet wird. Optional kann die Zeichenkette abgegrenzt werden, wobei jedes Ergebnis in der resultierenden verketteten Zeichenkette getrennt wird.

Beispiele

Festlegen

Im folgenden Beispiel liefert die Abfrage viermal eine Menge zurück, die den Measure Internet Sales Betrag enthält, da es vier Mitglieder in der Menge [Datum] gibt. [Kalenderjahr]. [Kalenderjahr]. MITGLIEDER:

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

Das Entfernen von ALL ändert die Abfrage, sodass der Internetumsatzbetrag nur einmal zurückgegeben wird:

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

Die gebräuchlichste praktische Anwendung von Generate ist die Auswertung eines komplexen Mengenausdrucks, wie TopCount, über eine Menge von Mitgliedern. Die folgende Beispielanfrage zeigt die Top 10 Produkte für jedes Kalenderjahr auf Zeilen:

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 werden und dass die Verwendung von Generate die einzige Möglichkeit ist, dieses Ergebnis zu erzielen. Das einfache Kreuzverknüpfen von Kalenderjahren und der Liste der Top 10 Produkte zeigt die Top 10 Produkte aller Zeiten, wiederholt für jedes Jahr, wie im folgenden Beispiel gezeigt:

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 zur Rückgabe einer Zeichenkette :

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]  

Note

Diese Form der Funktion Generate kann beim Debuggen von Berechnungen nützlich sein, da sie es ermöglicht, eine Zeichenkette zurückzugeben, die die Namen aller Mitglieder in einer Menge anzeigt. Dies könnte leichter lesbar sein als die strikte MDX-Darstellung einer Menge, die die SetToStr (MDX) -Funktion zurückgibt.