Generate (MDX)

将一个集应用于另一个集中的每个成员,然后对得到的集求并集。另外,此函数返回通过用字符串表达式对集求值而创建的串联字符串。

语法

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

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

参数

  • Set_Expression1
    返回集的有效多维表达式 (MDX)。

  • Set_Expression2
    返回集的有效多维表达式 (MDX)。

  • String_Expression
    通常为指定集中每个元组当前成员名称 (CurrentMember.Name) 的有效字符串表达式。

  • Delimiter
    以字符串表达式表示的有效分隔符。

注释

如果指定了第二个集,则 Generate 函数将第二个集中的元组应用于第一个集中的每个元组,再对所得到的集求并集,然后返回生成的集。如果指定了 ALL,则函数在所得到的集中保留重复项。

如果指定了字符串表达式,则 Generate 函数对第一个集中的每个元组求指定字符串表达式的值,再串联得到的结果,然后返回生成的值。根据需要,可以分隔字符串,从而分隔得到的串联字符串中的每个结果。

示例

在以下示例中,由于 [Date].[Calendar Year].[Calendar Year].MEMBERS 集中有四个成员,因此,查询四次返回包含 Measure Internet Sales Amount 的集:

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 种产品:

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]

字符串

以下示例说明如何使用 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 (MDX) 函数返回的集的严格 MDX 表示形式相比,此形式可能更易于读取。

请参阅

参考