產生 (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) 的名稱。
分隔符號
以字串運算式表示的有效分隔符號。
備註
如果指定了第二個集合, Generate 函式會傳回一組由將第二個集合中的 Tuple 套用至第一個集合中的每個 Tuple 所產生的集合,然後聯集聯結結果集。 如果 指定 ALL ,函式會在產生的集合中保留重複專案。
如果指定字串運算式, Generate 函式會傳回一個字串,方法是針對第一個集合中的每個 Tuple 評估指定的字串運算式,然後串連結果。 您可以選擇性地分隔字串,以分隔產生的串連字號串中的每個結果。
範例
設定
在下列範例中,查詢會傳回包含量值網際網路銷售量的集合四次,因為集合 [Date] 中有四個成員。[行事歷年份]。[行事歷年份]。成員:
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]
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]
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]
注意
在偵錯計算時,這種產生的 函式形式 很有用,因為它可讓您傳回字串,顯示集合中所有成員的名稱。 這可能比 SetToStr (MDX) 函式所傳回集合 的嚴格 MDX 標記法更容易讀取。