Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применяет множество к каждому элементу другого множества, а затем объединяет полученные множества объединением. Альтернативно, эта функция возвращает конкатенированную строку, созданную вычислением строкового выражения над множеством.
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 ).