SQL Server 2008 自習書シリーズ No.22
Analysis Services 応用
Published: 2009 年 9 月 24 日 有限会社エスキューエル・クオリテゖ
この文章に含まれる情報は、公表の日付の時点での Microsoft Corporation の考え方を表しています。市場の変化に応える必要があるた め、Microsoft は記載されている内容を約束しているわけではありません。この文書の内容は印刷後も正しいとは保障できません。この文章 は情報の提供のみを目的としています。
Microsoft、SQL Server、Visual Studio、Windows、Windows XP、Windows Server、Windows Vista は Microsoft Corporation の米国
およびその他の国における登録商標です。
その他、記載されている会社名および製品名は、各社の商標または登録商標です。
目次
S STTEEPP11. . 本本自自習習書書のの概概要要とと 自自習習書書をを試試すす環環境境ににつついいてて ... 4 1.1 本自習書の内容について ... 5 1.2 自習書を試す環境について ... 6 1.3 事前作業:サンプル スクリプトのセットゕップ ... 7 S STTEEPP22. . MMDDXX のの利利用 ...12 用 2.1 使用するキューブ ...13 2.2 MDX でキューブをクエリ...14 2.3 WITH を利用した名前付きセット ...23 2.4 WITH を利用した計算されるメンバ ...24 2.5 キューブへ計算されるメンバと名前付きセットの追加 ...28 S STTEEPP33. . 応応用用的的ななキキュューーブブのの設設定 ...38 定 3.1 属性メンバの並べ替えの設定 ...39 3.2 メジャーの集計関数 ...47 3.3 メジャーの FormatString プロパテゖ(書式設定) ...49 3.4 DisplayFolder プロパテゖでフォルダ分け ...50 3.5 ドリルスルー ゕクションの設定 ...52 3.6 属性メンバの自動グループ化(DiscretizationMethod) ...55 S STTEEPP44. . 性性能能編 ...57 編 4.1 集計とは ...58 4.2 集計のパフォーマンス到達率と Data Explosion(データ爆発) ...61 4.3 集計デザナでの結果確認、カスタマズ ...64 4.4 属性リレーションシップ ...67 S STTEEPP55. . 管管理理編 ...71 編 5.1 バックゕップと復元 ...72 5.2 XMLA スクリプトによる定義のバックゕップ ...77 5.3 ロールを利用したセキュリテゖ設定 ...78 5.4 キューブの処理 ...81S
S
T
T
E
E
P
P
1
1
.
.
本
本
自
自
習
習
書
書
の
の
概
概
要
要
と
と
自
自
習
習
書
書
を
を
試
試
す
す
環
環
境
境
に
に
つ
つ
い
い
て
て
この STEP では、自習書の概要と自習書を試す環境について説明します。 この STEP では、次のことを学習します。 自習書の内容について 自習書を試す環境について1.1 本自習書の内容について
本自習書の内容について
本自習書では、SQL Server 2008 Analysis Services(SSAS)の応用的な利用方法を説明します。 Analysis Services の基本的な操作方法については、本自習書シリーズの「Analysis Services 入 門」編で説明しています。 Analysis Services 入門編で説明した内容は、次のとおりです。 Analysis Services のインストール OLAP キューブの作成手順 Excel 2007 ピボット テーブルからの操作 時間ディメンション タイム インテリジェンス ウィザードによる年成長率の追加 本自習書では、次の内容を説明します。 MDX ステートメントによるキューブのクエリ 計算されるメンバと名前付きセットの利用 属性メンバの並べ替えの設定 メジャーの集計関数と書式設定 ドリルスルーの設定 属性メンバの自動グループ化 集計のデザインとカスタマイズ 属性リレーションシップの設定 バックアップと復元 XMLA スクリプトによる定義のバックアップ ロールを利用したセキュリティ設定
1.2 自習書を試す環境について
必要な環境
この自習書で実習を行うために必要な環境は次のとおりです。
OS
Windows Server 2003 SP2(Service Pack 2)以降 または Windows XP Professional SP2 以降 または Windows Vista または Windows Server 2008 ソフトウェア ・SQL Server 2008 Enterprise/Developer/Standard エデゖション ・Office Excel 2007 ※ この自習書の手順をすべて試すには、SQL Server の次のコンポーネントをンストール しておく必要があります。 ・データベース エンジン サービス ・Analysis Services
・Business Intelligence Development Studio ・管理ツール - 完全
1.3 事前作業:サンプル スクリプトのセットアップ
サンプル スクリプトのダウンロードが必須になります
この自習書では、すべての手順でサンプル スクリプトに含まれる「NorthwindJ」データベース (NorthwindJ.mdf と NorthwindJ.ldf)を利用しますので、STEP2 以降を始める前に、必ずこの データベースを SQL Server 2008 上へゕタッチしておく必要があります。なお、「Analysis Services 入門」編の手順をすべて実施している場合は、ゕタッチ作業は省略できます。 ゕタッチの手順は、次のとおりです。 1. [スタート] メニューの [すべてのプログラム] から、[Microsoft SQL Server 2008] を選択して [SQL Server Management Studio] をクリックし、Management Studio を起動し ます。 2. 起動後、[サーバーへの接続] ダゕログで、[サーバー名] へ SQL Server の名前を入力し、 [接続] ボタンをクリックします。 3. 接続完了後、次のように [データベース] フォルダを右クリックして [アタッチ] をクリック します。 SQL Server の名前を入力します [接続] ボタンをクリックします 1 2 [データベース] を右クリックします 1 [アタッチ] をクリックします 2
4. すると、次のように [データベースのゕタッチ] ダゕログが表示されるので、[追加] ボタ ンをクリックします。 サンプル スクリプトを解凍したフォルダを展開し、「NorthwindJ.mdf」フゔルを選択し て [OK] ボタンをクリックします。 5. すると、次のように [データベースのゕタッチ] ダゕログへ戻るので、[OK] ボタンをクリ ックします。 6. 以上でゕタッチが完了です。もし、エラーが出る場合は、SQL Server のサービス ゕカウン トに対して、「NorthwindJ.mdf」フゔルへの NTFS ゕクセス権限が付与されているかどう かを確認してみてください。
なお、この NorthwindJ は、Microsoft Access 2003 に付属のサンプル データベース「Norhwind」 を SQL Server 上へゕップサズしたものを利用していますが、この自習書の手順を試すために、 一部のデータを加工しています。 [追加] ボタンを クリックします 1 サンプル スクリプトを 解凍した場所を展開して NorthwindJ.mdf を選択 2 [OK] ボタンをクリックします 3 [OK] ボタンをクリックします 1
OLAP キューブの作成
次に、「Analysis Services 入門」編で作成したキューブと同じものを作成するスクリプトを実行 します。この手順は、「Analysis Services 入門」編の手順をすべて実施している場合は省略でき ます。
キューブの作成手順は、次のとおりです。
1. まず、Management Studio の[接続]メニューから「Analysis Services」をクリックし
て、Analysis Services へ接続します。
2. 次に、Windows エクスプローラを開いて、サンプル スクリプトを展開したフォルダを開き、
「AS 入門キューブ作成.xmla」フゔルをダブル クリックします。
3. すると、「AS 入門キューブ作成.xmla」フゔルが Management Studio で開かれるので、
ツール バーの[実行]ボタンをクリックして、スクリプトを実行します。 Analysis Services の名前を入力します [接続] ボタンをクリックします 2 3 「接続」メニューから「Analysis Services」をクリックします 1 サンプル スクリプト内の AS入門キューブ作成.xmla フゔルをダブルクリック 1
正常に実行が完了した後は、オブジェクト エクスプローラで Analysis Services の[データ ベース]フォルダを展開すると、作成されたキューブを確認できます。 4. この作成されたキューブは、メタ データ(定義)だけなので、次のようにデータベースを右 クリックして[処理]をクリックし、データを作成します。 「実行」をクリック 1 正常に実行された ことを確認 2 「Analysis Services プロジェクト1」 という名前のデータベースが作成されて 「Northwind J」という名前のキューブ が作成されていることを確認
以上で、キューブの作成が完了です。 これで、Excel 2007 からゕクセスできるようになります。 データベースを右ク リックして「処理」 をクリック 1 「OK」をクリック 1 処理が成功した ことを確認 1 「閉じる」を クリック 2
S
S
T
T
E
E
P
P
2
2
.
.
M
M
D
D
X
X
の
の
利
利
用
用
この STEP では、MDX(Multi Dimensional Expressions)ステートメントを利 用したキューブのクエリと、計算されるメンバ、名前付きセットなどの利用方法を 説明します。 この STEP では、次のことを学習します。 MDX ステートメントによるキューブのクエリ 前年比の計算 構成比率の計算 名前付きセット 計算されるメンバ2.1 使用するキューブ
使用するキューブ
この Step で使用する Analysis Services のキューブ(Northwind J)は、次のように「商品区 分」ごとや「年」ごとの売上分析ができるようになっています。
この Step で行う作業
この Step では、このキューブに対して、MDX(Multi Dimensional Expressions:多次元式)と いうステートメントを利用してクエリしたり、前年比や構成比率などを計算する式を追加したりし てみます。MDX は、RDBMS(データベース エンジン)における SQL ステートメントのような ものです。 商品区分 年 MDX ステート メント 前年のデータ を取得
2.2 MDX でキューブをクエリ
MDX でキューブをクエリ
まずは、もっとも基本な MDX ステートメントの利用方法を試してみましょう。 MDX ステートメントの基本構文は、次のとおりです。 SELECT { 列項目} ON COLUMNS, { 行項目} ON ROWS FROM キューブ名 WHERE フィルタ条件 または SELECT { 列項目} ON 0, { 行項目} ON 1 FROM キューブ名 WHERE フィルタ条件MDX では、SQL ステートメントと同じように SELECT .. FROM .. WHERE という形をとりま す。選択リストには、列項目(列として表示したい項目)と行項目(行として表示したい項目)を
{ }で囲んで指定し、列項目へは ON COLUMNS または ON 0、行項目へは ON ROWS または ON 1 を記述します。Column は「列」、Row は「行」という意味です。
Let's Try
それでは、MDX を試してみましょう。
1. MDX を実行するには、Management Studio のツールバーで「Analysis Services MDX ク エリ」をクリックします。
1
2
これにより、「MDX クエリ エディタ」が開き、MDX クエリを記述できるようになります。 ツールバーでは、[使用できるデータベース]リストボックスで「Analysis Services プロジ ェクト 1」が選択されていることを確認し、[キューブ]リストボックスで「Northwind J」 キューブが選択されていることを確認します。 2. 次のように MDX を記述して、[実行]ボタンをクリックします。 SELECT { [Measures].[受注金額] } ON COLUMNS FROM [Northwind J] [Measures].[受注金額] は、[メタデータ]タブから「受注金額」メジャーをクエリ エデゖ タ へ ド ラ ッ グ & ド ロ ッ プ し て 記 述 で き ま す 。 こ の よ う に 、 MDX で は 、 メ ジ ャ ー は 1 2 MDX クエリ を記述 4 MDX クエリ エディタ メジャーやデゖメンショ ンのメンバが一覧される 3 1 2 受注金額の 全体合計
[Measures].[メジャー名] のように大カッコで囲んで指定する必要があります。また、キュ ーブ名(Northwind J)は、FROM 句で指定し、これも大カッコで囲む必要があります。 3. 次に、行項目(ON ROWS)へ商品階層の区分名を指定して、区分ごとの受注金額の合計を取 得してみましょう。 SELECT { [Measures].[受注金額] } ON COLUMNS, { [商品].[商品階層].[区分名].Members } ON ROWS FROM [Northwind J] 行項目に区分名が表示されて、区分ごとの受注金額を取得できたことを確認できます。このよ うに MDX では、デゖメンションは、[商品].[商品階層].[区分名] のように、[ディメンショ ン名].[階層名].[属性名] で指定し、属性のメンバを取得するために「.Members」と指定し ます(Members は、MDX にあらかじめ用意された組み込み関数です)。 4. 次に、「受注金額」メジャーだけでなく、「数量」メジャーを取得してみましょう。 SELECT
{ [Measures].[受注金額], [Measures].[数量] } ON COLUMNS, { [商品].[商品階層].[区分名].Members } ON ROWS
FROM [Northwind J]
このように、列項目では ,(カンマ)で区切って複数のメジャーを指定することができます。
WHERE 句の利用
5. 次に、WHERE 句を利用して、2006 年のデータへ絞り込んでみましょう。 SELECT { [Measures].[受注金額] } ON COLUMNS, { [商品].[商品階層].[区分名].Members } ON ROWS FROM [Northwind J] WHERE [時間1].[年].&[2006-01-01T00:00:00] 「時間 1」デゖメンションの「年」属性のメンバを展開して、「2006 年」を WHERE 句へド 1ラッグ&ドロップします。これで、&[2006-01-01T00:00:00] という形でフゖルタ条件 を指定できます。このように MDX では、メンバは &[ ] で指定します。 6. 次に、WHERE 句へメジャーを指定する方法を試してみましょう。 SELECT { [時間1].[年].Members } ON COLUMNS FROM [Northwind J] WHERE [Measures].[受注金額]
列項目(ON COLUMNS)へ「時間 1」デゖメンションの「年」属性のメンバ(Members) を指定しているので、年ごとの受注金額の合計を、列のデータとして取得できます。このよう に MDX では、WHERE 句へメジャーを記述することで、特定のメジャーのみを取得できる ようになります。
クロス集計
7. 次に、年ごと・区分ごとのクロス集計結果を取得してみましょう。 SELECT { [時間1].[年].Members } ON COLUMNS, { [商品].[商品階層].[区分名].Members } ON ROWS FROM [Northwind J] WHERE [Measures].[受注金額] 行項目(ON ROWS)へ区分名のメンバを指定しているので、区分ごと・年ごとの受注金額の 合計を取得できていることを確認できます。NON EMPTY で NULL の削除
8. 上の例では、結果に NULL 値(該当データが存在しないもの)が表示されているので、これ
を削除してみましょう。NULL 値を削除するには、NON EMPTY キーワードを次のように指 定します。
NON EMPTY { [時間1].[年].Members } ON COLUMNS,
NON EMPTY { [商品].[商品階層].[区分名].Members } ON ROWS FROM [Northwind J]
WHERE [Measures].[受注金額]
このように NON EMPTY キーワードを利用すると、NULL 値を削除することができます。
Children 関数で ALL 値の削除
9. 続いて、結果に表示される ALL 値(合計値)を削除してみましょう。ALL 値を削除するに
は、Members 関数の代わりに Children 関数を利用します。
SELECT
NON EMPTY { [時間1].[年].Children } ON COLUMNS,
NON EMPTY { [商品].[商品階層].[区分名].Members } ON ROWS FROM [Northwind J] WHERE [Measures].[受注金額] このように ALL 値を削除したい場合は Children 関数を利用します。
CROSSJOIN 関数で複数属性の組み合わせを取得
10. 次に、CROSSJOIN 関数を利用して、複数属性の組み合わせを取得してみましょう。ここで は、CROSSJOIN で「区分名」と「仕入先名」を指定してみます。 SELECTNON EMPTY { [時間1].[年].Children } ON COLUMNS,
NON EMPTY { CROSSJOIN ( [商品].[商品階層].[区分名].Members , [商品].[仕入先名].Members ) } ON ROWS FROM [Northwind J]
MDX の関数は、SQL の関数と同様、( ) で囲んで引数を ,(カンマ)区切りで指定します。 MDX には CROSSJOIN や Children、Members の他にもたくさんの関数が用意され、次の ように[関数]タブを開くと、テンプレートが表示されるので、ここからドラッグ&ドロップ して関数を利用することもできます。
TopCount 関数で上位 N 件の取得
11. 次に、TopCount 関数を利用して、上位 N 件を取得してみましょう。この関数では、第 1 引数へ対象となる属性、第 2 引数へ N 件取得するか、第 3 引数で計算値となるメジャーを指 定します。 1 2SELECT { [Measures].[受注金額] } ON COLUMNS, { TopCount( [商品].[商品階層].[区分名].Members , 5, [Measures].[受注金額] ) } ON ROWS FROM [Northwind J] 区分ごとの受注金額が多い上位 5 件を取得できたことを確認できます。
BottomCount 関数で下位 N 件の取得
12. 次に、TopCount とは逆の結果(下位 N 件)を取得できる BottomCount 関数を利用して、 区分ごとの受注金額が少ない下位 5 件を取得取得してみましょう。 SELECT { [Measures].[受注金額] } ON COLUMNS, { BottomCount( [商品].[商品階層].[区分名].Members , 5, [Measures].[受注金額] ) } ON ROWS FROM [Northwind J]その他の関数
MDX には多くの関数が用意されています。その他の関数については、オンラン ブックの以下の 場所が参考になります。 「Analysis Services - 多次元データ」 →「テクニカル リフゔレンス」 →「多次元式(MDX)リフゔレンス」 →「MDX 言語リフゔレンス」 →「MDX 関数リファレンス」2.3 WITH を利用した名前付きセット
名前付きセット(WITH SET .. AS ..)
MDX では、先頭に WITH 句を利用して、名前付きセットを定義できます。 -- 名前付きセットの構文 WITH SET セット名 AS セット式 SELECT ~Let's Try
それでは、これを試してみましょう。 1. 次のように SET 句を利用して、名前付きセットを作成してみましょう。 WITH SET [x] AS [商品].[商品階層].[区分名].MembersSET [x2] AS TopCount( [x], 5, [Measures].[受注金額] ) SELECT { [Measures].[受注金額] } ON COLUMNS, { [x2] } ON ROWS FROM [Northwind J] 最初の SET 句では「x」という名前を、区分名のメンバに対して付けています。2 つ目の SET 句では「x2」という名前を TopCount 関数で取得した受注金額が多い上位 5 件に対して付 けています。 これは、前の項の例題で実行した以下と同じ結果を取得できます。 SELECT { [Measures].[受注金額] } ON COLUMNS, { TopCount( [商品].[商品階層].[区分名].Members , 5, [Measures].[受注金額] ) } ON ROWS FROM [Northwind J] このように列項目や行項目へ指定するセット名が長くなる場合には、名前付きセットとして先 頭に WITH 句で宣言しておくと便利です。
2.4 WITH を利用した計算されるメンバ
計算されるメンバ(WITH MEMBER .. AS ..)
WITH 句では、メジャーに対して演算を行える ”計算されるメンバ” を定義できます。 -- 計算されるメンバの構文 WITH MEMBER メンバ名 AS 計算式 SELECT ~Let's Try
それでは、これを試してみましょう。 1. 次のように記述して、「受注金額」メジャーに対する計算式を追加した計算されるメンバを利 用してみましょう。 WITHMEMBER [Measures].[a1] AS [Measures].[受注金額] / 1000000 MEMBER [Measures].[a2] AS [Measures].[受注金額] * 3
SELECT
NON EMPTY { [Measures].[受注金額], [Measures].[a1], [Measures].[a2] } ON COLUMNS, NON EMPTY { [時間1].[年].Children } ON ROWS
FROM [Northwind J] メンバ「a1」は受注金額を 100 万で割った結果、メンバ「a2」は受注金額に 3 をかけ算し た結果を取得できていることを確認できます。 このようにメジャーに対する計算式は、MEMBER 句を利用して、記述することができます。
ParallelPeriod 関数で前年データの取得
2. 次に、非常に便利な ParallelPeriod 関数を利用して、”前年のデータ” を取得してみましょ う。 WITH MEMBER [Measures].[前年] AS ( ParallelPeriod( [時間1].[年 - 四半期 - 月 - 日付].[年],1
,[時間1].[年 - 四半期 - 月 - 日付].CurrentMember) ,[Measures].[受注金額] )
SELECT
{ [Measures].[受注金額], [Measures].[前年] } ON COLUMNS, { [時間1].[年 - 四半期 - 月 - 日付].[年].Members } ON ROWS FROM [Northwind J] ParallelPeriod 関数は、年月日の階層に対して利用することができ、Parallel(平行)のメ ンバ(年なら昨年や 2 年前、来年、月なら先月や来月など)を取得できる便利な関数です。 この例では、第 1 引数に [時間 1] デゖメンションの [年 - 四半期 - 月 - 日付] 階層の [年] メンバを指定し、第 2 引数に 1、第 3 引数に [年 - 四半期 - 月 - 日付] 階層の現 在のメンバ(CurrentMember)を指定することで 1 年前(前年)のデータを取得できるよ うになります。 本自習書シリーズの「Analysis Services 入門」では、前年データは「タム ンテリジェ ンス」ウゖザードを利用して取得していましたが、このように MDX を利用して取得するこ とができます。
前年同月のデータの取得
3. 次に、前年同月の受注金額を取得してみましょう。 WITH MEMBER [Measures].[前年] AS ( ParallelPeriod( [時間1].[年 - 四半期 - 月 - 日付].[年] ,1 ,[時間1].[年 - 四半期 - 月 - 日付].CurrentMember) ,[Measures].[受注金額] ) SELECT{ [Measures].[受注金額], [Measures].[前年] } ON COLUMNS, { [時間1].[年 - 四半期 - 月 - 日付].[月].Members } ON ROWS FROM [Northwind J]
2005年 2006年 2007年
前年データの取得との違いは、行項目(ON ROWS)へ指定している [年].Members が [月].Members へ変わっているだけです。前年データを取得するための計算されるメンバは 変更していません(CurrentMember が [月].Members を指し、1 年前の同月(前年同月) のデータを取得できるため)。
構成比率の取得(Parent 関数)
4. 次に、区分ごとの受注金額に対して、全体合計で割り算した ”構成比率” を取得してみましょ う。全体合計を取得するには、Parent 関数を利用します。 WITH MEMBER [Measures].[構成比率] AS ([商品].[商品階層].CurrentMember, [Measures].[受注金額]) /([商品].[商品階層].CurrentMember.Parent, [Measures].[受注金額]) ,
FORMAT_STRING = "Percent" SELECT
{ [Measures].[受注金額], [Measures].[構成比率] } ON COLUMNS, NON EMPTY { [商品].[商品階層].[区分名].Members } ON ROWS FROM [Northwind J]
[商品階層].CurrentMember(商品階層の現在のメンバ)に対して、Parent で割り算(/) 2005年の
することで全体に対する割合を計算し、FORMAT_STRING="Percent" で表示書式を %
形式へ変更しています(0.166 というデータなら 16.6% で表示)。
本自習書シリーズの「Analysis Services 入門」では、構成比率は Excel 上で Excel の機能 を利用して取得していましたが、このように MDX を利用して取得することができます。 Note: Excel から実行されている MDX をプロファイラでキャプチャ Excel でピボット テーブルを操作しているときも内部的には MDX ステートメントが実行されています。これは、プ ロフゔラ(SQL Server Profiler)ツールを使って確認することができます。 プロフゔラでは、次のように新しいトレースの開始時に[サーバーの種類]で「Analysis Services」を選択して、 トレースを開始します。 トレース開始後、Excel 上でピボットテーブルを操作すると、内部的に実行されている MDX を確認することができま す。 1 2 ↓
2.5 キューブへ計算されるメンバと名前付きセットの追加
キューブへ計算されるメンバと名前付きセットの追加
MDX の WITH 句で追加した計算されるメンバ(WITH MEMBER)や名前付きセット(WITH SET) は、キューブへ追加することもできます。こうすることで、Excel からはそれらのメンバやセット を参照できるようになります。
Let's Try
それでは、これを試してみましょう。
1. まず、Business Intelligence Development Studio(BIDS)を起動します。
2. BIDS が起動したら、[ファイル]メニューの[開く]から[Analysis Services データベー ス]をクリックします。
[データベースへの接続]ダゕログでは、「既存のデータベースに接続」を選択して、[サー バー]へ Analysis Services の名前を入力、[データベース]で「Analysis Services プロ
ジェクト 1」を選択し、[OK]ボタンをクリックします。
これで「Analysis Services プロジェクト 1」データベースを BIDS で編集できるようにな ります。 3. 続いて、次のようにソリューション エクスプローラで[キューブ]フォルダの「Northwind J」キューブをダブルクリックしてキューブ定義を開きます。 1 2 3
キューブ定義では、[計算]タブを開き、ツールバーの「新しい計算されるメンバ」をクリッ クします。これで計算されるメンバをキューブへ追加できるようになります。 4. 次に、[名前]へ「[前年]」と半角大カッコ付きで入力し、[式]へは前の項で WITH 句で指 定した前年を取得するための ParallelPeriod 関数を利用した式を記述します。 ( ParallelPeriod( [時間1].[年 - 四半期 - 月 - 日付].[年] ,1 ,[時間1].[年 - 四半期 - 月 - 日付].CurrentMember) ,[Measures].[受注金額] ) 1 2 3 1 2 3
以上で計算されるメンバの作成が完了です。最後にツールバーの[保存]ボタンをクリックし て定義を保存しておきます。 Note: テンプレートから計算されるメンバの作成 [計算]タブでは、左下の「計算ツール」セクションに[テンプレート]タブがあり、よく利用する計算式のテン プレートが用意されているので、これを参考に作成していくこともできます。
名前付きセットの追加
5. 次に名前付きセットを追加してみましょう。名前付きセットを追加するには、同じく[計算] タブで、次のようにツールバーの「新しい名前付きセット」をクリックします。 6. [名前]へ「[上位 5 件]」と半角大カッコ付きで入力し、[式]へは区分ごとの上位 5 件を取 得するための TopCount 関数を利用したものを記述します。 1 2 1TopCount( [商品].[商品階層].[区分名].Members, 5, [Measures].[受注金額] ) 以上で名前付きセットの作成が完了です。ツールバーの[保存]ボタンをクリックして定義を 保存しておきます。 7. 次に、作成した名前付きセットと計算されるメンバをキューブへ反映させるために、ソリュー ション エクスプローラでキューブを右クリックして[処理]をクリックします。 1 2 1 2 1
8. 処理が完了したら、[ブラウザ]タブをクリックしてキューブ ブラウザを開き、年ごとの受注 金額を表示します。作成した計算されるメンバは、Measures の直下に表示されるので、これ も追加して前年のデータを表示できることを確認します。 9. Excel 2007 からも同じように確認できます。 処理が成功したこと を確認 1 2 2 4 1 1 1
10. 名前付きセットについても確認しておきましょう。作成した名前付きセットは、Excel 2007
では[セット]フォルダの下に表示されます。
Note: Reporting Services からのキューブ アクセス(MDX クエリ ビルダ)
Reporting Services は、キューブへゕクセスするレポートも簡単に作成できます。MDX ステートメントを自動生成し てくれる「MDX クエリ ビルダ」が用意されているので、MDX を記述することなくレポートを作成することができま す。レポートを作成する手順を次のとおりです。
[データソースを選択します]画面では、[型]で「Microsoft SQL Server Analysis Services」を選択して、[編集] ボタンをクリックし、Analysis Services 上の接続したいデータベースを選択します。 1 1 2 3 4 ↓
[クエリのデザン]画面では、「クエリ ビルダ」ボタンをクリックすると MDX クエリ ビルダが開いて、ドラッグ& ドロップでキューブ データをクエリすることができます。 MDX クエリ ビルダでは、次のようにツールバーの「デザイン モード」ボタンをクリックすると、自動生成された MDX ステートメントを確認することができます。 残りの画面では、レポートの種類やデザンを設定して次へ進みます。 1 2 3 1
Note: ADOMD.NET からのアクセス
MDX ステートメントをゕプリケーション(VB や C#)から実行するには、「ADOMD.NET」を利用します(ADO.NET の MDX 版)。提供されるクラスは、ADO.NET とほとんど同じように利用でき、Connection クラスで「Analysis Services への接続」、Command クラスで「MDX ステートメントの実行」、DataAdapter または DataReader ク ラスで「結果セットの受け取り」ができます。 ADOMD.NET を利用する手順は、次のとおりです。ADOMD.NET を利用するには、まずは、次のように[参照の追加] から「Microsoft.AnalysisServices.AdomdClient」を追加しておく必要があります。 MDX のクエリ結果を DataGridView で表示するために、フォーム上へ DataGridView コントロールを配置します。 1 2 1
コードは、次のように記述します。 AdomdConnection クラスで Analysis Services へ接続 AdomdCommand クラスで MDX クエリを実行 AdomdDataAdapter クラスで MDX クエリ結果を DataTable として受け取り DataGridView コントロールへ MDX クエリ結果をバンド Microsoft.AnalysisServices.AdomdClient 名前空間をンポート 1 区分ごとの受注金額の合計が DataGridView へ表示される
S
S
T
T
E
E
P
P
3
3
.
.
応
応
用
用
的
的
な
な
キ
キ
ュ
ュ
ー
ー
ブ
ブ
の
の
設
設
定
定
この STEP では、属性メンバの並べ替え方法やメジャーの集計関数、書式の変更 方法など、現場でよく利用する応用的なキューブの設定方法を説明します。 この STEP では、次のことを学習します。 属性メンバの並べ替えの設定 メジャーの集計関数と書式設定 DisplayFolder プロパテゖでフォルダ分け ドリルスルー ゕクションの設定 属性メンバの自動グループ化3.1 属性メンバの並べ替えの設定
属性メンバの並べ替えの設定
char や varchar などの文字データ(商品名や区分名、仕入先名、社員名など)の属性メンバは、 デフォルトでは名前の順に並べ替えられます。しかし、名前順ではなく、コード順で並べ替えたい 場合が多くあります(商品名なら商品コード、区分名なら区分コードで並べ替えるなど)。 また、ピボットテーブルでは、名前だけでなくコードも併せて表示したい場合があります。しかし、 デフォルトでは、次のように 1 対 1 の関係のあるデータでも階層的に表示されてしまいます。 これを階層的ではなく、並列(横並び)で表示するには、次のように Excel ピボットテーブルの [デザイン]タブで[レポートのレイアウト]を「表形式で表示」をクリックします。 この例では、区分名を左へ配置しているので、区分名の順にメンバが並んでいて、区分コード順で はないことを確認できます。このような場合にも、属性(区分名)のプロパテゖを変更することで、 区分名と区分コード が階層的に表示され てしまう 1 2区分コード順に並べ替えることができるようになります。
KeyColumns、NameColumn、OrderBy プロパティ
属性の並べ替えに関わるプロパテゖには、KeyColumns、NameColumn、OrderBy の 3 つがあ り、KeyColumns はキーとなる列、NameColumn は表示用の列、OrderBy は並べ替えで利 用する列を指定することができます。デフォルトでは、KeyColumns と NameColumn は該当列 (区分名なら区分名)が設定され、OrderBy には「Name」が設定されているので、NameColumn に設定された列で並べ替えるようになっています。 したがって、KeyColumns に名前が設定されている場合は、同じ名前のデータが同一視されてし まうという問題も抱えています(商品名などで、商品コードが違うのに、同じ名前の商品があった 場合は、同じ商品の売上げとして認識されてしまう)。これを回避するには(名前ではなく、コー ドでデータを識別したい場合には)、KeyColumns へコードを設定し、NameColumn へ名前を設 定するようにします。
Let's Try
それでは、これを試してみましょう。ここでは「区分名」属性の KeyColumns を「区分コード」 へ変更して、OrderBy へ「区分コード」を設定するようにしてみましょう。 1. まず、「区分名」属性が含まれている「商品」デゖメンションをダブルクリックして開きます。 属性の一覧から「区分名」を選択し、右下の[プロパティ]ウンドウを開きます。プロパテ ゖの一覧から「KeyColumns」を探し、これを展開して[商品区分.区分名(WChar)]の「...」 1 2 3 4ボタンをクリックします。[キー列]ダゕログが表示されたら、[基となる列]から「区分コ ード」列を選択して[OK]ボタンをクリックします。これで KeyColumns プロパテゖを「区 分コード」へ変更できました。 2. 次に、NameColumn プロパテゖが「区分名」へ設定されていることを確認するために、プ ロパテゖの一覧から「NameColumn」を探し、「...」ボタンをクリックします。 [基になる列]で「区分名」を選択されていることを確認して、[OK]ボタンをクリックしま す。これで NameColumn プロパテゖが「区分名」へ設定されています。
OrderBy プロパティで並べ替えの設定
3. 次に、OrderBy プロパテゖを変更して、並べ替えを「区分コード」で行うようにしてみまし ょう。プロパテゖの一覧から「OrderBy」を探し、「Key」を選択します。 これで並べ替えを KeyColumns へ変更することができます。KeyColumns は、前の手順で 「区分コード」へ変更しているので、これで並べ替えができるようになります。 4. 設定が完了したら、ここまでの変更をキューブへ反映させるために、キューブを右クリックし 1 2 1て[処理]をクリックし、処理を実行します。
ディメンション ブラウザで結果の確認
5. 属性に対するプロパテゖ変更は、次のようにデゖメンション エデゖタの[ブラウザ]タブ(デ ゖメンション ブラウザ)で確認できます。 階層で「区分名」属性を選択し、区分名のメンバが一覧され、これらが区分コードの順に並べ 変わっていることを確認できます。Excel ピボットテーブルからも次のように確認できます。 1 1 2 区分コード順に 並んでいることを確認 3コード+名前へ表示名を変更
前の手順のように名前(区分名や商品名など)をコード(区分コードや商品コード)で並べ替える 場合は、名前にコードを付加して、「コード:名前」(1:飲料、2:調味料、…)のように表示し たい場合があります。このように複数の列データから表示名を作るには、データソース ビューを 利用して「名前付き計算」を追加します。 それでは、これを試してみましょう。ここでは、商品区分を「区分コード:区分名」で表示するよ うにしてみましょう。 1. まずは、ソリューション エクスプローラで[データソース ビュー]フォルダの「Northwind J」をダブルクリックして開きます。 次に、「商品区分」テーブルを右クリックして「新しい名前付き計算」をクリックします。[名 前付き計算の作成]ダゕログでは、[列名]へ「区分コードと名前」と入力し、[式]へは次 のように入力して、[OK]ボタンをクリックします。 CONVERT(varchar, 区分コード) + ': ' + 区分名int 型の「区分コード」列を CONVERT 関数で varhcar 型へ変換して、文字列「: 」と「区
分名」列と文字列連結させています。 2. 続いて、次のように「商品」デゖメンションを開き、名前付き計算として追加した「区分コー ドと名前」を「属性」エリゕへドラッグ&ドロップして属性として追加します。 1 2 3 4
3. 次に、属性として追加した「区分コードと名前」をクリックし、右下の[プロパティ]ウン ドウを開きます。 プロパテゖの一覧から「KeyColumns」を展開して[商品区分.区分コードと名前]の「...」 ボタンをクリックします。[キー列]ダゕログでは、[基となる列]から「区分コード」列を 選択して[OK]ボタンをクリックします。これで KeyColumns プロパテゖを「区分コード」 へ変更できます。 4. 次に、プロパテゖの一覧から「NameColumn」を探し、「...」ボタンをクリックします。 2 1 1 2 3
[名前列]ダゕログでは、[基となる列]から「区分コードと名前」列を選択して[OK]ボ タンをクリックします。これで表示名を作成した名前付き計算へ設定できます。 5. 次に、プロパテゖの一覧から「OrderBy」を探し、「Key」を選択します。 これで並べ替えを区分コードで行えるようになります。 6. 最後に、ここまでの設定をキューブへ反映されるために、キューブを右クリックして[処理] をクリックし、処理を実行します。 1 2 1 1
7. 以上の結果を確認すると、次のようになります。 Note: データソース ビューでの FriendlyName データソース ビューでは、実際の列名とは異なる名前(別名)を設定できる FriendlyName というプロパテゖもあり ます。たとえば、次のように「受注明細」テーブルの「数量」列に対して、FriendlyName プロパテゖを「受注数量」 と設定したとします。 このように設定した状態でキューブ ウゖザードを実行してキューブを作成すると、Name プロパテゖが「受注数量」 へ設定されたメジャーが作成されるようになります。 1 2 ここを設定しておくと、キューブ ウゖザード でキューブを作ったときに、次のスラドの Name を自動設定してくれる 3 1 2
3.2 メジャーの集計関数
メジャーの集計関数
ここまでに利用してきたメジャーは、受注金額や受注数量、単価などの合計(Sum)を計算するメ ジャーでした。これらは集計関数(Aggregation Function)に「Sum」が設定されています。ま た、「受注明細カウント」と表示されるメジャー(キューブ ウゖザードが自動作成したもの)は、 集計関数が「Count」へ設定されて、行数をカウントするメジャーになっています。 集計関数を確認・変更するには、次のようにキューブ エデゖタの[キューブ構造]タブでメジャ ーを選択して、[プロパティ]ウンドウの「AggregationFunction」プロパテゖを利用します。Let's Try
1. それでは、集計関数を変更したメジャーを追加してみましょう。メジャーを追加するには、[キ ューブ構造]タブでメジャーを右クリックして「新しいメジャー」をクリックします。 1 2 3 4 2 12. [メジャーの編集]ダゕログが表示されたら、[使用法]で「最大」、[基になる列]で「受 注金額」を選択して[OK]ボタンをクリックします。 設定後、右下の[プロパテゖ]ウンドウで AggregationFunction プロパテゖを参照する と最大値を取得する「Max」関数へ設定されていることを確認できます。 このように異なる集計関数を利用するには、メジャーを新しく作成するときに関数を指定する か、AggregationFunction プロパテゖを変更します。 Note: その他の集計関数
AggregationFunction プロパテゖで指定できる集計関数には、Min(最小値)や DistinctCount(個別カウント)、 LastNonEmpty(最後の値)などがあります。LastNonEmpty は、在庫管理での在庫数や金融での残高、ポン ト残高など、最後の値だけが意味を持つような場合に便利な関数です。その他の関数については、次のようにオン ラン ブックの「メジャーのプロパテゖの構成」ページが参考になります。 ↓ 1 2 3 4
3.3 メジャーの FormatString プロパティ(書式設定)
メジャーの FormatString プロパティ
メジャーは、FormatString プロパテゖで表示書式を変更することができます。それでは、これ を試してみましょう。 1. [キューブ構造]タブで「受注金額」メジャーを選択し、プロパテゖ一覧から「FormatString」 へ「#,##0」と入力し、3 桁ごとにカンマで区切って表示するように設定します。 2. 設定後、ソリューション エクスプローラでキューブを右クリックして[処理]を選択し、キ ューブ処理を実行します。 3. 処理後、キューブ ブラウザや Excel から書式が変更されたことを確認できます。 1 2 3 3桁ずつカンマ区切りで 表示されるようになる3.4 DisplayFolder プロパティでフォルダ分け
DisplayFolder プロパティでフォルダ分け
メジャーや属性は、DisplayFolder プロパテゖを設定してフォルダ分けをすることができます。そ れでは、これを試してみましょう。 1. ここでは、数量メジャーをフォルダ分けしてみましょう。[キューブ構造]タブで「数量」メ ジャーを選択し、プロパテゖ一覧から「DisplayFolder」へ「フォルダ 1」と入力します。 2. 設定後、ソリューション エクスプローラでキューブを右クリックして[処理]を選択し、キ ューブ処理を実行します。処理後、Excel でフゖールド リストを開くと、「フォルダ 1」とい う名前のフォルダが作成されて、数量メジャーが格納されていることを確認できます。 1 2 3 1 ↓属性をフォルダ分け(AttributeHirarchyDisplayFolder)
次に、属性をフォルダ分けしてみましょう。属性の場合は、AttributeHirarchyDisplayFolder プ ロパテゖを設定します。 3. ここでは、商品デゖメンションの属性「区分コードと名前」をフォルダ分けしてみましょう。 ソリューション エクスプローラで[商品]デゖメンションをダブルクリックして開き、「区分 コードと名前」属性を選択し、プロパテゖ一覧から「AttributeHirarchyDisplayFolder」 へ「フォルダ 2」と入力します。 4. 設定後、ソリューション エクスプローラでキューブを右クリックして[処理]を選択し、キ ューブ処理を実行します。処理後、Excel でフゖールド リストを開くと、「フォルダ 2」とい う名前のフォルダが作成されて、「区分コードと名前」属性が格納されていることを確認でき ます。 2 1 33.5 ドリルスルー アクションの設定
ドリルスルー アクションの設定
Excel ピボットテーブルには、標準でドリルスルー機能が付いていて、次のようにメジャー値をダ ブルクリックすると、その内訳となる明細データを別シートで確認できます。 しかし、この明細は、Measure のメンバとリレーションシップ キー(商品コードや受注コード、 受注日)のみであるため、商品名や区分名、仕入先名などを確認することができません。これをで きるようにするのが「ドリルスルー アクション」です。Let's Try
それでは、ドリルスルー ゕクションを試してみましょう。 1. ソリューション エクスプローラで「Northwind J」キューブをダブルクリックして開き、[ア クション]タブを開きます。 ドリルスルー ゕクションを作成するには、ツールバーの「新しいドリルスルー アクション」 メジャー値を ダブルクリック 1 デフォルトのドリルスルー 結果は Measure とlリレー ションシップ キーのみ 2 3 1をクリックします。 2. [名前]に「ドリルスルー アクション」など任意の名前を設定し、[メジャー グループのメ ンバ]で「受注明細」を選択、[ドリルスルー列]でドリルスルー時に参照したい列を Measures (メジャー)とデゖメンションから選択します。 ここでは、Measures から「単価、数量、受注金額」、商品デゖメンションから「区分名、商 品名、仕入先名」を選択しました。 3. 設定後、ソリューション エクスプローラでキューブを右クリックして[処理]を選択し、キ ューブ処理を実行します。 4. 処理後、Excel でピボットテーブルを開き、メジャー値を右クリックします。 [追加アクション]メニューに作成したドリルスルー ゕクションが表示されるので、これを 1 2 3 1
クリックします。
これにより、別シートが開いて、明細データとして「単価、数量、受注金額、区分名、商品名、 仕入先名」が表示されることを確認できます。
このようにドリルスルー ゕクションを設定すると、明細データを確認しやすくなるので便利 です。
3.6 属性メンバの自動グループ化(DiscretizationMethod)
属性メンバの自動グループ化
Analysis Services には、属性メンバを自動的にグループ化してくれる「DiscretizationMethod」 という便利な機能があります(Discretization は「離散化」という意味)。たとえば、仕入先コー ドの場合は、次のように自動グループ化ができます。 これは、5 個のグループに均等に分けるように設定した場合の結果です。
Let's Try
それでは、これを試してみましょう。 1. ソリューション エクスプローラで[商品]デゖメンションをダブルクリックして開き、「仕入 先コード」属性を選択します。 仕入先コードごとの集計 ↓ 仕入先コードを自動グループ化 2 1 3右下の[プロパテゖ]ウンドウで、「DiscretizationMethod」プロパテゖで「EqualAreas」 を選択、「DiscretizationBucketCount」へ「5」と入力します。これで、5 個のグループに 均等に分けることができるようになります。 2. 設定後、ソリューション エクスプローラでキューブを右クリックして[処理]を選択し、キ ューブ処理を実行します。 3. 処理後、キューブ ブラウザや Excel から結果を確認しておきましょう。 仕入先コードを 5等分 して集計結果を表示
S
S
T
T
E
E
P
P
4
4
.
.
性
性
能
能
編
編
この STEP では、キューブの性能(パフォーマンス)に大きな影響のある「集計」 と「属性リレーションシップ」の設定方法ついて説明します。 この STEP では、次のことを学習します。 集計とは 集計デザン ウゖザードによる集計の作成 集計デザナでの集計の確認とカスタマズ 属性リレーションシップの設定4.1 集計とは
集計とは
Analysis Services では、「集計」(Aggregation)を事前に作成しておくことで、キューブ参照 のパフォーマンスを大幅に向上させることができます。集計は、キューブ ブラウザやピボット テ ーブルから参照しているメジャー値(Sum や Count、Max などの集計関数で計算した結果)で す。 これらの集計値は、実は、デフォルトでは、1 つも作成されておらず、キューブの参照時に計算さ れています(一度計算された集計値は、Analysis Services のメモリにキャッシュされるので 2 回目以降の同じデータへのゕクセスは高速になります)。 したがって、集計を事前に作成しておくことで、キューブ参照時(1 回目のゕクセス時)のパフォ ーマンスを大きく向上させることができるようになります。
集計デザイン ウィザードによる集計の作成
集計は、 集計デザン ウゖザードを利用して、簡単に作成することができます。それでは、これ を試してみましょう。 1. 集計を作成するには、ソリューション エクスプローラで[キューブ]フォルダの「Northwind J」キューブをダブルクリックして開き、[集計]タブを開きます。次に、ツールバーの[集計 のデザイン]ボタンをクリックします。 商品区分ごと の集計 全体の集計 全体の集計 年ごとの集計 2 3 1 4これにより、[集計のデザン ウゖザード]が表示されるので[次へ]ボタンをクリックしま す。 2. 次の[集計使用法の確認]画面では、デフォルトのまま[次へ]ボタンをクリックします。 3. 次の[オブジェクト カウントの指定]画面では、「カウント」ボタンをクリックして、各属性 のメンバ数をカウントします。カウント後、[次へ]ボタンをクリックします。 4. 次の[集計オプションの指定]画面では、「パフォーマンスの到達率」を選択して、[30]% へ設定し、[開始]ボタンをクリックします。 1 1 2 2 ↓ 1 3 4
開始後、右側のグラフが動き出し、数秒後に「3 個の集計がデザンされました」と表示され ます。確認後、[次へ]ボタンをクリックします。 5. 次の[ウゖザードの完了]画面では、任意の集計名(デフォルトは AggregationDesign) を付けて[完了]ボタンをクリックします。 6. 設定後、ソリューション エクスプローラでキューブを右クリックして[処理]を選択し、キ ューブ処理を実行します。 7. 処理後、作成された集計を確認するには、[集計]タブで、次のようにツールバーの[詳細ビ ュー]ボタンをクリックします。 [集計のデザン]で作成した集計名(デフォルトは AggregationDesign)を選択すると、 どの属性の組み合わせの集計が作成されたかを確認することができます。なお、ウゖザードで は「3 個の集計がデザンされました」と表示されましたが、実際には 6 個の集計が作成され ています(個数の変動がある場合があります)。 1 1 2
4.2 集計のパフォーマンス到達率と Data Explosion(データ爆発)
集計のパフォーマンス到達率と Data Explosion(データ爆発)
前の手順では、パフォーマンスの到達率を 30%に設定して集計を作成しました。 デザンされたのは 3 個で、実際に作成されたのは 6 個の集計でした。この集計の個数は、次の ようにカウントします。 全体の集計で 1、商品区分ごとの集計で 2、年ごとの集計で 3、区分ごと・年ごとの組み合わせ 集計で 4 個といった具合です。このようにそれぞれの属性ごとの集計を 1 つずつカウントし、属 性が 2 つの場合はその組み合わせも 1 つの集計としてカウントされます。したがって、属性数が 多い場合には、いろいろなパターンの組み合わせ集計が考えられます。 パフォーマンス到達率は、考え得るたくさんの組み合わせの中から、作成する集計数をコントロー ルするために用意された設定値です。 商品区分ごと の集計 区分ごと・年ごとの 組み合わせ集計 全体の集計 年ごとの集計 1 2 3 4 集計が 4個の場合 商品名 区分名 月 年 仕入先名 得意先名 属性が増えると組み合わせの数がどんどん増える100% のパフォーマンス到達率の場合
パフォーマンスの到達率を 100% に設定した場合は、考えられるすべての組み合わせの集計を作 成するわけではありませんが、最も多くの集計を作成できる設定値です。前の手順で、100%を設 定した場合は、次のように 18 個の集計がデザンされています。 このようにパフォーマンスの到達率を 100% に設定してもすべての組み合わせの集計を作成し ない理由は、Data Explosion(データ爆発)にあります。Data Explosion(データ爆発)
集計値(デザンされた集計の個数ではなく、属性の各メンバごとの集計値)は、属性の数が増え、 属性のメンバ数が増えると、指数関数的に、爆発的に大きくなります。これは、次のように各メン バの数を考えると分かりやすいと思います。 属性単体では、集計値の数は少なくても、組み合わせ集計の数は、メンバ数のかけ算の数(区分と 年なら 8(区分)x 3(年)= 24)になります。前の手順の集計デザン ウゖザードでは、[カ ウント]ボタンをクリックして、メンバ数を数えていたのは、集計値の数を計算するためです。 商品区分が 8種類の 場合は 8個の集計値 年が 3年の場合は3個の集計値 組み合わせ集計の数は 24個(8 x 3)の集計値商品区分が 8種類で年が 3年の場合の 区分が 8種類 年が 6年分 商品が 123種類 日付が 2,192日分集計値の数は、属性のメンバ数(N)のかけ算(N1 x N2 x N3 x N4 x …)で計算できるからで す。これについて、次の図のような 3 つの階層(商品、年度、店舗)がある場合を考えてみます。 大分類名称は 18 種類、年は 10 年分、地域名称は 4 種類の場合は、この 3 つの属性の組み合わ せ集計は 18 x 10 x 4 の 720 個で済みます。これに対して、階層の下位レベルでの組み合わせ では、商品名称が 43,276 種類、年月日(日付)が 3,650 日分(10 年分)、店舗が 130 店だっ た場合には、この 3 つの属性の組み合わせ集計は 43,276 x 3,650 x 130 = 20,534,462,000 個(約 205 億)もの集計値になります。 このように属性の組み合わせ数が増えて、メンバ数が増えると、集計値が指数関数的に、爆発的に 大きくなるので、このような状況を Data Explosion(データ爆発)と呼んでいます。 商品名称 (43,276) 小分類名称 (319) 中分類名称 (98) 大分類名称 (18) 商品階層の属性 (カッコ内はメンバ数) 年月日 (3,650) 月度 (120) 年度 (10) 年度階層の属性 店舗名称 (130) 支店名称 (9) 地域名称 (4) 店舗階層の属性 下位レベル 上位レベル 720 18 x 10 x 4 =個の集計値 上位レベル同士の組み合わせな ら集計値は少なくなる 43,276 x 3,650 x 130 = 20,534,462,000個 下位レベル同士の組み合わせは データ爆発になる 集計値 属性のメンバ数 データ爆発
4.3 集計デザイナでの結果確認、カスタマイズ
集計デザイナでの結果確認、カスタマイズ
集計デザン ウゖザードで作成した集計は、前の手順で試したように[集計]タブの[詳細ビュ ー]で確認することができます。 この画面は、[集計デザイナ]と呼ばれ、SQL Server 2008 から提供されました。集計デザナ では、どの属性の組み合わせで集計が作成されたのかを簡単に確認できるので便利です。また、チ ェックボックスを利用して、チェックを追加したり、削除したりすることで既存の集計をカスタマ ズすることもできます。 また、次のように集計デザナ上で右クリックして、「新しい集計」をクリックすれば、新しい集 計を追加することもできます。 新しい集計は、任意の属性の組み合わせを選択できるので、クラゕントからよく利用される集計 1 2 区分名と年の組み合わ せ集計が作成されてい るという意味 「新しい集計」 をクリックに対して作成しておくことでパフォーマンスを向上させることができます。 ただし、よりパフォーマンスの良い集計を作成するには、次の項で説明する ”属性リレーションシ ップ” をきちんと設定しておくことが重要になります。また、メンバ数の多い属性同士の組み合わ せ集計には注意し、データ爆発が起こらないように注意する必要があります。 Note: プロファイラで集計が利用されたかどうかを確認 プロフゔラ(SQL Server Profiler)を利用すれば、クエリ時(キューブ参照時)に集計が利用されたかどうか(ヒッ トしたかどうか)を確認することもできます。次のように、Get Data From Aggregation がトレースされれば、集計 にヒットしています。 なお、今回の NorthwindJ データベースのようにデータ サズが非常に小さい場合は、集計デザナで集計を定義して も、内部的には集計が作成されないため、残念ながらヒットしたかどうかを確認することができません。 Note: 集計対象の属性の絞り込み 集計デザン ウゖザードでは、最初の画面で、組み合わせ集計を作成する属性を選択することできます。デフォルトで は、すべての属性が集計の作成対象になりますが、次のように None へ属性を設定すれば、その属性を集計の作成対象 から外すことができます。 None へ設定すれば 集計対象から外せる
Note: 「使用法に基づく最適化」ウィザード
Analysis Services には、キューブのクエリ状況(使用状況)をもとに集計を作成する機能もあります。これは、次のよ うにツールバーの「使用法に基づく最適化」ボタンをクリックします。
なお、このウゖザードを利用するには、事前に使用状況をログへ記録しておく必要があります。これを行うには、 Management Studio から Analysis Services へ接続し、次のようにプロパテゖを開き「CreateQueryLogTable」、 「QueryLogConnectionString」、「LogSampling」、「LogTableName」を設定します。
1
4.4 属性リレーションシップ
属性リレーションシップ
属性リレーションシップは、よりパフォーマンスの良い集計を作成するために不可欠な機能で、 Analysis Services のパフォーマンスを最も左右する機能といっても過言ではありません。 自習書シリーズの「Analysis Services 入門編」で作成した時間デゖメンションでは、属性リレー ションシップが次のように自動作成されています。 属性リレーションシップは、このようにデゖメンション エデゖタの[属性リレーションシップ] タブでグラフゖカルに確認できます(この画面は SQL Server 2008 から提供された機能で、属 性リレーションシップ デザイナと呼ばれます)。時間デゖメンションに関しては、属性リレーショ ンシップは、自動作成されている ”階層” と同じ形に設定されています。 階層は、入門編で説明したように、ドリルダウンさせたい項目をまとめたものですが、これに合わ 時間デゖメンションで自動作成されている階層 階層 年 → 四半期 → 月 → 日付 会計年度に対応した階層せる形で属性リレーションシップを作成するのが基本になります。