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) です。

  • Delimiter
    文字列式として表された有効な区切り記号です。

説明

2 番目のセットが指定されている場合、Generate 関数は、2 番目のセット内の組を 1 番目のセット内の各組に適用し、その結果セットを和集合で結合することによって生成されるセットを返します。ALL が指定されている場合は、結果セット内に重複部分を保持します。

文字列式が指定されている場合、Generate 関数は、指定された文字列式を 1 番目のセット内の各組に対して評価し、その結果を連結することによって生成される文字列を返します。必要に応じて、結果の連結文字列内の各文字列を区切ることもできます。

セット

次の例では、[Date].[Calendar Year].[Calendar Year].MEMBERS というセットには 4 つのメンバがあるため、クエリは Internet Sales Amount メジャーを含むセットを 4 回返します。

SELECT 
GENERATE( [Date].[Calendar Year].[Calendar Year].MEMBERS
, {[Measures].[Internet Sales Amount]}, ALL)
ON 0
FROM [Adventure Works]

ALL を削除すると、クエリが変更され、Internet Sales Amount が 1 回だけ返されるようになります。

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 Year と上位 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 表記よりも読みやすい場合があります。