Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применяет множество к каждому элементу другого множества, а затем объединяет полученные множества объединением. Альтернативно, эта функция возвращает конкатенированную строку, созданную вычислением строкового выражения над множеством.
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 ).