Condividi tramite


Generate (MDX)

Applica un set a ogni membro di un altro set e unisce i set risultanti tramite un join di unione. In alternativa, restituisce una stringa concatenata tramite la valutazione di 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.

  • Delimiter
    Delimitatore valido espresso come espressione stringa.

Osservazioni

Se si specifica un secondo set, la funzione Generate restituisce un set generato applicando le tuple specificate nel secondo set a ogni tupla specificata nel primo set, quindi unendo in join i set risultanti. Se si specifica ALL, i duplicati inclusi nel set risultante vengono mantenuti.

Se si specifica un'espressione stringa, la funzione Generate restituisce una stringa generata valutando l'espressione stringa specificata su ogni tupla nel primo set, 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'utilizzo pratico più comune di Generate è 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]

Notare che per ogni anno è visualizzato un elenco dei primi 10 prodotti diverso e che l'utilizzo di Generate costituisce 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'utilizzo 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]

Questo form 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. Potrebbe essere più facile da leggere rispetto alla rigida rappresentazione MDX di un set che la funzione SetToStr (MDX) restituisce.