Generate (MDX)

Aplica um conjunto a cada membro de outro conjunto, e depois une os conjuntos resultantes por união. Alternativamente, esta função devolve uma cadeia concatenada criada pela avaliação de uma expressão de cadeia sobre um conjunto.

Syntax

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

Arguments

Set_Expression1
Uma expressão válida de Expressões Multidimensionais (MDX) que devolve um conjunto.

Set_Expression2
Uma expressão válida de Expressões Multidimensionais (MDX) que devolve um conjunto.

String_Expression
Uma expressão de cadeia válida que é tipicamente o nome do membro atual (CurrentMember.Name) de cada tupla no conjunto especificado.

Delimitador
Um delimitador válido expresso como uma expressão de cadeia.

Observações

Se for especificado um segundo conjunto, a função Gerar devolve um conjunto gerado aplicando as tuplas do segundo conjunto a cada tupla do primeiro conjunto, e depois unindo os conjuntos resultantes por união. Se ALL for especificado, a função mantém duplicados no conjunto resultante.

Se uma expressão de cadeia for especificada, a função Gere devolve uma cadeia gerada ao avaliar a expressão de cadeia especificada contra cada tupla do primeiro conjunto, e depois concatenar os resultados. Opcionalmente, a cadeia pode ser delimitada, separando cada resultado na cadeia concatenada resultante.

Examples

Definir

No exemplo seguinte, a consulta devolve um conjunto contendo o montante Medir Vendas na Internet quatro vezes, porque existem quatro membros no conjunto [Data]. [Ano Civil]. [Ano Civil]. MEMBROS:

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

Remover o ALL altera a consulta para que o Valor das Vendas na Internet seja devolvido apenas uma vez:

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

O uso prático mais comum do Generate é avaliar uma expressão de conjunto complexa, como o TopCount, sobre um conjunto de membros. A seguinte consulta de exemplo mostra os 10 principais produtos para cada Ano Civil em Linhas:

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]  

Note que um top 10 diferente é apresentado para cada ano, e que a utilização do Generate é a única forma de obter esse resultado. Basta a junção cruzada dos Anos Civis e o conjunto dos 10 melhores Produtos para exibir os 10 melhores Produtos de sempre, repetidos em cada ano, como mostrado no seguinte exemplo:

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]  

Cordão

O exemplo seguinte mostra o uso de Generate para devolver uma cadeia:

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

Esta forma da função Generate pode ser útil ao depurar cálculos, pois permite devolver uma string que mostra os nomes de todos os membros de um conjunto. Isto pode ser mais fácil de ler do que a representação estrita em MDX de um conjunto que a função SetToStr (MDX) devolve.