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 表示形式相比,此形式可能更易于读取。