生成(MDX)

将一个集合应用到另一个集合的每个成员上,然后通过并集连接结果集合。 或者,该函数返回通过对集合的字符串表达式求值生成的串接字符串。

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表示更易读。