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 表示法,這可能會比較容易讀取。