Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применяет набор к каждому элементу другого набора и соединяет результирующие наборы. В качестве альтернативы эта функция также возвращает сцепленную строку, созданную путем вычисления строкового выражения по набору.
Синтаксис
Set expression syntax
Generate( Set_Expression1 , Set_Expression2 [ , ALL ] )
String expression syntax
Generate( Set_Expression1 , String_Expression [ ,Delimiter ] )
Аргументы
Set_Expression1
Допустимое многомерное выражение, возвращающее набор.
Set_Expression2
Допустимое многомерное выражение, возвращающее набор.
String_Expression
Допустимое строковое выражение, обычно обозначающее имя текущего элемента (CurrentMember.Name) каждого кортежа в указанном наборе.
Разделитель
Допустимый разделитель в виде строкового выражения.
Замечания
Если указан второй набор, функция Generate возвращает набор, созданный путем применения кортежей во втором наборе к каждому кортежу в первом наборе, а затем присоединение результирующих наборов по союзу. Если задано значение ALL , функция сохраняет дубликаты в результирующем наборе.
Если задано строковое выражение, функция Generate возвращает строку, созданную путем вычисления указанного строкового выражения для каждого кортежа в первом наборе, а затем объединения результатов. При необходимости строка может содержать разделители, отделяющие результаты в объединенной строке друг от друга.
Примеры
Set
В следующем примере запрос возвращает набор, содержащий меру Measure Internet Sales четыре раза, так как набор [Date].[Calendar Year].[Calendar Year].MEMBERS состоит из четырех элементов:
SELECT
GENERATE( [Date].[Calendar Year].[Calendar Year].MEMBERS
, {[Measures].[Internet Sales Amount]}, ALL)
ON 0
FROM [Adventure Works]
После удаления атрибута ALL из запроса мера Internet Sales Amount возвращается только один раз:
SELECT
GENERATE( [Date].[Calendar Year].[Calendar Year].MEMBERS
, {[Measures].[Internet Sales Amount]})
ON 0
FROM [Adventure Works]
Наиболее распространенное практическое использование Generate заключается в оценке сложного выражения набора, например TopCount, по набору элементов. Запрос в следующем примере показывает 10 лучших продуктов для каждого значения Calendar Year по строкам:
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 является единственным способом получить этот результат. Простое перекрестное соединение таблицы Calendar Year и набора 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]
Строка
В следующем примере показано использование 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 может быть полезна при отладке вычислений, так как она позволяет возвращать строку, отображающую имена всех элементов в наборе. Это может быть проще считывать, чем строгое представление многомерных выражений набора, возвращаемого функцией SetToStr (многомерные выражения).
См. также
Справочник по функции многомерных выражений (многомерные выражения)