SQL Server 2012 自習書シリーズ No.11
Analysis Services 多次元モデル応用
Published: 2009 年 9 月 24 日 SQL Server 2012 更新版:2012 年 9 月 30 日 有限会社エスキューエル・クオリティ
この文章に含まれる情報は、公表の日付の時点での Microsoft Corporation の考え方を表しています。市場の変化に応える必要 があるため、Microsoft は記載されている内容を約束しているわけではありません。この文書の内容は印刷後も正しいとは保障で きません。この文章は情報の提供のみを目的としています。
Microsoft、SQL Server、Visual Studio、Windows、Windows XP、Windows Server、Windows Vista は Microsoft Corporation の米国およびその他の国における登録商標です。
その他、記載されている会社名および製品名は、各社の商標または登録商標です。 © Copyright 2012 Microsoft Corporation. All rights reserved.
目次
STEP 1. 本自習書の概要と 自習書を試す環境について ... 4 1.1 本自習書の内容について ... 5 1.2 自習書を試す環境について ... 6 STEP 2. MDX の利用 ... 8 2.1 使用する OLAP キューブ ... 9 2.2 MDX でキューブをクエリ ... 10 2.3 WITH を利用した名前付きセット ... 19 2.4 WITH を利用した計算されるメンバー... 20 2.5 キューブへ計算されるメンバーと名前付きセットの追加 ... 24 2.6 Reporting Services からのキューブ アクセス... 30 2.7 ADOMD.NET からのアクセス ... 34 STEP 3. 応用的なキューブの設定... 37 3.1 属性メンバーの並べ替えの設定 ... 38 3.2 メジャーの集計関数 ... 47 3.3 メジャーの FormatString プロパティ(書式設定) ... 49 3.4 DisplayFolder プロパティでフォルダー分け ... 50 3.5 ドリルスルー アクションの設定... 52 3.6 属性メンバーの自動グループ化(DiscretizationMethod) ... 55 STEP 4. 性能編... 57 4.1 集計とは ... 58 4.2 集計のパフォーマンス到達率と Data Explosion(データ爆発) ... 61 4.3 集計デザイナーでの結果確認、カスタマイズ ... 64 4.4 属性リレーションシップ ... 67 STEP 5. 管理編... 71 5.1 バックアップと復元 ... 72 5.2 XMLA スクリプトによる定義のバックアップ ... 77 5.3 ロールを利用したセキュリティ設定 ... 78 5.4 キューブの処理 ... 81STEP 1. 本自習書の概要と
自習書を試す環境について
この STEP では、自習書の概要と自習書を試す環境について説明します。 この STEP では、次のことを学習します。 自習書の内容について 自習書を試す環境について1.1 本自習書の内容について
本自習書の内容について
本自習書では、SQL Server 2012 Analysis Services(SSAS)の「多次元モデル」の応用的/ 実践的な利用方法を説明します。Analysis Services 多次元モデルの基本的な操作方法については、 本自習書シリーズの「Analysis Services 多次元モデル入門」編で説明しています。 Analysis Services 多次元モデル入門編で説明した内容は、次のとおりです。 Analysis Services 多次元モデルのインストール OLAP キューブの作成手順 Excel 2010 ピボット テーブルからの操作 ABC 分析グラフ(パレート図)の作成
PowerPivot for Excel からのアクセス
時間ディメンション タイム インテリジェンス ウィザードによる年成長率の追加 本自習書では、次の内容を説明します。 MDX ステートメントによるキューブのクエリ 計算されるメンバーと名前付きセットの利用 属性メンバーの並べ替えの設定 メジャーの集計関数と書式設定 ドリルスルーの設定 属性メンバーの自動グループ化 集計のデザインとカスタマイズ 属性リレーションシップの設定 バックアップと復元 XMLA スクリプトによる定義のバックアップ ロールを利用したセキュリティ設定
1.2 自習書を試す環境について
必要な環境
この自習書で実習を行うために必要な環境は次のとおりです。 OS Windows Server 2008 SP2 以降 または Windows Server 2008 R2 SP1 以降 または Windows Server 2012 またはWindows Vista SP2 以降 または Windows 7 SP1 以降 または Windows 8
ソフトウェア ・SQL Server 2012 ・Excel 2010 この自習書の手順をすべて試すには、SQL Server の次のコンポーネントをインストールして おく必要があります。 ・データベース エンジン サービス ・Analysis Services
・SQL Server Data Tools ・管理ツール - 完全
また、Analysis Services の構成では、次のように、[サーバー モード]で「多次元およびデ
この自習書内での画面やテキストは、OS に Windows Server 2008 R2(x64)、ソフトウェ アに SQL Server 2012 Enterprise エディション(x64)を利用して記述しています。
利用するデータベース/多次元モデル プロジェクト
この自習書では、「Analysis Services 多次元モデル入門」で利用/作成した「NorthwindJ」デ ータベースと、多次元モデル プロジェクト「MultidimensionalProject1」の OLAP キューブ (Northwind J キューブ)を利用します。
STEP 2. MDX の利用
この STEP では、MDX(Multi Dimensional Expressions)ステートメントを利 用したキューブのクエリと、計算されるメンバー、名前付きセットなどの利用方法 を説明します。 この STEP では、次のことを学習します。 MDX ステートメントによるキューブのクエリ 前年比の計算 構成比率の計算 名前付きセット 計算されるメンバー
2.1 使用する OLAP キューブ
使用する OLAP キューブ
入門編で作成した Analysis Services 多次元モデルの OLAP キューブ(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 クエリを記述できるようになります。 ツールバーでは、[使用できるデータベース]リストボックスで「MultidimensionalProject1」 (入門編で作成した多次元モデル プロジェクト)が選択されていることを確認し、[キューブ] リストボックスで「Northwind J」キューブが選択されていることを確認します。 2. 確認後、次のように MDX を記述して、[実行]ボタンをクリックします。 SELECT { [Measures].[受注金額] } ON COLUMNS FROM [Northwind J] [Measures].[受注金額] は、[メタデータ]タブから「受注金額」メジャーをクエリ エディ 1 2 MDX クエリ を記述 4 MDX クエリ エディター メジャーやディメンション のメンバーが一覧される 3 1 2 受注金額の 全体合計
ターへドラッグ&ドロップして記述できます。このように、MDX では、メジャーは [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] 1
このように、列項目では ,(カンマ)で区切って複数のメジャーを指定することができます。
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 キーワードを次のように指 定します。
SELECT
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] WHERE [Measures].[受注金額] MDX の関数は、SQL の関数と同様、( ) で囲んで引数を ,(カンマ)区切りで指定します。 MDX には CROSSJOIN や Children、Members の他にもたくさんの関数が用意され、次の ように[関数]タブを開くと、テンプレートが表示されるので、ここからドラッグ&ドロップ して関数を利用することもできます。
TopCount 関数で上位 N 件の取得
11. 次に、TopCount 関数を利用して、上位 N 件を取得してみましょう。この関数では、第 1 引数へ対象となる属性、第 2 引数へ N 件取得するか、第 3 引数で計算値となるメジャーを指 定します。 SELECT { [Measures].[受注金額] } ON COLUMNS, { TopCount( [商品].[商品階層].[区分名].Members , 5, [Measures].[受注金額] ) } ON ROWS FROM [Northwind J] 1 2区分ごとの受注金額が多い上位 5 件を取得できたことを確認できます。
BottomCount 関数で下位 N 件の取得
12. 次に、TopCount とは逆の結果(下位 N 件)を取得できる BottomCount 関数を利用して、 区分ごとの受注金額が少ない下位 5 件を取得取得してみましょう。 SELECT { [Measures].[受注金額] } ON COLUMNS, { BottomCount( [商品].[商品階層].[区分名].Members , 5, [Measures].[受注金額] ) } ON ROWS FROM [Northwind J]その他の関数
MDX には多くの関数が用意されています。その他の関数については、オンライン ブックの以下の 場所が参考になります。 「Analysis Services」 →「テクニカル リファレンス(SSAS)」 →「クエリと式言語のリファレンス(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. まず、SQL Server Data Tools(SSDT)を起動します。
2. SSDT が起動したら、[ファイル]メニューの[開く]から[Analysis Services データベ ース]をクリックします。
[データベースへの接続]ダイアログでは、「既存のデータベースに接続する」を選択して、 [サーバー]へ Analysis Services の名前を入力、[データベース]で「Multidimensional
Project1」を選択し、[OK]ボタンをクリックします。 これで「MultidimensionalProject1」データベースを SSDT で編集できるようになります。 3. 続いて、次のようにソリューション エクスプローラーで[キューブ]フォルダーの 「Northwind J」キューブをダブル クリックしてキューブ定義を開きます。 1 2 3
キューブ定義では、[計算]タブを開き、ツールバーの「新しい計算されるメンバー」をクリ ックします。これで計算されるメンバーをキューブへ追加できるようになります。 4. 次に、[名前]へ「[前年]」と半角大カッコ付きで入力し、[式]へは前の項で WITH 句で指 定した前年を取得するための ParallelPeriod 関数を利用した式を記述します。 ( ParallelPeriod( [時間1].[年 - 四半期 - 月 - 日付].[年] ,1 ,[時間1].[年 - 四半期 - 月 - 日付].CurrentMember) ,[Measures].[受注金額] ) 1 2 3 1 2 3
以上で計算されるメンバーの作成が完了です。最後にツールバーの[保存]ボタンをクリック して定義を保存しておきます。 Note: テンプレートから計算されるメンバーの作成 [計算]タブでは、左下の「計算ツール」セクションに[テンプレート]タブがあり、よく利用する計算式のテン プレートが用意されているので、これを参考に作成していくこともできます。
名前付きセットの追加
1. 次に名前付きセットを追加してみましょう。名前付きセットを追加するには、同じく[計算] タブで、次のようにツールバーの「新しい名前付きセット」をクリックします。 2. [名前]へ「[上位5件]」と半角大カッコ付きで入力し、[式]へは区分ごとの上位 5 件を取 得するための TopCount 関数を利用したものを記述します。 1 2 1TopCount( [商品].[商品階層].[区分名].Members, 5, [Measures].[受注金額] ) 以上で名前付きセットの作成が完了です。ツールバーの[保存]ボタンをクリックして定義を 保存しておきます。 3. 次に、作成した名前付きセットと計算されるメンバーをキューブへ反映させるために、ソリュ ーション エクスプローラーでキューブを右クリックして[処理]をクリックします。 1 2 3 1 2
4. 処理が完了したら、[ブラウザー]タブをクリックして MDX クエリ デザイナーを開き、年ご との受注金額を表示します。作成した計算されるメンバーは、Measures の直下に表示される ので、これも追加して前年のデータを表示できることを確認します。 5. Excel 2010 からも同じように確認できます。 処理が成功したこと を確認 1 2 2 4 1 1
6. 名前付きセットについても確認しておきましょう。作成した名前付きセットは、Excel 2010
では、次のように[セット]フォルダーの下に表示されます。 1
2.6 Reporting Services からのキューブ アクセス
Reporting Services からのキューブ アクセス
Reporting Services を利用すると、キューブへアクセスするレポートも簡単に作成することが
できます。
Reporting Services のレポート作成ツールである「レポート ビルダー」ツールのインストール手 順や、Reporting Services の詳しい操作手順については、本自習書シリーズの「Reporting
Services によるレポート作成」で説明していますので、ここでは簡単な操作手順(Analysis Services へのアクセス手順)を説明します。 まずは、レポート ビルダーを起動して、[作業の開始]ページで「テーブルまたはマトリックス ウ ィザード」を選択します(グラフ ウィザードを選択した場合もほとんど同じ手順で作成できます)。 1 2
次の「データセットの選択」ページでは「データセットを作成する」、「データ ソースへの接続の
選択」ページでは「新規」ボタンをクリックします。
「データ ソースのプロパティ」ページでは、[接続の種類の選択]で「Microsoft SQL Server
Analysis Services」を選択して、[ビルド]ボタンをクリックし、Analysis Services 上の接続
したいデータベースを選択します。 次に、[クエリのデザイン]ページ(MDX クエリ デザイナー)が表示されて、ドラッグ&ドロッ プでキューブ データをクエリすることができます。 1 2 1 2 3 4
ここでは、「Measures」から「受注金額」、「商品」ディメンションから「商品階層」をドラッグ &ドロップしています。 MDX クエリ デザイナーでは、次のようにツールバーの「デザイン モード」ボタンをクリックす ると、自動生成された MDX ステートメントを確認することができます。 次の「フィールドの配置」ページでは、クエリした結果の配置を設定します。ここでは、「行グル ープ」へ「区分名」と「商品名」、「Σ 値」へ「受注金額」を配置しています。 1 2 1
残りのページでは、レポートの種類やデザインを任意に設定して次へ進みます。
このように、Reporting Services を利用すると、キューブへアクセスするレポートを簡単に作成 することもできます。
2.7 ADOMD.NET からのアクセス
ADOMD.NET からのアクセス
MDX ステートメントをアプリケーション(VB や C#)から実行するには、「ADOMD.NET」を 利用します(ADO.NET の MDX 版)。提供されるクラスは、ADO.NET とほとんど同じように利 用でき、Connection クラスで「Analysis Services への接続」、Command クラスで「MDX
ステートメントの実行」、DataAdapter または DataReader クラスで「結果セットの受け取り」
ができます。
ADOMD.NET を利用する手順は、次のとおりです(Visual Studio 2010 の例)。
まずは、「ADOMD.NET」を SQL Server 2012 の Feature Pack ページ(以下)からダウンロ ードして、インストールします。
http://www.microsoft.com/ja-jp/download/details.aspx?id=29065
ダウンロードした「SQL_AS_ADOMD.msi」ファイルを実行して、インストールすると、 「Program Files\Microsoft.NET\ADOMD.NET」配下へファイルがインストールされます。
次に、Visual Studio 2010 で新しいプロジェクト(Windows フォーム アプリケーション)を 作成して、[参照の追加]から「Microsoft.AnalysisServices.AdomdClient.dll」を追加しま す。 次に、MDX のクエリ結果を DataGridView で表示するために、Windows フォーム上へ DataGridView コントロールを配置します。 コードは、次のように記述します。 1 2 1
AdomdConnection クラスで Analysis Services へ接続 AdomdCommand クラスで MDX クエリを実行 AdomdDataAdapter クラスで MDX クエリ結果を DataTable として受け取り DataGridView コントロールへ MDX クエリ結果をバインド Microsoft.AnalysisServices.AdomdClient 名前空間をインポート
STEP 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)]の「...」 ボタンをクリックします。[キー列]ダイアログが表示されたら、[基になる列]から「区分コ ード」列を選択して、[OK]ボタンをクリックします。これで KeyColumns プロパティを「区 1 2 3 4分コード」へ変更できました。 2. 次に、NameColumn プロパティが「区分名」へ設定されていることを確認するために、プ ロパティの一覧から「NameColumn」を探し、「...」ボタンをクリックします。 [名前列]ダイアログが表示されて、[基になる列]で「区分名」を選択されていることを確 認して、[OK]ボタンをクリックします。これで NameColumn プロパティが「区分名」へ 設定されています。
OrderBy プロパティで並べ替えの設定
3. 次に、OrderBy プロパティを変更して、並べ替えを「区分コード」で行うようにしてみまし ょう。プロパティの一覧から「OrderBy」を探し、「Key」へ変更します。 これで並べ替えを KeyColumns へ変更することができます。KeyColumns は、前の手順で 「区分コード」へ変更しているので、これで並べ替えができるようになります。 1 2 1以上で、プロパティの設定が完了です。ツールバーの[保存]ボタンをクリックして定義を保 存しておきます。 4. 定義を保存したら、ここまでの変更をキューブへ反映させるために、キューブを右クリックし て[処理]をクリックし、処理を実行します。
ディメンション ブラウザーで結果の確認
5. 属性に対するプロパティ変更は、次のようにディメンション エディターの[ブラウザー]タ ブ(ディメンション ブラウザー)から確認することができます。 [階層]で「区分名」属性を選択すると、区分名のメンバーが表示され、区分コードの順に並 べ変わっていることを確認できます。Excel ピボットテーブルからも次のように確認できます。 1 1 2 区分コード順に 並んでいることを確認 3コード+名前へ表示名を変更
前の手順のように名前(区分名や商品名など)をコード(区分コードや商品コード)で並べ替える 場合は、名前にコードを付加して、「コード:名前」(1:飲料、2:調味料、…)のように表示し たい場合があります。このように複数の列データから表示名を作るには、データ ソース ビューを 利用して「名前付き計算」を追加します。 それでは、これを試してみましょう。ここでは、商品区分を「区分コード:区分名」で表示するよ うにしてみましょう。 1. まずは、ソリューション エクスプローラーで[データ ソース ビュー]フォルダーの 「Northwind J」をダブル クリックして開きます。 次に、「商品区分」テーブルを右クリックして「新しい名前付き計算」をクリックします。[名 前付き計算の作成]ダイアログでは、[列名]へ「区分コードと名前」と入力し、[式]へは次 のように入力して、[OK]ボタンをクリックします。 CONVERT(varchar, 区分コード) + ': ' + 区分名int 型の「区分コード」列を CONVERT 関数で varchar 型へ変換して、文字列「: 」と「区
1
2
3
分名」列を文字列連結させています。 2. 続いて、次のように「商品」ディメンションを開き、名前付き計算として追加した「区分コー ドと名前」を「属性」ペインへドラッグ&ドロップして属性として追加します。 3. 次に、属性として追加した「区分コードと名前」をクリックし、右下の[プロパティ]ウィン ドウを開きます。 プロパティの一覧から「KeyColumns」を展開して[商品区分.区分コードと名前]の「...」 ボタンをクリックします。[キー列]ダイアログが表示されたら、[基になる列]から「区分コ ード」列を選択して、[OK]ボタンをクリックします。これで KeyColumns プロパティを「区 分コード」へ変更できます。 2 1 1 2 3 4
4. 次に、プロパティの一覧から「NameColumn」を探し、「...」ボタンをクリックします。 [名前列]ダイアログが表示されたら、[基になる列]から「区分コードと名前」列を選択し て、[OK]ボタンをクリックします。これで表示名を作成した名前付き計算列へ設定できます。 5. 次に、プロパティの一覧から「OrderBy」を探し、「Key」を選択します。 これで並べ替えを区分コードで行えるようになります。 6. 最後に、ここまでの設定をキューブへ反映されるために、キューブを右クリックして[処理] をクリックし、処理を実行します。 1 2 3
1
7. 以上の結果を確認すると、次のようになります。 「1: 飲料」や「2: 調味料」のおうに結果が表示されることを確認できます。 1 2 3 1 2
Note: データ ソース ビューでの FriendlyName データ ソース ビューでは、実際の列名とは異なる名前(別名)を設定できる FriendlyName というプロパティ もあります。たとえば、次のように「受注明細」テーブルの「数量」列に対して、FriendlyName プロパティを「受 注数量」へ設定したとします。 このように設定した状態でキューブ ウィザードを実行してキューブを作成すると、Name プロパティが「受注数 量」へ設定されたメジャーが作成されるようになります。 1 2 ここを設定しておくと、キューブ ウィザード でキューブを作ったときに、次のスライドの Name を自動設定してくれる 2 1 3
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 43.3 メジャーの FormatString プロパティ(書式設定)
メジャーの FormatString プロパティ
メジャーは、FormatString プロパティを設定することで、表示書式を変更することもできます。 それでは、これを試してみましょう。 1. [キューブ構造]タブで「受注金額」メジャーを選択し、プロパティの一覧から「FormatString」 を選択して、「#,##0」と入力し、3 桁ごとにカンマで区切って表示するように設定します。 2. 設定後、ソリューション エクスプローラーでキューブを右クリックして[処理]を選択し、 キューブ処理を実行します。 3. 処理後、Excel のピボット テーブルで、書式が変更されたことを確認できます(リボンの[オ プション]タブで[更新]ボタンをクリックすることで、ピボット テーブルを最新の情報に 更新することができます)。 1 2 3 3桁ずつカンマ区切りで 表示されるようになる3.4 DisplayFolder プロパティでフォルダー分け
DisplayFolder プロパティでフォルダー分け
メジャーや属性は、DisplayFolder プロパティを設定してフォルダー分けをすることもできます。 それでは、これを試してみましょう。 1. ここでは、単価メジャーをフォルダー分けしてみましょう。[キューブ構造]タブで「単価」 メジャーを選択し、プロパティ一覧から「DisplayFolder」へ「フォルダー1」と入力します。 2. 設定後、ソリューション エクスプローラーでキューブを右クリックして[処理]を選択し、 キューブ処理を実行します。 3. 処理後、Excel でフィールド リストを開くと、「フォルダー1」という名前のフォルダーが作 成されて、単価メジャーが格納されていることを確認できます。 1 2 3フォルダーが表示されない場合は、リボンの[オプション]タブで[更新]ボタンをクリック して、ピボット テーブルを最新の情報に更新してみてください。
属性をフォルダー分け(AttributeHirarchyDisplayFolder)
次に、属性をフォルダー分けしてみましょう。属性の場合は、AttributeHirarchyDisplayFolder プロパティを設定します。 1. ここでは、商品ディメンションの属性「区分コードと名前」をフォルダー分けしてみましょう。 ソリューション エクスプローラーで[商品]ディメンションをダブル クリックして開き、「区 分コードと名前」属性を選択し、プロパティ一覧から「AttributeHirarchyDisplayFolder」 へ「フォルダー2」と入力します。 2. 設定後、ソリューション エクスプローラーでキューブを右クリックして[処理]を選択し、 キューブ処理を実行します。 3. 処理後、Excel でフィールド リストを開くと、「フォルダー2」という名前のフォルダーが作 成されて、「区分コードと名前」属性が格納されていることを確認できます。 2 1 33.5 ドリルスルー アクションの設定
ドリルスルー アクションの設定
Excel ピボットテーブルには、標準で「ドリルスルー」機能が付いていて、次のようにメジャー値 をダブル クリックすると、その内訳となる明細データを別シートで確認することができます。 しかし、この明細は、Measures(メジャー)のメンバーとリレーションシップ キー(商品コード や受注コード、受注日)のみであるため、商品名や区分名、仕入先名などを確認することはできま せん。これをできるようにするのが「ドリルスルー アクション」機能です。Let's Try
それでは、ドリルスルー アクションを試してみましょう。 1. ソリューション エクスプローラーで「Northwind J」キューブをダブル クリックして開き、 [アクション]タブを開きます。 ドリルスルー アクションを作成するには、ツールバーの「新しいドリルスルー アクション」 をクリックします。 メジャー値を ダブルクリック 1 デフォルトのドリルスルー 結果は Measure とlリレー ションシップ キーのみ 2 3 12. [名前]に「ドリルスルー アクション」など任意の名前を設定し、[メジャー グループのメ ンバー]で「受注明細」を選択、[ドリルスルー列]でドリルスルー時に参照したい列を Measures(メジャー)とディメンションから選択します。 ここでは、Measures から「単価、数量、受注金額」、商品ディメンションから「区分名、商 品名、仕入先名」を選択しました。 3. 設定後、ソリューション エクスプローラーでキューブを右クリックして[処理]を選択し、 キューブ処理を実行します。 4. 処理後、Excel でピボットテーブルを開き、メジャー値を右クリックします。 [追加アクション]メニューに作成したドリルスルー アクションが表示されるので、これを クリックします。 1 2 3 1
これにより、別シートが開いて、明細データとして「単価、数量、受注金額、区分名、商品名、
仕入先名」が表示されることを確認できます。
このようにドリルスルー アクションを設定すると、明細データを確認しやすくなるので便利 です。
3.6 属性メンバーの自動グループ化(DiscretizationMethod)
属性メンバーの自動グループ化
Analysis Services には、属性メンバーを自動的にグループ化してくれる「DiscretizationMe
thod」という便利な機能があります(Discretization は「離散化」という意味)。たとえば、仕入 先コードの場合は、次のように自動グループ化することができます。 これは、5 個のグループに均等に分けるように設定した場合の結果です。
Let's Try
それでは、これを試してみましょう。 1. ソリューション エクスプローラーで[商品]ディメンションをダブル クリックして開き、「仕 入先コード」属性を選択します。 右下の[プロパティ]ウィンドウから、「DiscretizationMethod」プロパティで「EqualAreas」 仕入先コードごとの集計 ↓ 仕入先コードを自動グループ化 2 1 3を選択、「DiscretizationBucketCount」へ「5」と入力します。これで、5 個のグループに 均等に分けることができるようになります。 2. 設定後、ソリューション エクスプローラーでキューブを右クリックして[処理]を選択し、 キューブ処理を実行します。 3. 処理後、MDX クエリ デザイナーや Excel から結果を確認しておきましょう。 仕入先コードを 5等分 して集計結果を表示
STEP 4. 性能編
この STEP では、キューブの性能(パフォーマンス)に大きな影響のある「集計」 と「属性リレーションシップ」の設定方法ついて説明します。 この STEP では、次のことを学習します。 集計とは 集計デザイン ウィザードによる集計の作成 集計デザイナーでの集計の確認とカスタマイズ 属性リレーションシップの設定4.1 集計とは
集計とは
Analysis Services では、「集計」(Aggregation)を事前に作成しておくことで、キューブ参照 のパフォーマンスを大幅に向上させることができます。集計は、MDX クエリ デザイナーやピボッ ト テーブルから参照しているメジャー値(Sum や Count、Max などの集計関数で計算した結果) です。 これらの集計値は、実は、デフォルトでは、1 つも作成されておらず、キューブの参照時に計算さ れています(一度計算された集計値は、Analysis Services のメモリにキャッシュされるので 2 回目以降の同じデータへのアクセスは高速になります)。 したがって、集計を事前に作成しておくことで、キューブ参照時(1 回目のアクセス時)のパフォ ーマンスを大きく向上させることができるようになります。
集計デザイン ウィザードによる集計の作成
1. 集計は、集計デザイン ウィザードを利用して、簡単に作成することができます。このウィザ ードを起動するには、次のようにソリューション エクスプローラーで[キューブ]フォルダ ーの「Northwind J」キューブをダブル クリックして開き、[集計]タブを開きます。次に、 ツールバーの[集計のデザイン]ボタンをクリックします。 集計のデザイン ウィザードが起動したら、最初のページで[次へ]ボタンをクリックします。 商品区分ごと の集計 全体の集計 全体の集計 年ごとの集計 2 3 1 42. 次の[集計使用法の確認]ページでは、デフォルトのまま[次へ]ボタンをクリックします。 3. 次の[オブジェクト カウントの指定]ページでは、「カウント」ボタンをクリックして、各属 性のメンバー数をカウントします。カウント後、[次へ]ボタンをクリックします。 4. 次の[集計オプションの指定]ページでは、「パフォーマンスの到達率」を選択して、[20]% へ設定し、[開始]ボタンをクリックします。 開始後、右側のグラフが動き出し、数秒後に「3 個の集計がデザインされました」と表示され 1 1 2 2 ↓ 1 3 4
ます。確認後、[次へ]ボタンをクリックします。 5. 次の[ウィザードの完了]ページでは、任意の集計名(デフォルトは AggregationDesign) を付けて、[完了]ボタンをクリックします。 6. 設定後、ソリューション エクスプローラーでキューブを右クリックして[処理]を選択し、 キューブ処理を実行します。 7. 処理後、作成された集計を確認するには、[集計]タブで、次のようにツールバーの[詳細ビ ュー]ボタンをクリックします。 [集計のデザイン]で作成した集計名(デフォルトは AggregationDesign)を選択すると、 どの属性の組み合わせの集計が作成されたかを確認することができます。上画面では、ウィザ ードで「3 個の集計がデザインされました」と表示されたとおり、3 個の集計が作成されてい ますが、状況に応じて、作成される個数は変動する場合があります。 1 1 2
4.2 集計のパフォーマンス到達率と Data Explosion(データ爆発)
集計のパフォーマンス到達率と Data Explosion(データ爆発)
前の手順では、[パフォーマンスの到達率]を 20%に設定して集計を作成しました。 デザインされたのは 3 個の集計でした。この集計の個数は、次のようにカウントするイメージに なります。 全体の集計で 1、商品区分ごとの集計で 2、年ごとの集計で 3、区分ごと・年ごとの組み合わせ 集計で 4 個といった具合です。このようにそれぞれの属性ごとの集計を 1 つずつカウントし、属 性が 2 つの場合はその組み合わせも 1 つの集計としてカウントされます。したがって、属性数が 多い場合には、いろいろなパターンの組み合わせ集計が考えられます。 パフォーマンス到達率は、考え得るたくさんの組み合わせの中から、作成する集計数をコントロー ルするために用意された設定値です。 商品区分ごと の集計 区分ごと・年ごとの 組み合わせ集計 全体の集計 年ごとの集計 1 2 3 4 集計が 4個の場合 商品名 区分名 月 年 仕入先名 得意先名 属性が増えると組み合わせの数がどんどん増える100% のパフォーマンス到達率の場合
パフォーマンスの到達率を 100% に設定した場合は、考えられるすべての組み合わせの集計を作 成するわけではありませんが、最も多くの集計を作成できる設定値です。前の手順で、100%を設 定した場合は、次のように 23 個の集計がデザインされています。 このようにパフォーマンスの到達率を 100% に設定してもすべての組み合わせの集計を作成し ない理由は、Data Explosion(データ爆発)にあります。Data Explosion(データ爆発)
集計値(デザインされた集計の個数ではなく、属性の各メンバーごとの集計値)は、属性の数が増 え、属性のメンバー数が増えると、指数関数的に、爆発的に大きくなります。これは、次のように 各メンバーの数を考えると分かりやすいと思います。 属性単体では、集計値の数は少なくても、組み合わせ集計の数は、メンバー数のかけ算の数(区分 と年なら 8(区分)x 3(年)=24)になります。前の手順の集計デザイン ウィザードでは、[カ ウント]ボタンをクリックして、メンバー数を数えていたのは、集計値の数を計算するためです。 商品区分が 8種類の 場合は 8個の集計値 年が 3年の場合は3個の集計値 組み合わせ集計の数は 24個(8 x 3)の集計値商品区分が 8種類で年が 3年の場合の 区分が 8種類 年が 9年分 商品が 123種類 日付が 3,287日分集計値の数は、属性のメンバー数(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