共用方式為


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
    有效的字串運算式,這通常是指定集合中每個 Tuple 的目前成員名稱 (CurrentMember.Name)。

  • Delimiter
    以字串運算式表示的有效分隔符號。

備註

如果指定第二個集合,Generate 函數會將第二個集合的 Tuple 套用到第一個集合中的每個 Tuple,然後利用聯集來聯結結果集,傳回產生的集合。,如果指定 ALL,函數就會保留結果集中的重複項。

如果指定字串運算式,Generate 函數會對第一個集合中的每個 Tuple 評估指定的字串運算式,然後串連結果,傳回產生的字串。,另外,也可以選擇字串分隔符號,在產生的串連字串中分隔每個結果。

範例

集合

在以下範例中,查詢會傳回包含 Measure Internet Sales 數量四次的集合,因為 [Date].[Calendar Year].[Calendar Year].MEMBERS 集合中有四個成員:

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。下列範例查詢會針對資料列上的每一個 Calendar Year 顯示前 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 是取得這個結果的唯一方式。只是交叉聯結 Calendar Years 以及前 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 表示法,這可能會比較容易讀取。

請參閱

參考