OLAP データ分析構造の作成
実装のポイント
Microsoft SQL Server に関する最新情報は、http://www.microsoft.com/japan/sqlserver/ をご覧ください。
本書は、情報提供のみを目的としています。Microsoft は、明示的または暗示的を問わず、本書にいかなる保証も与えるものではありません。
*Microsoft、Microsoftロゴ、Excel、Internet Explorer、SQL Server、Windows、Windows Server、Windows Vista は、米国 Microsoft Corporation および/またはその関連会社の商標です。
*その他記載されている、会社名、製品名、ロゴ等は、各社の登録商標または商標です。 *製品の仕様は、予告なく変更することがあります。予めご了承ください。
*製品に関するお問い合わせは:マイクロソフト カスタマー インフォメーションセンター 0120-41-6755 (9:30〜12:00、13:00〜19:00 土日祝日、弊 社指定休業日を除く)
1.データ ソースの確認
………5 データベース ダイアグラムの作成 ………5 テーブルに対する集計クエリの実行 ………72.OLAP キューブの作成
……… 10 Analysis Services プロジェクトの追加 ……… 10 データ ソースの定義 ……… 12 データ ソース ビューの定義 ……… 15 保育園ディメンションの定義 ……… 19 住民情報ディメンションの定義 ……… 25 時間ディメンションの定義 ……… 30 キューブの定義 ……… 363.キューブの配置と参照
……… 41 キューブの配置 ……… 41 キューブの参照 ……… 424.キューブへのアクセス許可
……… 51 検証用のユーザーとグループ アカウントの作成 ……… 51 ロールの定義 ……… 53本書は、自治体 BI 指南書 第 1 巻『SSIS パッケージによるセキュアなデータ統合 実装のポイント』の手順に従って、 データ ロードが実行された分析用テーブルをデータ ソースとする OLAP (OnLine Analytical Processing) キューブを 作成し、Analysis Services に配置する手順を説明します。また、配置された OLAP キューブに対するアクセス制御 の方法も示します。本書の手順に従ったソリューション構築には、以下のインストール環境が必要です。
また、使用するネットワーク環境は、[ ワークグループ ] で、[ コンピューター名 ] は、[SQL1] としています。
OLAP キューブの構築方法の基礎については、「SQL Server 2008 Analysis Services 入門 with Excel 2007」(http://www.microsoft.com/japan/sqlserver/2008/self-learning/default. mspx) を参照してください。 また、OLAP 構造の設計からOLAP キューブの開発、運用について体系的に学習されたい場合、エディ フィストラーニング株式会社の研修コース「SQL Server 2008 による OLAP 分析ソリューションの実装 と運用管理 (2Days)」(http://www.edifist.co.jp/classes/courselistmsu_Sql.asp) の受講をお勧め します。 種類 要件 OS
Microsoft® Windows Server® 2003 SP2 以降または Microsoft® Windows® XP Professional SP2 以降または Windows Vista® または
Microsoft® Windows Server® 2008
前提となるソフトウェア
MDAC 2.8 SP1 以降
Microsoft® Internet Explorer 6.0 SP1 以降 .NET Framework 3.5 SP1 以降
(SQL Server のセットアップ メディアに同梱されます) Windows インストーラ 4.5 以降
(SQL Server のセットアップ メディアに同梱されます) Microsoft® Office Excel® 2007
Microsoft® SQL Server® SQL Server 2008 Enterprise with sp1 またはSQL Server 2008 Developer with sp1 または SQL Server 2008 Enterprise Evaluation with sp1
1. データ ソースの確認
まず、データベース ダイアグラムを作成し、分析用データベースのテーブル構造を確認します。そして、特定の分析シ ナリオに沿って「園児の数」や「保育園の定員数」を調べるための Transact-SQL クエリを実行し、集計値を取得し ます。
データベース ダイアグラムの作成
SQL Server Management Studio のオブジェクト エクスプローラを使用して、データベース ダイアグラムを作成し、分 析用データベースのテーブル構造を確認します。
1. 分析用データベースのテーブル構造を確認するため、SQL Server Management Studio のオブジェクト エクスプ ローラのツリーで、[ データベース ] - [Preschool_dwh] - [ データベース ダイアグラム ] を選択します。 2. 以下のメッセージ ボックスが表示されるので [ はい ] ボタンをクリックします。 3. オブジェクト エクスプローラのツリーで、[ データベース ダイアグラム ] を右クリックして、表示されるメニューから [ 新 しいデータベース ダイアグラム ] を選択します。 4. [ テーブルの追加 ] が表示されるので、Shft キーを押しながら [Dim_ クラス年齢 ] をクリックした後に、[Fact_ 定員 ] をクリックしてディメンション テーブルとファクト テーブルを選択した状態にします。
5. [ テーブルの追加 ] の [ 追加 ] ボタンをクリックし、ダイアグラムにテーブルが登録されるのを確認して、[ テーブルの 追加 ] の [ 閉じる ] ボタンをクリックします。
6. ここで [Preschool_dwh] データベースのテーブル構造を確認します。 テーブルの命名規則は以下のとおりです。
7. SQL Server Management Studio の [ファイル ] メニューから [Diagram_0 を保存 ] を選択して作成したダイアグ ラムを保存しておきます。
接頭辞 テーブルの種類 説明
Dim_* ディメンション テーブル 属性データを格納します。
Fact_* ファクト テーブル 分析対象となる数値を格納します。
テーブルに対する集計クエリの実行
自治体 BI 指南書 第 1 巻『SSIS パッケージによるセキュアなデータ統合』の手順に従って、データ ロードが実行さ れている場合、これらのテーブルには、すでに 2009 年 1 月から 2009 年 6 月までのサンプル データが格納されてい るはずです。 ここで、分析者は、これらのテーブルに格納されたデータから以下の集計値を確認することを要求したとします。 ・「本町北」地区の園児数の推移 ・「本町北」地区にある保育園の学年別定員数の推移 この要件に対して、Transact-SQL でクエリを記述して、集計値を計算してみます。1. SQL Server Management Studio のオブジェクト エクスプローラのツリーで、[ データベース ] – [Preschool_dwh] を右クリックし、表示されるメニューから [ 新しいクエリ] を選択します。
2. クエリ エディタが開くので以下のクエリを入力して、ツールバーの [ 実行 ] ボタンをクリックします。
SELECT 調査日 , 年齢 ,COUNT( 人数 ) AS 人数 FROM Fact_人数
INNER JOIN Dim_時間
ON Fact_人数 . 時間 ID = Dim_時間 . 時間 ID INNER JOIN Dim_住民情報
ON Fact_人数 . 住民 ID = Dim_住民情報 . 住民 ID INNER JOIN dbo.Dim_世帯情報
ON Dim_住民情報 . 住民 ID = Dim_世帯情報 . 世帯 ID INNER JOIN dbo.Dim_区画
ON Dim_世帯情報 . 区画 ID = Dim_区画 . 区画 ID WHERE 年齢 >= 0 AND 年齢 <= 6 AND 区画名 = ' 本町北 ' GROUP BY 調査日 , 年齢 GO
このクエリにより、結果セットとして「本町北」地区の園児数の推移を確認できます。
3. 次にクエリ エディタのクエリを以下に変更して、ツールバーの [ 実行 ] ボタンをクリックします。
SELECT 調査日 , クラス年齢 ,SUM( 定員数 ) AS 定員数 FROM Fact_定員
INNER JOIN Dim_時間
ON Fact_定員 . 時間 ID = Dim_時間 . 時間 ID INNER JOIN Dim_クラス年齢
ON Fact_定員 . 保育園_クラス年齢 ID = Dim_クラス年齢 . 保育園_クラス年齢 ID INNER JOIN Dim_保育園
ON Dim_クラス年齢 . 保育園 ID = Dim_保育園 . 保育園 ID INNER JOIN Dim_区画
ON Dim_保育園 . 区画 ID = Dim_区画 . 区画 ID WHERE 区画名 = ' 本町北 '
GROUP BY 調査日 , クラス年齢 GO
分析用のデータベースに対して、クエリを実行することで「本町北」地区にある保育園の学年別定員数の推移を確認 できます。この方法には以下の問題点があります。 ・分析者は、データベースに格納されたテーブル構造を理解しなければならない ・分析者は、Transact-SQL を使用したクエリを記述できなければならない ・ 記述された SELECT ステートメントは実行時に、集計関数により集計が行われるため、データ量が多くなるにつ れて応答時間が長くなる
これらの問題は、Analysis Services がサポートする OLAP キューブを作成することですべて解決されます。テーブル の構造は、メタデータが列のみにセットできる 1 次元の表ですが、OLAP キューブは、メタデータがセットできる複数の 軸 ( ディメンション ) を組み合わせた多次元構造 ( クロス集計表 ) を表現できます。 テーブルの構造 OLAP キューブの構造 分析者は、SQL 文を書く代わりに、あらかじめデザインされたディメンションの属性や階層を行ヘッダと列ヘッダにセット することで、クロス集計表を作成できます。また、作成されたクロス集計表のセルに置かれる数値は、事前に集計して おくことができます。これにより、分析者は直観的な操作で、高速にクロス集計表を完成させ、操作することができます。 列ヘッダ 列ヘッダ 列ヘッダ 属性値 属性値 数値 属性値 属性値 数値 属性値 属性値 数値 属性値 属性値 数値 列ヘッダ 列ヘッダ 列ヘッダ 行ヘッダ 数値 数値 数値 行ヘッダ 数値 数値 数値 行ヘッダ 数値 数値 数値 行ヘッダ 数値 数値 数値
2. OLAP キューブの作成
以降の手順では、分析用のデータベースをデータ ソースとする Analysis Services OLAP キューブを作成する手順を 説明します。
Analysis Services プロジェクトの追加
ここで、データ ロードに使用した SSIS パッケージのプロジェクトに OLAP キューブを作成するための Analysis Services プロジェクトを追加します。
1. データ ロードに使用したプロジェクトを開いている Business Intelligence Development Studio の [ファイル ] メ ニューから [ 追加 ] - [ 新しいプロジェクト ] を選択します。 2. [ 新しいプロジェクトの追加 ] ダイアログ ボックスで以下を設定し [OK] ボタンをクリックします。 項目 設定値 プロジェクトの種類 ビジネス インテリジェンス プロジェクト テンプレート Analysis Services プロジェクト プロジェクト名 Preschool Cube
3. この操作により Business Intelligence Development Studio の右側の領域に開いている [ ソリューション エクス プローラ ] のツリーの [Local Government Analytical Project] ソリューションに、[Preschool Cube] プロジェク トのツリーが追加されています。 以降では、以下のフローで 3 種類のディメンション構造とキューブを定義し、サーバーに配置します。 データ ソースの定義 ↓ データ ソース ビューの定義 ↓ ディメンションの定義 ・保育園ディメンション ・住民情報ディメンション ・時間ディメンション ↓ キューブの定義 ↓ キューブの配置、処理
データ ソースの定義
データ ソースとは、ディメンションやキューブなどの Analysis Services コンポーネントが使用する情報ソースに対する接 続情報を保持するオブジェクトです。 1. [ ソリューション エクスプローラ ] のツリーで [Preschool Cube] プロジェクトの下にある [ データ ソース ] ノードを右 クリックし、表示されるメニューから [ 新しいデータ ソース ] をクリックして [ データ ソース ウィザード ] を起動します。 2. [ データ ソース ウィザード ] が起動するので、[ 次へ ] ボタンをクリックします。3. [ 接続の定義方法を選択します ] ページの [ データ接続 ] で 分析用データベースへの接続定義を選択し [ 次へ ] ボ タンをクリックします。
4. [ 権限借用情報 ] ページで [ 継承する ] オプションを選択し [ 次へ ] ボタンをクリックします。
この設定により、キューブのデータ ソースを参照する際は現在、接続している Windows ユーザー アカウントを使用し、 Windows 認証で接続することになります。
5. [ ウィザードの完了 ] ページが表示されたら既定のデータ ソース名のままで、[ 完了 ] ボタンをクリックします。
6. [ ソリューション エクスプローラ ] のツリーで [ データ ソース ] フォルダに [Preschool Dwh.ds] データ ソースが追加 されたことを確認します。
データ ソース ビューの定義
OLAP キューブは、1 つまたは複数のデータ ソースに置かれたテーブルとビューに基づきデザインされます。データ ソー スとして使用するデータベースには、OLAP キューブに使用しないオブジェクトが存在します。また、テーブルには、分 析に必要なフィールドが不足していたり、主キーや外部キーといった制約の設定がなされていなかったりする場合もありま す。OLAP キューブのデザイン時に、ベースとなるテーブルには主キーの設定が要求されます。このような物理的な実 装と必要とされる論理データ モデルとの差異を吸収するためにデータ ソース ビューを使用することができます。ここでは、 データ ソース ビューの定義方法を確認します。1. [ ソリューション エクスプローラ ] のツリーで、[Local Government Cube] プロジェクトの下にある [ データ ソース ビュー ] ノードを右クリックし、表示されるメニューから [ 新しいデータ ソース ビュー ] をクリックし [ データ ソース ビュー ウィザード ] を起動します。
2. [ データ ソース ビュー ウィザード ] が起動するので、[ 次へ ] ボタンをクリックします。
3. [ データ ソースの選択 ] ページの [リレーショナル データ ソース ] で [Preschool Dwh] が選択されていることを確 認して、[ 次へ ] ボタンをクリックします。
4. [ テーブルとビューの選択 ] ページが表示されます。[ 使用できるオブジェクト ] リスト ボックスの内容が参照できるよう にダイアログ ボックスのサイズを広げます。[ テーブルとビューの選択 ] ページの [ 使用できるオブジェクト ] リスト ボッ クスで Shift キーを押しながらすべてのディメンション テーブルとファクト テーブルを選択し、[>] ボタンをクリックします。 この操作により 6 つのディメンション テーブルと 2 つのファクト テーブルが [ 含まれているオブジェクト ] リスト ボックス に追加されます。 5. [ テーブルとビューの選択 ] ページで [ 次へ ] ボタンをクリックします
6. [ ウィザードの完了 ] ページが表示されたら既定のデータ ソース ビュー名のままで、[ 完了 ] ボタンをクリックします。 7. デザイナが開き、登録されたテーブルの構造が表示されます。[ 表示 ] メニューで [ ズーム ] – [100% ] を選択しテー ブルの配置を調整し、データ ソース ビュー デザイナに表示されたテーブル構造を確認します。 データ ソース ビューに追加されたテーブルは、メジャー ( 測定値 ) と呼ばれる集計対象として使用されるフィールドと、メ ジャーを説明する属性情報が格納されています。属性情報を使用して OLAP キューブのディメンションが作成されます。 今回のシナリオでは、Fact_人数テーブルに含まれる [人数] 列とFact_定員テーブルに含まれる [定員数] 列をメジャー として使用します。
保育園ディメンションの定義
ディメンション ウィザードを使用して、データ ソース ビューに基づく保育園ディメンションを定義します。ここでは、区画名、 保育園名、クラス年齢といった 3 種類の属性情報からなる階層構造も定義します。
1. Business Intelligence Development Studio の [ ソリューション エクスプローラ ] のツリーで、[Preschool Cube] プロジェクトの下にある [ ディメンション ] ノードを右クリックして、[ 新しいディメンション ] を選択します。
2. ディメンション ウィザードが起動し、[ ディメンション ウィザードへようこそ ] ページが表示されるので、[ 次へ ] をクリッ クします。
3. [ 作成方法の追加 ] ページで、[ 既存のテーブルの使用 ] オプションを選択して [ 次へ ] をクリックします。 4. [ 基になる情報の指定 ] ページで下表に従い設定して、[ 次へ ] をクリックします。 項目 設定値 データ ソース ビュー Preschool Dwh メイン テーブル Dim_クラス年齢 キー列 保育園 _クラス年齢 ID 名前列 クラス年齢
5. [関連テーブルの選択] ページで [関連テーブル] に [Dim_保育園]、[Dim_区画] がセットされていることを確認して、 [ 次へ ] ボタンをクリックします。
7. [ ディメンション属性の選択 ] ページで、[ 保育園 クラス年齢 ID] 属性の名前を「クラス年齢」に変更して、[ 次へ ] ボタンをクリックします。
9. ウィザードで定義されたディメンション構造を持つディメンション エディタが開きます。
11. 同様に [ 保育園名 ] 属性と [ クラス年齢 ] 属性を [ 階層 ] 領域の [ 区画名 ] 属性の下にドラッグ アンド ドロップ します。
13. ここで、「区画名 - 保育園 階層」と入力します。
ここまでの操作で、区画名 - 保育園名 - クラス年齢といった 3 つのレベルを持つ「区画名 - 保育園 階層」が作成さ れます。
住民情報ディメンションの定義
同様の操作で、区画名 - 年齢といった 2 つのレベルで構成される階層を持つ住民情報ディメンションを定義します。 1. Business Intelligence Development Studio の [ ソリューション エクスプローラ ] のツリーで、[Preschool
Cube] プロジェクトの下にある [ ディメンション ] ノードを右クリックして、[ 新しいディメンション ] を選択します。 2. ディメンション ウィザードが起動し、[ ディメンション ウィザードへようこそ ] ページが表示されるので、[ 次へ ] をクリッ
クします。
4. [ 基になる情報の指定 ] ページで下表に従い設定して、[ 次へ ] をクリックします。 5. [ 関連テーブルの選択 ] ページで [ 関連テーブル ] に [Dim_世帯情報 ] と [Dim_区画 ] がセットされていることを確 認して、[ 次へ ] ボタンをクリックします。 項目 設定値 データ ソース ビュー Preschool Dwh メイン テーブル Dim_住民情報 キー列 住民 ID 名前列 住民 ID
6. [ ディメンション属性の選択 ] ページで、[ 世帯主フラグ ] 以外の属性を選択して、[ 次へ ] ボタンをクリックします。
8. ウィザードで定義されたディメンション構造を持つディメンション エディタが開きます。
10. 同様に [ 年齢 ] 属性を [ 階層 ] 領域の [ 区画名 ] 属性の下にドラッグ アンド ドロップします。
12. ここで、[ 区画名 - 年齢 階層 ] と入力します。 ここまでの操作で、区画名 - 年齢といった 2 つのレベルを持つ「区画名 - 年齢 階層」が作成されます。
時間ディメンションの定義
ここまでの操作で、保育園の属性情報と住民の属性情報を持つ 2 種類のディメンション構造が作成されました。保育 園の定員数や園児の人数を時系列で比較するには、さらに、時間に関する情報を持つディメンションが必要です。以 降では、ディメンション ウィザードを使用して、時間ディメンションを定義します。1. Business Intelligence Development Studio の [ ソリューション エクスプローラ ] のツリーで、[Preschool Cube] プロジェクトの下にある [ ディメンション ] ノードを右クリックして、[ 新しいディメンション ] を選択します。 2. ディメンション ウィザードが起動し、[ ディメンション ウィザードへようこそ ] ページが表示されるので、[ 次へ ] をクリッ
クします。
4. [ 基になる情報の指定 ] ページで下表に従い設定して、[ 次へ ] をクリックします。 5. [ ディメンション属性の選択 ] ページで、すべての属性を選択して、 [ 次へ ] ボタンをクリックします。 項目 設定値 データ ソース ビュー Preschool Dwh メイン テーブル Dim_時間 キー列 時間 ID 名前列 調査日
6. [ ウィザードの完了 ] ページで [ 名前 ] テキスト ボックスに「時間」と入力して [ 完了 ] ボタンをクリックします。
8. [ 属性 ] 領域から [ 年 ] 属性を選択して [ 階層 ] 領域にドラッグ アンド ドロップします。
10. [ 階層 ] 領域の [ 階層 ] の階層名部分を右クリックし、表示されるメニューから [ 名前の変更 ] を選択します。
11. ここで、[ 年 - 月 階層 ] と入力します。
ここまでの操作で、年 - 月といった 2 つのレベルを持つ「年 - 月 階層」が作成されます。最後に、このディメンション の Type プロパティを「Time」に設定しておきます。
12. ここで [ 表示 ] メニューから [ プロパティ ウィンドウ ] を選択します。
13. プロパティ ウィンドウで [Type] プロパティを選択し「Regular」から「Time」に変更します。
ディメンションの Type プロパティを「Time」に変更した場合、このディメンションの属性が年、半期、四半期、月、日といっ た時間間隔を表現していることが、サーバーに指定されます。
キューブの定義
キューブで使用する 3 種類のディメンションが作成できました。次に、キューブ ウィザードを使用して、データ ソース ビュー と作成したディメンション構造に基づくキューブ構造を作成します。
1. Business Intelligence Development Studio の [ ソリューション エクスプローラ ] のツリーで、[Preschool Cube] プロジェクトの下にある [ キューブ ] ノードを右クリックして、[ 新しいキューブ ] を選択します。
3. [ 作成方法の選択 ] ページで [ 既存のテーブルを使用する ] オプションを選択して [ 次へ ] ボタンをクリックします。
4. [メジャーグループ テーブルの選択 ] ページでは、[メジャーグループ テーブル ] で分析対象となるメジャーを含むテー ブルのみを選択する必要があります。ここで、[Fact_人数 ] と [Fact_定員 ] を選択して [ 次へ ] ボタンをクリックし ます。
5. [メジャーの選択 ] ページでは、分析対象となるメジャーのみを選択します。[Fact_人数 ] から [Fact 人数 カウント]、 [Fact_定員 ] から [Fact 定員 カウント ] の選択を外して [ 次へ ] ボタンをクリックします。
6. [ 既存のディメンションの選択 ] ページでは、キューブで使用する既存のディメンションを選択します。[ 保育園 ]、[ 住 民情報 ]、[ 時間 ] の 3 種類のディメンションが選択されていることを確認して、[ 次へ ] ボタンをクリックします。
7. [ ウィザードの完了 ] ページで [ キューブ名 ] に「Preschool Dwh Cube」と入力して [ 完了 ] ボタンをクリックします。
8. ウィザードを完了させると、Business Intelligence Development Studio にキューブ デザイナが開き [キューブ構造] タブが選択された状態になります。
9. ここで [ ディメンションの使用法 ] タブを選択します。 キューブに構成されたディメンションとメジャー グループの関係を確認できます。メジャー グループは、リレーショナル ファ クト テーブルに関連付けられています。 このキューブには、時間、住民情報、保育園の 3 つのディメンションがあります。住民の人数は時間、および住民情 報ディメンションにリレーションシップが設定され、保育園の定員数は、時間、および保育園ディメンションにリレーションシッ プが設定されていることがわかります。
3. キューブの配置と参照
キューブの配置
次のステップでは、ここまでの手順で定義されたキューブをサーバーに配置してデータ ソースからディメンション データと ファクト データを読み込むための「処理」を行います。そうすることで、キューブに属性データとファクト データが格納され、 ピボット コントロールを使用して、クロス集計表を作成できるようになります。
1. Business Intelligence Development Studio の [ビルド] メニューから [Preschool Cube の配置] を選択します。
2. この操作により [ 配置状況 ] ウィンドウが開き、処理の実行状況が表示されます。[ 配置状況 ] ウィンドウの下方に ある [ 状態 ] に [ 配置が正常に完了しました ] と表示されるまで待ちます。
3. また、[ 出力 ] ウィンドウにも配置により、内部的に行われた操作のログが表示されます。
ディメンション ウィザードやキューブ ウィザードを実行することでディメンションやキューブといったコンポーネントが作成され ますが、これらは XML コードとして生成されています。配置を行うことで、コンポーネントごとに生成された XML コードは、
単一のファイルとして結合された後、Analysis Server に送信され、定義内容に基づく Analysis Services データベー スとして構築されます。さらに配置が完了すると自動的に「処理」と呼ばれるプロセスが開始され、データ ソースから読 み込まれたディメンション データとファクト データが Analysis Services のデータ ストアに格納されます。
キューブの参照
配置されたキューブを参照するにはキューブ ブラウザを使用します。 1. キューブ デザイナで [ブラウザ ] タブを選択します。 キューブ ブラウザの [メタデータ ] ペインから選択された項目を各フィールドにドラッグ アンド ドロップすることで、クロス 集計表を定義できます。メジャーは、データ領域にドラッグ アンド ドロップします。ディメンションの属性、および階層は、 行領域、または列領域にドラッグ アンド ドロップします。また、[ サブキューブ ] ペインや フィルタ領域を使用して表示す るデータを制限することができます。 [ メタデータ ] ペイン データ領域 メジャー ( 値 ) をセット 行領域 属性、または階層をセット 列領域 属性、または階層をセット フィルタ領域 属性値を指定 [ サブキューブ ] ペイン2. [メタデータ ] ペインの [Measures] フォルダを展開します。
人数と定員数というメジャーが確認できます。
3. 人数メジャーを選択し、データ領域 ([ここに詳細のフィールドをドロップします]と書かれた箇所 ) にドラッグ アンド ドロッ プします。
4. [メタデータ] ペインの [ 時間 ] ディメンションを展開表示して [ 年 - 月 階層 ] を選択して、列領域 ([ここに列のフィー ルドをドロップします ] と書かれた箇所 ) にドラッグ アンド ドロップし、2009 年を展開表示します。
2009 年 1 月から 6 月までの半年分の人口数の推移を確認できます。総計、および小計セルに「844」という数値 がありますが、これは 2009 年 1 月から 6 月までの人口数が加算された値です。人口数は区画や年齢ごとに加算集 計する必要はありますが、時系列に対して合計を算出することは意味がありません。
Analysis Services プロジェクトでは、メジャーを定義すると既定で SUM 集計関数が使用されます。SUM を使用して 集計されるメジャーは「加法メジャー」と呼ばれます。メジャーの [AggregationFunction] プロパティを変更して、時系 列の場合は、加算しないように変更することができます。そのような特殊なメジャーのことを「準加法メジャー」と呼びます。 メジャーの [AggregationFunction] プロパティには、以下の値が設定できます。 値 説明 Sum ( 既定値 ) メジャーは Sum 関数を使用して加算集計される Count メジャーは Count 関数を使用して件数が集計される Min メジャーは Min 関数を使用して最小値を返す Max メジャーは Max 関数を使用して最大値を返す DistinctCount メジャーは DistinctCount 関数を使用して重複しない値の件数が集計される None メジャーは集計されない AverageOfChildren 子レベルの平均を集計して返す FirstChild 最初の子メンバを返す LastChild 最後の子メンバを返す FirstNonEmpty 最初の空でないメンバを返す LastNonEmpty 最後の空でないメンバを返す
5. キューブ デザイナで [ キューブ構造 ] を選択します。[メジャー ] 領域のツリーを展開し、[Preschool Dwh Cube] - [Fact 人数 ] - [ 人数 ] を右クリックして [ プロパティ] を選択します。
6. [ 人数 ] メジャーの [AggregationFunction] プロパティを「Sum」から「LastNonEmpty」に変更します。
この設定により人数メジャーは、総計、および小計セルの値に対しては、時間ディメンションで指定された時間間隔で 加法集計するのではなく、時間間隔の最後の期間の人数をセットするように変更されます。
7. 同様にして [Fact 定員 ] の [ 定員数 ] メジャーを選択して [AggregationFunction] プロパティを「Sum」から 「LastNonEmpty」に変更します。
8. ここまでの変更内容をサーバーに配置するために、Business Intelligence Development Studio の [ビルド ] メ ニューから [Preschool Cube の配置 ] を選択します。
9. 配置が完了したら、キューブ デザイナで [ブラウザ ] タブを選択します。
11. 総計、および小計セル値を確認すると加法集計されていないことがわかります。
12. 次に [メタデータ ] ペインの [ 住民情報 ] ディメンションを展開表示して [ 区画名 - 年齢 階層 ] を選択して、行領 域の [ ここに行のフィールドをドロップします ] と書かれた場所にドラッグ アンド ドロップします。
13. 区画名をドリルダウンすることにより、年齢別の人数を確認することもできます。
今回の分析シナリオでは、園児の人数の推移に着目する必要があります。フィルタ領域を使用して、園児の人数のみ を表示するように切り替えます。
14. [メタデータ ] ペインの [ 住民情報 ] ディメンションから [ 園児フラグ ] 属性を選択して、フィルタ領域の ([ ここにフィ ルタを設定するフィールドをドロップします ] と書かれた場所 ) にドラッグ アンド ドロップします。
15. ドロップした [ 園児フラグ ] 属性を展開し、「-1」のみを選択します。
これにより 0 歳から 5 歳までの人数の推移が確認できます。なお、この手順書で作成したキューブには、最小限のテ スト データのみがロードされているため、キューブで表示される集計値も小さい数になっています。
17. 次に保育園の定員数を表示するため、下表に従い、各領域にメジャーと階層をドラッグ アンド ドロップします。
このクロス集計表により、保育園の定員数が確認できます。
ここまでは、Business Intelligence Development Studio から Analysis Services プロジェクトを作成し、各種ウィザー ド、およびデザイナを使用して OLAP キューブ構造を定義し、SQL Server 2008 Analysis Services に配置する手
順を説明しました。
ドロップする領域 ドロップする項目
[ 詳細 ] [Fact 定員 ] メジャーグループの [ 定員数 ] メジャー
[ 行 ] [ 保育園 ] ディメンションの [ 区画名 - 保育園 階層 ]
4. キューブへのアクセス許可
Analysis Services に配置されたキューブに対してクライアントは、Windows 認証で接続します。Analysis Services に対して管理者権限を持つユーザーであれば既定でアクセスできますが、一般ユーザーはキューブへのアクセス権限は 付与されていません。しかし、キューブに対するアクセス権限のない一般ユーザーは接続することができません。ここで は管理権限のない Windows ユーザーに対するアクセス許可の設定方法を説明します。
検証用のユーザーとグループ アカウントの作成
まず、VBScript を実行して検証用の [ ローカル コンピュータ ] にユーザーとグループを作成します。
1. [エクスプローラ] を起動し、C:\Local Government Analytical Project\vbs フォルダにある [Create_Local_Acount. vbs] を右クリックして表示されるメニューから [ 編集 ] を選択します。 2. 以下の VBScript コードが確認できます。 Option Explicit Dim strUsername1,strUsername2,strPassword Dim strGroupname Dim strComputername Dim objWshNetwork Dim colAccounts Dim objUser1,objUser2 Dim objGroup strUsername1 = "Suzuki" strUsername2 = "Nishi" strPassword = "P@ssw0rd" strGroupname = "Preschool_dwh_cube_reader"
Set objWshNetwork = CreateObject("WScript.Network") strComputername = objWshNetwork.Computername
Set colAccounts = GetObject("WinNT://" & strComputername & "") ' ユーザー「Suzuki」を作成
Set objUser1 = colAccounts.Create("user", strUsername1) objUser1.SetPassword strPassword
objUser1.SetInfo If Err.Number = 0 Then
MsgBox " ユーザー「Suzuki」を作成しました " End if
' ユーザー「Nishi」を作成
Set objUser2 = colAccounts.Create("user", strUsername2) objUser2.SetPassword strPassword objUser2.SetInfo If Err.Number = 0 Then MsgBox " ユーザー「Nishi」を作成しました " End if ' Preschool_dwh_cube_reader ローカルグループを作成
Set objGroup = colAccounts.Create("group", strGroupname) objGroup.SetInfo If Err.Number = 0 Then MsgBox " Preschool_dwh_cube_reader ローカルグループを作成しました " End if 'Suzuki を Preschool_dwh_cube_reader ローカルグループに登録 objGroup.Add (objUser1.ADsPath) objGroup.SetInfo If Err.Number = 0 Then
MsgBox " Suzuki を Preschool_dwh_cube_reader ローカルグループに登録しました " End if
この VBScript コードは、[ ローカル コンピュータ ] に「Suzuki」と「Nishi」という名前のユーザーと「Preschool_d wh_cube_reader」という名前のローカルグループを作成します。また、ユーザー「Suzuki」は「Preschool_dwh_cub e_reader」グループに登録されます。
1. メモ帳の [ファイル ] メニューから [メモ帳の終了 ] を選択して閉じます。
2. エクスプローラから C:\Local Government Analytical Project\vbs フォルダにある [Create_Local_Acount.vbs] をダブル クリックして実行します。
3. [メッセージ ボックス ] が表示されます。確認しながら [OK] ボタンをクリックして進めます。 [メッセージ ボックス ] は 4 回、表示されます。
ロールの定義
ロール定義し、ユーザー「Suzuki」が登録されている 「Preschool_dwh_cube_reader」グループに対してキューブ アクセスを許可します。
1. Business Intelligence Development Studio の [ ソリューション エクスプローラ ] のツリーで、[Preschool Cube] プロジェクトの下にある [ ロール ] ノードを右クリックして、[ 新しいロール ] を選択します。
3. [ ユーザーまたはグループの選択 ] ダイアログ ボックスが開きます。ここで [オブジェクトの種類 ] ボタンをクリックします。 4. [ オブジェクトの種類 ] ダイアログ ボックスが開きます。ここで [ グループ ] を選択して [OK] ボタンをクリックします。
5. [ ユーザーまたはグループの選択 ] ダイアログ ボックスの [ 選択するオブジェクト名を入力してください ] テキスト ボック スに「Preschool_dwh_cube_reader」と入力して [OK] ボタンをクリックします。
7. 次に、[ キューブ ] タブを選択し、[ アクセス ] 列で 「読み取り」をセットします。
これにより「Preschool_dwh_cube_reader」ローカルグループに対して、キューブの読み取りが許可されます。 8. 変更を配置するために、Business Intelligence Development Studio の [ ビルド ] メニューから [Preschool
これで、「Preschool_dwh_cube_reader」ローカルグループに対して、キューブの読み取りが許可されます。なお、こ こまでの作業で使用した Business Intelligence Development Studio は BI コンポーネントの開発者が使用するツー ルです。一般ユーザーが、Analysis Services に配置されたキューブにアクセスするには、Excel 2007 を使用します。 設定したセキュリティの効果、および Excel 2007 のピボット テーブル / グラフ コントロールによるキューブ参照手順に ついては、自治体 BI 指南書 第 3 巻『Excel を使用したデータ分析 実装のポイント』をお読みください。