生成 (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) です。
区切り記号
文字列式として表された有効な区切り記号です。
解説
2 番目のセットが指定されている場合、 Generate 関数は、2 番目のセットのタプルを最初のセットの各タプルに適用し、結果のセットを共用体で結合することによって生成されたセットを返します。 ALL を指定した場合、関数は結果のセット内で重複を保持します。
文字列式を指定した場合、 Generate 関数は、最初のセット内の各タプルに対して指定された文字列式を評価し、結果を連結することによって生成された文字列を返します。 必要に応じて、文字列を区切り、結果の連結された文字列の各結果を区切ることができます。
例
オン
次の例では、クエリは、Measure Internet Sales の金額を含むセットを 4 回返します。これは、set [Date] に 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 などの複雑なセット式を評価することです。 次のクエリ例では、各カレンダー年の上位 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]
注意
この形式の Generate 関数は、セット内のすべてのメンバーの名前を表示する文字列を返すことができるため、計算をデバッグするときに役立ちます。 これは、 SetToStr (MDX) 関数が返すセットの厳密な MDX 表現よりも読みやすい場合があります。