簡単なMDXケースおよび説明(3)
4292 ワード
例四:もう一つのフォーク積の使い方
例五:第三の叉積用法
例4と例5はいずれもフォーク積の使用方法であり,例3と同様の結果を得ることができる.SSASでは2つの軸以上のクエリーを直接表示することはできませんが、フォーク積を使用して3つの軸以上のクエリーを2つの軸に「平面化」することができます.これにより理論的にはSSASで複数の軸のデータを直接見ることができる.ここで私が「理論的に」と言うのは、フォーク積という演算の複雑さがかなり高いため、複数次元のメタセットをフォーク積すると待ち時間が長くて結果が得られない可能性があり、コンピュータは大量の演算でプログラムを中断することもあるからです.だから実際にはこのような使い方をできるだけコントロールしなければなりません.使用する場合は、まずデータを非常に限られた範囲内に制御し、フォーク積を減らすことによる演算の消込を低減することが望ましい.
b)FROM句
FROM句はMDXクエリのソース多次元データセットを表し、FROM句には1つの多次元データセットしか含まれません.つまり、同じMDXクエリは同じ多次元データセットからのみ発生し、SQLクエリのように複数のデータテーブルを接続することはできません.また、MDXのFROM句は、別のMDXクエリから得られるサブ多次元データセットであってもよく、これにより、より複雑なMDXクエリが可能になる.以下の例6に示すように、
例6:サブキューブを含む複雑なクエリー
c)WHERE句
WHERE句のもう一つの名称はスライス軸であり、その名の通り多次元データセットに対してスライスとスライス操作を行い、データセットのサイズを制限する役割を果たす.次の2つの例を見てみましょう.
例7:多次元データセットスライス操作
図10:スライスした結果
例7では,前述のフォーク積例に基づいてスライス操作を行い,Store ManagerがByrdの範囲内にデータを制限した.例7のクエリの結果データセットは、論理的に3つの軸、すなわち製品ディレクトリ、店舗名、地域番号を含む.スライス後、製品カタログと店舗名の2つの軸が保持され、もう1つの領域はスライス操作でByrdに対応する領域しか残っていないためである.クエリーの結果を図10に示します.
例8:多次元データセットのブロック操作
図11:ブロックを切断した結果
例8は前フォーク積に基づいてブロック操作を行い,それぞれ時間次元,店舗次元,製品次元に制限を行った.【図11】このMDXクエリの結果を示す図である.
d)WITH句
WITH句は、一時的なネーミング計算メンバーおよびネーミングセットを作成するために使用されます.WITH句によって作成されたネーミング計算メンバーとネーミングセットは、WITH句に隣接するMDXクエリに限られ、MDXクエリが終了すると、WITH句によって作成されたネーミング計算またはネーミングセットも無効になります.セッション全体で有効なネーミング計算とネーミングセットを作成する場合は、CREATE MEMBERとCREATE SET文を使用します.
次の例では、テンポラリ・ネーミング計算とテンポラリ・ネーミング・セットの使用方法とクエリーの結果を示します.
例9:一時ネーミング計算と一時ネーミングセットの使用
図12:計算と名前付きセットの一時的な名前付きクエリー結果
WITH MEMBER文最後のFORMAT_STRINGはデータ結果をフォーマットするために用いられ,例9では,得られた平均値結果を2桁の小数を保持するようにフォーマットし,千分位分離を行った.他にも、PERCENT、CURRENCYなどが一般的です.
SELECT
{
CROSSJOIN(
[Product].[Product Category - Product Class].[ ],
[Store].[Store Name].[Store Name]
)
} ON COLUMNS,
{
[Store].[Sales Country - Sales Region - Sales District Id - Region].[ ]
} ON ROWS
FROM [Foodmart ]
WHERE [Time By Day].[month_of_year].&[3]
例五:第三の叉積用法
SELECT
{
[Product].[Product Category - Product Class].[ ]
}*
{
[Store].[Store Name].[Store Name]
}
ON COLUMNS,
{
[Store].[Sales Country - Sales Region - Sales District Id - Region].[ ]
} ON ROWS
FROM [Foodmart ]
WHERE [Time By Day].[month_of_year].&[3]
例4と例5はいずれもフォーク積の使用方法であり,例3と同様の結果を得ることができる.SSASでは2つの軸以上のクエリーを直接表示することはできませんが、フォーク積を使用して3つの軸以上のクエリーを2つの軸に「平面化」することができます.これにより理論的にはSSASで複数の軸のデータを直接見ることができる.ここで私が「理論的に」と言うのは、フォーク積という演算の複雑さがかなり高いため、複数次元のメタセットをフォーク積すると待ち時間が長くて結果が得られない可能性があり、コンピュータは大量の演算でプログラムを中断することもあるからです.だから実際にはこのような使い方をできるだけコントロールしなければなりません.使用する場合は、まずデータを非常に限られた範囲内に制御し、フォーク積を減らすことによる演算の消込を低減することが望ましい.
b)FROM句
FROM句はMDXクエリのソース多次元データセットを表し、FROM句には1つの多次元データセットしか含まれません.つまり、同じMDXクエリは同じ多次元データセットからのみ発生し、SQLクエリのように複数のデータテーブルを接続することはできません.また、MDXのFROM句は、別のMDXクエリから得られるサブ多次元データセットであってもよく、これにより、より複雑なMDXクエリが可能になる.以下の例6に示すように、
例6:サブキューブを含む複雑なクエリー
SELECT
{
[Product].[Product Category - Product Class].[ ]
}*
{
[Store].[Store Name].[Store Name]
}
ON COLUMNS,
{
[Store].[Sales Country - Sales Region - Sales District Id - Region].[ ]
} ON ROWS
FROM
(
SELECT
(
{
[Time By Day].[quarter].&[Q1]
}
) ON COLUMNS
FROM [Foodmart ]
)
c)WHERE句
WHERE句のもう一つの名称はスライス軸であり、その名の通り多次元データセットに対してスライスとスライス操作を行い、データセットのサイズを制限する役割を果たす.次の2つの例を見てみましょう.
例7:多次元データセットスライス操作
SELECT
{
[Product].[Product Category - Product Class].[ ]
}*
{
[Store].[Store Name].[Store Name]
}
ON COLUMNS,
{
[Store].[Sales Country - Sales Region - Sales District Id - Region].[ ]
} ON ROWS
FROM [Foodmart ]
WHERE ([Store].[Store Manager].&[Byrd])
図10:スライスした結果
例7では,前述のフォーク積例に基づいてスライス操作を行い,Store ManagerがByrdの範囲内にデータを制限した.例7のクエリの結果データセットは、論理的に3つの軸、すなわち製品ディレクトリ、店舗名、地域番号を含む.スライス後、製品カタログと店舗名の2つの軸が保持され、もう1つの領域はスライス操作でByrdに対応する領域しか残っていないためである.クエリーの結果を図10に示します.
例8:多次元データセットのブロック操作
SELECT
NON EMPTY {
[Product].[Product Category - Product Class].[ ]
}*
{
[Store].[Store Name].[Store Name]
}
ON COLUMNS,
NON EMPTY {
[Store].[Sales Country - Sales Region - Sales District Id - Region].[ ]
} ON ROWS
FROM [Foodmart ]
WHERE
(
[Time By Day].[quarter].&[Q1]:[Time By Day].[quarter].[Q2],
[Store].[Store].&[18]:[Store].[Store].&[20],
[Product].[Product Category].&[Canned Clams]:[Product].[Product Category].&[Canned Sardines]
)
図11:ブロックを切断した結果
例8は前フォーク積に基づいてブロック操作を行い,それぞれ時間次元,店舗次元,製品次元に制限を行った.【図11】このMDXクエリの結果を示す図である.
d)WITH句
WITH句は、一時的なネーミング計算メンバーおよびネーミングセットを作成するために使用されます.WITH句によって作成されたネーミング計算メンバーとネーミングセットは、WITH句に隣接するMDXクエリに限られ、MDXクエリが終了すると、WITH句によって作成されたネーミング計算またはネーミングセットも無効になります.セッション全体で有効なネーミング計算とネーミングセットを作成する場合は、CREATE MEMBERとCREATE SET文を使用します.
次の例では、テンポラリ・ネーミング計算とテンポラリ・ネーミング・セットの使用方法とクエリーの結果を示します.
例9:一時ネーミング計算と一時ネーミングセットの使用
WITH MEMBER [Measures].[Avg Of Units Shipped]
AS ’AVG
(
{
[Product].[Product].[Product]
},
[Measures].[Units Shipped]
)’
,FORMAT_STRING=’###,###,###,##0.00’
SET [CROSSSET_StoreName]
AS ’{
[Store].[Store Name].[Store Name].[Store 1]
}’
SET [CROSSSET_TIME]
AS ’{
[Time By Day].[month_of_year].[month_of_year]
}’
SELECT NON EMPTY
{
[Measures].[Avg Of Units Shipped]
}
ON COLUMNS,
NON EMPTY [CROSSSET_StoreName]*[CROSSSET_TIME]
ON ROWS
FROM [Foodmart ]
図12:計算と名前付きセットの一時的な名前付きクエリー結果
WITH MEMBER文最後のFORMAT_STRINGはデータ結果をフォーマットするために用いられ,例9では,得られた平均値結果を2桁の小数を保持するようにフォーマットし,千分位分離を行った.他にも、PERCENT、CURRENCYなどが一般的です.