将一个集合应用到另一个集合的每个成员上,然后通过并集连接结果集合。 或者,该函数返回通过对集合的字符串表达式求值生成的串接字符串。
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
如果指定了第二个集合, 生成 函数返回一个集合,该集合是将第二个集合中的元组应用到第一个集合的每个元组上,然后通过并集将结果的集合连接而成。 如果指定了 ALL ,函数在结果集合中保留重复的部分。
如果指定了一个字符串表达式, 生成 函数返回一个字符串表达式,该字符串表达式对第一个集合中的每个元组进行计算,然后将结果串接生成。 字符串可以选择被限定,将每个结果分隔成串接字符串。
示例
设置
在以下示例中,查询返回包含“衡量互联网销售金额”的集合四次,因为集合[日期]中有四个成员。[日历年]。[日历年]。成员:
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]
生成最常见的实际用途是对一组成员进行复杂集合表达式(如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]
请注意,每年显示的前十名都不同,只有使用 生成 才能获得此结果。 简单地将日历年与前十名产品组合交叉连接,即可显示所有时间内的前十名产品,每年重复,如下示例所示:
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
以下示例展示了如何使用 生成 返回字符串:
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]
注释
这种 生成 函数形式在调试计算时非常有用,因为它允许你返回一个字符串,显示集合中所有成员的名称。 这可能比 SetToStr(MDX) 函数返回的严格MDX表示更易读。