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) 的有效字符串表达式。
分隔符
以字符串表达式表示的有效分隔符。
备注
如果指定了第二个集, 则 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 个,并且使用 “生成 ”是获得此结果的唯一方法。 将日历年和前 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 函数在调试计算时非常有用,因为它使你能够返回一个字符串,显示一个集中所有成员的名称。 这可能比 SetToStr (MDX) 函数返回的集的严格 MDX 表示形式更容易阅读。