Compartir a través de


Generate (MDX)

Aplica un conjunto a cada miembro de otro conjunto y a continuación combina los conjuntos resultantes mediante unión. Alternativamente, esta función devuelve una cadena concatenada que se creó evaluando una expresión de cadena en un conjunto.

Sintaxis

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

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

Argumentos

  • Set_Expression1
    Expresión MDX válida que devuelve un conjunto.

  • Set_Expression2
    Expresión MDX válida que devuelve un conjunto.

  • String_Expression
    Expresión de cadena válida que suele ser el nombre del miembro actual (CurrentMember.Name) de cada tupla del conjunto especificado.

  • Delimiter
    Delimitador válido expresado como expresión de cadena.

Comentarios

Si se especifica un segundo conjunto, la función Generate devuelve un conjunto generado al aplicar las tuplas del segundo conjunto a cada tupla del primer conjunto y, a continuación, combinar los conjuntos resultantes mediante unión Si se especifica ALL, la función retiene los duplicados en el conjunto resultante.

Si se especifica una expresión de cadena, la función Generate devuelve una cadena generada al evaluar la expresión de cadena especificada con cada tupla del primer conjunto y, a continuación, concatenar los resultados. De forma opcional, la cadena se puede delimitar al separar cada resultado de la cadena concatenada resultante.

Ejemplos

Conjunto

En el ejemplo siguiente, la consulta devuelve un conjunto que contiene cuatro veces la medida Internet Sales Amount, porque hay cuatro miembros en el conjunto [Date].[Calendar Year].[Calendar Year].MEMBERS:

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

Al quitar ALL, se modifica la consulta de modo que devuelva Internet Sales Amount una sola vez:

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

El uso práctico más común de Generate es evaluar una expresión de conjunto compleja, como TopCount, en un conjunto de miembros. La consulta de ejemplo siguiente muestra los 10 productos más vendidos de cada año natural (Calendar Year) en filas:

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 se muestran distintos productos para cada año y que el uso de Generate constituye la única forma de obtener este resultado. Basta con unir de forma cruzada los años naturales para que el conjunto de los 10 productos más vendidos muestre los 10 productos más vendidos de todo el tiempo, repetidos para cada año, tal y como se muestra en el ejemplo siguiente:

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

En el ejemplo siguiente se muestra el uso de Generate para devolver una cadena:

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

Esta forma de la función Generate puede resultar útil a la hora de depurar cálculos, puesto que permite devolver una cadena que muestra los nombres de todos los miembros de un conjunto. Puede resultar más fácil de leer que la representación MDX estricta de un conjunto devuelto por la función SetToStr (MDX).

Vea también

Referencia