Generate (MDX)
Aplica um conjunto a cada membro de outro conjunto e junta os conjuntos resultantes por união. Opcionalmente, essa função retorna uma cadeia de caracteres concatenada criada avaliando-se uma expressão de cadeia de caracteres em um conjunto.
Sintaxe
Set expression syntax
Generate( Set_Expression1 , ( Set_Expression2 [ , ALL ] ) )
String expression syntax
Generate( Set_Expression1 , ( String_Expression [ ,Delimiter ] ) )
Argumentos
Set_Expression1
Uma expressão MDX (Multidimensional Expressions) válida que retorna um conjunto.Set_Expression2
Uma expressão MDX válida que retorna um conjunto.String_Expression
Uma expressão de cadeia de caracteres válida que, normalmente, é o nome do membro atual (CurrentMember.Name) de cada tupla no conjunto especificado.Delimiter
Um delimitador válido expresso como uma expressão de cadeia de caracteres.
Comentários
Se o segundo conjunto for especificado, a função Generate retornará um conjunto gerado aplicando-se as tuplas do segundo conjunto em cada tupla do primeiro conjunto, e associando os conjuntos resultantes por união. Se ALL for especificado, a função preservará as duplicações no conjunto resultante.
Se uma expressão de cadeia de caracteres for especificada, a função Generate retornará uma cadeia de caracteres gerada avaliando-se a expressão de cadeia de caracteres especificada com relação a cada tupla do primeiro conjunto, e concatenando os resultados. Opcionalmente, a cadeia de caracteres pode ser delimitada, separando-se cada resultado na cadeia de caracteres concatenada resultante.
Exemplos
Conjunto
No exemplo a seguir, a consulta retorna um conjunto que contém a quantidade de vendas pela Internet quatro vezes, pois existem quatro membros no conjunto [Data].[Ano Civil].[Ano Civil].MEMBERS:
SELECT
GENERATE( [Date].[Calendar Year].[Calendar Year].MEMBERS
, {[Measures].[Internet Sales Amount]}, ALL)
ON 0
FROM [Adventure Works]
A remoção de ALL altera a consulta, de modo que a Quantidade de Vendas pela Internet é retornada somente 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 de Generate é avaliar uma expressão de conjunto complexa, como TopCount, com relação a um conjunto de membros. A consulta de exemplo a seguir exibe os 10 Produtos principais 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]
Observe que uma lista diferente dos 10 produtos principais é exibida para cada ano e que o uso de Generate é o único meio para obter esse resultado. Simplesmente unir os Anos Civis e o conjunto dos 10 Produtos principais exibirá os 10 Produtos principais para todo o período, repetido em cada ano, como mostra o exemplo a seguir:
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]
Cadeia de caracteres
O exemplo a seguir mostra o uso de Generate para retornar uma cadeia de caracteres:
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]
Observação |
---|
Essa forma da função Generate pode ser útil ao depurar cálculos, pois permite retornar uma cadeia de caracteres que exibe os nomes de todos os membros de um conjunto. Isto poderia ser mais fácil para ler do que a representação MDX rígida de um conjunto retornado pela função SetToStr (MDX). |