Generate (MDX)

Применяет множество к каждому элементу другого множества, а затем объединяет полученные множества объединением. Альтернативно, эта функция возвращает конкатенированную строку, созданную вычислением строкового выражения над множеством.

Syntax

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

Arguments

Set_Expression1
Допустимое выражение многомерных выражений (MDX), которое возвращает множество.

Set_Expression2
Допустимое выражение многомерных выражений (MDX), которое возвращает множество.

String_Expression
Допустимое строковое выражение, которое обычно является именем текущего члена (CurrentMember.Name) каждого кортежа в указанном множестве.

Разделитель
Допустимый разделитель, выраженный в виде строкового выражения.

Remarks

Если задано второе множество, функция Generate возвращает множество, порождённое применением кортежей второго множества к каждому кортежу первого множества, а затем объединением полученных множеств объединением. Если задано ALL , функция сохраняет дубликаты в полученном наборе.

Если задано строковое выражение, функция Generate возвращает строку, сгенерированную путём оценки указанного выражения строки по каждому кортежу первого множества и затем конкатенации результатов. Опционально строку можно разделить, разделяя каждый результат в полученной конкатенированной строке.

Примеры

Установить

В следующем примере запрос четыре раза возвращает набор, содержащий сумму измерения интернет-продаж, поскольку в наборе [Дата] четыре участника. [Календарный год]. [Календарный год]. УЧАСТНИКИ:

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

Удаление ALL меняет запрос так, что сумма продаж в интернете возвращается только один раз:

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

Самое распространённое практическое применение Generate — вычисление выражения комплексного множества, такого как TopCount, над множеством элементов. Следующий пример запроса показывает топ-10 товаров для каждого календарного года в строках:

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]  

Обратите внимание, что для каждого года отображается разная топ-10, и использование Generate — единственный способ получить этот результат. Просто соединив календарные годы и набор топ-10 товаров, вы покажем топ-10 товаров за все времена, повторяемые для каждого года, как показано в следующем примере:

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

Следующий пример показывает использование Generate для возврата строки:

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]  

Замечание

Такая форма функции Generate может быть полезна при отладке вычислений, так как позволяет вернуть строку с именами всех членов множества. Это может быть проще для чтения, чем строгое MDX-представление множества, которое возвращает функция SetToStr (MDX ).