Generate (MDX)
Applica un set a ogni membro di un altro set e unisce i set risultanti tramite un join di unione. In alternativa, questa funzione restituisce una stringa concatenata creata valutando un'espressione stringa su un set.
Sintassi
Set expression syntax
Generate( Set_Expression1 , Set_Expression2 [ , ALL ] )
String expression syntax
Generate( Set_Expression1 , String_Expression [ ,Delimiter ] )
Argomenti
Set_Expression1
Espressione MDX (Multidimensional Expression) valida che restituisce un set.
Set_Expression2
Espressione MDX (Multidimensional Expression) valida che restituisce un set.
String_Expression
Espressione stringa valida che corrisponde in genere al nome del membro corrente (CurrentMember.Name) di ogni tupla nel set specificato.
Delimitatore
Delimitatore valido espresso come espressione stringa.
Osservazioni:
Se viene specificato un secondo set, la funzione Generate restituisce un set generato applicando le tuple nel secondo set a ogni tupla del primo set e quindi unendo i set risultanti in base all'unione. Se si specifica ALL , la funzione mantiene i duplicati nel set risultante.
Se viene specificata un'espressione stringa, la funzione Generate restituisce una stringa generata valutando l'espressione stringa specificata su ogni tupla nel primo set e quindi concatenando i risultati. Facoltativamente, è possibile delimitare la stringa separando i vari risultati nella stringa concatenata risultante.
Esempi
Set
Nell'esempio seguente, la query restituisce un set che contiene la misura Internet Sales amount quattro volte, perché quattro sono i membri nel set [Date].[Calendar Year].[Calendar Year].MEMBERS:
SELECT
GENERATE( [Date].[Calendar Year].[Calendar Year].MEMBERS
, {[Measures].[Internet Sales Amount]}, ALL)
ON 0
FROM [Adventure Works]
La rimozione di ALL modifica la query in modo che Internet Sales Amount sia restituito una sola volta:
SELECT
GENERATE( [Date].[Calendar Year].[Calendar Year].MEMBERS
, {[Measures].[Internet Sales Amount]})
ON 0
FROM [Adventure Works]
L'uso pratico più comune di Generate consiste nel valutare un'espressione set complessa, ad esempio TopCount, su un set di membri. Nell'esempio di query seguente vengono visualizzati i primi 10 prodotti per ogni anno di calendario su righe:
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]
Si noti che per ogni anno viene visualizzato un diverso top 10 e che l'uso di Generate è l'unico modo per ottenere questo risultato. Applicando un semplice crossjoin ai calendari e al set dei 10 prodotti migliori sarà possibile visualizzare i 10 migliori prodotti ogni volta, ripetuti per ogni anno, come illustrato nell'esempio seguente:
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]
Stringa
Nell'esempio seguente viene illustrato l'uso di Generate per restituire una stringa:
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]
Nota
Questa forma della funzione Generate può essere utile durante il debug dei calcoli, in quanto consente di restituire una stringa che visualizza i nomi di tutti i membri in un set. Questa operazione potrebbe essere più semplice da leggere rispetto alla rappresentazione MDX rigida di un set restituito dalla funzione SetToStr (MDX).