次の方法で共有


ビジネス インテリジェンス

初めてのキューブを構築する

Stacia Misner

ユーザー自身のデータのサンプルを含む単純なキューブを作成して、ユーザーに Microsoft SQL Server Analysis Services について説明しようと思っています。ただし、その際は注意が必要です。目にしたものに興奮し、可能だとは思ってもみなかった方法でデータを探索するために席を陣取ろうとした新しいユーザーによって、いすからたたき出されてしまったことは 1 回ではないからです。自分のデータをより容易に探索できるようにする必要がある場合も、大量のデータを使用するユーザー コミュニティをサポートする必要がある場合も、SQL Server Analysis Services (SSAS) が必要なツールを提供します。

この記事はシリーズの第 3 回です。最初の 2 つの記事は 2009 年 8 月号 (technet.microsoft.com/magazine/ee263919.aspx) に掲載されています。このシリーズは、Microsoft SQL Server 2008 のコンポーネントを使用して単純な BI ソリューションを構築することにより、ビジネス インテリジェンス (BI) への理解を深めるのに役立ちます。この記事では、前の 2 つの記事で紹介された概念や用語に言及するので、この 2 つの記事をまだ読んでいない方は先に読んでおくことをお勧めします。

「初めての Microsoft BI ソリューションを計画する」では、データ マートを構築すると、企業データベースから直接データを取得する場合と比較してどのようなメリットがあるかについて説明しました。また、これらの記事で説明されている手順に従うために必要なサンプル データベースのダウンロードに関する指示も提供しました。「BI ソリューション用のデータの土台を築く」では、Derek Comingore が、Integration Services を使用してデータ マートに企業データベースのデータを設定する方法について説明しました。今回の記事では、同様のデータ マート設計に基づいてキューブを構築する方法ついて説明します。

キューブの構築が必要な理由

第 1 回の記事では、企業データベースからデータ マートと呼ばれる構造にデータを移動することを検討する必要がある理由を簡単に説明しました。データ マートに対してクエリを実行することには確かにメリットがあり、おそらくいくつかのシナリオではこの方法で十分でしょうが、そのデータをもう一度キューブと呼ばれる構造に再パッケージ化すると、さらなるメリットが実現されます。実際のところ、データ マートは、データがキューブ内の最終的な目的地に向かう際の中継地点として存在するので、ソリューション全体においてやはり重要です。

データを格納するためのキューブを構築することによって得られる付加的なメリットは、リレーショナル データ マートには容易に格納することができない計算用のビジネス ルールを、1 か所に集められることです。また、キューブの構造を使用すると、データを前年と比較したり、累積値 (当会計年度の初めから現在までの売上合計など) を作成したりするためのクエリを記述するのがはるかに容易になります。

さらに、キューブ内の集計データを透過的に管理することができるようになります。多くのデータが格納されているリレーショナル データ マートでのクエリ パフォーマンスを向上させるために、データベース管理者は、サマリ テーブルを作成して、トランザクション レベルの詳細を要求しないクエリ用にデータを準備することがよくあります。SSAS は、サマリ テーブルに論理的に相当するもの (集計と呼ばれます) を作成し、それを最新の状態に保ちます。

この記事では、第 1 回の記事に出てきたシナリオを引き続き使用します。これらのシナリオでは、このシリーズ全体をとおして構築する BI ソリューション用の基本的な分析目標が定義されています。ソリューションでは、Adventure Works にとって収益性がより高いのはインターネットによる販売と販売店による販売のどちらの販売チャネルか、および販売傾向が特定の製品に対する需要の増加と減少のどちらを示しているかを明らかにすることができる必要があります。BI ソリューション用のソース データは AdventureWorksDW2008 データベースです。このデータベースには、Derek の記事で説明されているディメンション モデリングと ETL の原則が適用されています。

Adventure Works 用のソリューションを構築するのに使用するサンプル データベースは、CodePlex (msftdbprodsamples.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=18407、英語) からダウンロードすることができます。ソースとなるデータ マートを用意できたら、Analysis Services 2008 データベースを構築する準備は完了です。

Analysis Services データベースを準備する

まずは、Business Intelligence Development Studio (BIDS) でプロジェクトを作成します。Microsoft SQL Server 2008 プログラム グループから BIDS を起動し、[ファイル] をクリックし、[新規作成] をポイントし、[プロジェクト] をクリックします。[新しいプロジェクト] ダイアログ ボックスで、[Analysis Services プロジェクト] をクリックします。[プロジェクト名] ボックスに「ssas_TECHNET_AW2008」と入力し、必要に応じてプロジェクトの場所を変更します。[OK] をクリックしてプロジェクトを作成します。

今度は、データ ソースを追加してデータ マート用の接続文字列を定義します。ソリューション エクスプローラーで、データ ソース フォルダーを右クリックし、[新しいデータ ソース] をクリックします。データ ソース ウィザードのようこそページで、[次へ] をクリックします (ようこそページが無効になっていない場合)。[接続の定義方法を選択します] ページで、新しい接続を設定するために [新規作成] をクリックします。接続マネージャーの既定の設定は SQL Server Native Client です。このプロジェクトにはこれが適切ですが、OLE DB プロバイダーまたは .NET プロバイダーを使用して他の種類のデータにアクセスすることもできます。

接続を定義するには、サーバーの名前を [サーバー名] ボックスに入力するかこのボックスの一覧から選択し、データベース ドロップダウン リストの [AdventureWorksDW2008] をクリックし、[OK] をクリックします。データ ソース ウィザードに戻ったら、[次へ] をクリックします。[権限借用情報] ページで、[サービス アカウントを使用する] をクリックします。これにより、SSAS データベースにデータを読み込む際は、サービス アカウントを使用してソースからデータが読み取られます。そのためには、サービス アカウントが読み取り権限を持っている必要があります。[次へ] をクリックし、[完了] をクリックしてウィザードを終了します。

データ ソース ビューを作成する

次に、テーブル (またはビュー) を抽象化したものとして、ディメンションやキューブの定義に使用するデータ ソースを基にしてデータ ソース ビュー (DSV) を作成します。基になるデータ ソースに変更を加えることなく DSV に変更を加えることができます。これは、データ マートに対して読み取り権限しか持っておらず、ソースに変更を加えることができない場合に便利です。ソリューション エクスプローラーで、データ ソース ビュー フォルダーを右クリックし、[新しいデータ ソース ビュー] をクリックします。

必要に応じて、ようこそページで [次へ] をクリックします。[データ ソースの選択] ページで、先ほどプロジェクトに追加したデータ ソースを選択し、[次へ] をクリックします。追加するそれぞれのテーブルまたはビューをダブルクリックして、DSV にオブジェクトを追加します。この記事の初めの方で提起された BI に関する質問 (Adventure Works にとって収益性がより高いのはインターネットによる販売と販売店による販売のどちらの販売チャネルか、および販売傾向が特定の製品に対する需要の増加と減少のどちらを示しているか) に答えるのに役立つ DSV を作成するには、DimDate、DimProduct、DimProductCategory、DimProductSubcategory、FactInternetSales、および FactResellerSales というテーブルを DSV に追加します。SSAS の使い方を学んでいる間は、このような単純な DSV から始めることをお勧めします。BI ソリューションに関する他の質問をサポートする必要がある場合はいつでも、テーブルを後で追加することができます。テーブルの追加が完了したらデータ ソース ビュー ウィザードで [次へ] をクリックし、[完了] をクリックします。

DSV デザイナーの [テーブル] ペインで各テーブルを選択し、各テーブルの FriendlyName プロパティから Dim や Fact というプレフィックスを削除して、テーブルの名前を簡略化することをお勧めします。その後、ディメンションやキューブの作成に使用するウィザードにより、FriendlyName プロパティの値を使用してオブジェクトに名前が割り当てられます。完成した DSV を図 1 に示します。

図 1: データ ソース ビュー

DSV では、テーブルのプロパティを変更できるだけでなく、論理主キーやテーブル間の論理リレーションシップを定義することもできます (物理的なソースにこれらがまだ定義されていない場合)。こうした定義がデータ層で物理的に、または DSV で論理的に行われていないと、SSAS ではデータを適切に表示することができません。名前付き計算を追加したり (これは、ビューに派生列を追加するのに似ています)、テーブル オブジェクトを名前付きクエリに置き換えたり (これは、ビューを作成するのに似ています) することもできます。

SSAS での日付ディメンションの構築に備えて、年列を四半期列および月列と連結するために Date テーブルに 2 つの名前付き計算 (Quarter と Month) を追加する必要があります。そうしなければ、要約されたデータを表示する場合に、データは月単位、四半期単位、および年単位で適切にロールアップされません。名前付き計算 Quarter を追加するには、デザイナーまたは [テーブル] ペインで Date テーブルを右クリックし、[新しい名前付き計算] をクリックします。[列名] ボックスに「Quarter」と入力します。[式] ボックスに、次の式を入力します。

'Qtr ' + convert(char(1), CalendarQuarter) + ' ' + convert(char(4), CalendarYear)

[OK] をクリックし、次の式を使用して同様の手順を繰り返して、名前付き計算 Month を追加します。

left(EnglishMonthName, 3) + ' ' + convert(char(4), CalendarYear)

デザイナー内の Date テーブル (図 2 参照) で、テーブル内に物理的に存在する列と区別するために名前付き計算が電卓アイコン付きで表示されていることに注目してください。テーブルを右クリックして [データの探索] をクリックすると、名前付き計算を追加したことによる影響を確認することができます。ソース テーブルのデータを表示するための新しいウィンドウが BIDS で開きます。

右端までスクロールすると、名前付き計算の値を確認することができます。ディメンションの構築に進む前に必ず、[データの探索] を使用して、名前付き計算が意図したとおりに表示されることを確認してください。

Analysis Services でディメンションを定義する

DSV にディメンション テーブルを追加したら、SSAS データベース内にディメンションを作成する準備は完了です。ディメンションは、ビジネス エンティティ (人、場所、物など) に関する情報を格納するために使用します。この記事の初めの方で提起された BI に関する質問に答えられるようになるためには、Date および Product 用のディメンションを作成する必要があります。
プロジェクトにディメンションを追加するには、ソリューション エクスプローラーでディメンション フォルダーを右クリックして [新しいディメンション] をクリックすることにより、ディメンション ウィザードを起動します。

図 2: 名前付き計算を持つ Date テーブル

 

DSV に DimDate テーブルが含まれているので、[作成方法の選択] ページで、既存のテーブルを使用するという既定の設定をそのまま使用します。日付を含む小規模なトランザクション テーブルを基にして単純なデータベースを構築するような場合は、データ マートを構築せず、代わりにこのページ上にある他のいずれかのオプションを使用してデータ ソース内またはサーバー上に時間テーブルを生成することができる場合があります。

どちらの場合も、トランザクション テーブル内のデータ用に開始日と終了日を指定します。SSAS では、使用するデータ ソース内で物理テーブルの作成とこの物理テーブルへのデータの設定を行って、SSAS データベース内で保守されるディメンションにデータを設定することも、単に SSAS データベース内だけでディメンションを保守することもできます。

データ ソースへのリレーショナル クエリをサポートできる必要がある場合は、物理テーブルを生成するとよいでしょう。[次へ] をクリックして続行します。

[基になる情報の指定] ページで、[メイン テーブル] ボックスの一覧の [Date] をクリックします。キー列は DateKey です。SSAS がクエリ結果を返す際にデータを適切に集計またはグループ化できるように、キー列はテーブル内の各レコードを一意に識別する必要があります。次に、[名前列] ボックスの一覧の [FullDateAlternateKey] をクリックします。SSAS では、キー列の代わりにユーザーに対して表示するラベルとして名前列が使用されます。

[次へ] をクリックします。

[ディメンション属性の選択] ページで、ディメンションに含める属性を選択します。こうした属性は、階層や追加のグループ化ラベルを定義するために使用します。

ディメンション テーブルのすべての列を含めるかどうかは、BI ソリューションでサポートする質問の種類によって決まります。SSAS が最も適切に動作するようにしたり、必要以上のストレージ領域の消費を防いだり、選択肢が多すぎてユーザーが混乱するのを防いだりするため、必要なものだけを追加するようにしてください。このディメンション用には、Calendar Year、Quarter、および Month を選択します。[次へ] をクリックし、[完了] をクリックします。

各属性を一意に識別できるようにするため、KeyColumns プロパティを更新します。このプロパティをキー列に設定すると、Month が月名に基づいて既定の並べ替え順序であるアルファベット順で並べ替えられるのではなく適切に番号順で並べ替えられるようにすることができます。

KeyColumns プロパティを更新するには、左側の [属性] ペインで [Month] をクリックします。[プロパティ] ウィンドウで、KeyColumns プロパティをクリックし、省略記号 ([...]) ボタンをクリックします。[キー列] ダイアログ ボックスで、左矢印をクリックして現在の割り当てをクリアし、[CalendarYear] および [MonthNumberOfYear] をダブルクリックします。次に、NameColumn プロパティ ボックス内の省略記号 ([...]) ボタンをクリックして、この属性にラベルを割り当てます。[EnglishMonthName] をクリックし、[OK] をクリックします。

同様の手順を繰り返して、Quarter 属性の KeyColumns プロパティを CalendarYear および CalendarQuarter に設定し、NameColumn プロパティを Quarter に設定します。
ディメンションがソリューション エクスプローラーに Date.dim として表示されるようになり、ディメンション デザイナー (図 3 参照) が BIDS のメイン ワークスペース領域に表示されます。

図 3: デザイナーに表示される Date ディメンション

左側の [属性] ペインで、ディメンション、および関連付けられた属性 (キー属性を含む) を確認することができます。後で属性を追加することにした場合、[データ ソース ビュー] ペインから [属性] ペインに属性を 1 つずつドラッグすることができます。ディメンション ウィザードは新しいディメンションを作成する場合にのみ使用しますが、必要な変更を後でディメンション デザイナーで加えることができます。

では、ディメンション ウィザードを使用して Product ディメンションを作成しましょう。Product をメイン テーブルとして使用し、EnglishProductName を名前列として使用します。Product ディメンションはスノーフレーク スキーマなので、ウィザードには、関連テーブル (ProductSubcategory と ProductCategory) を含めてよいか確認するための追加のページが含まれます。

次に、ディメンションに Color 属性と Size 属性を追加します。ウィザードでは、スノーフレーク テーブルのキー列 (Product Subcategory Key および Product Category Key) が自動的に選択されます。これらの属性用に、対応する名前列を追加する必要がありますが、まずは、属性のプロパティに変更を加えられるようにウィザードを終了する必要があります。

ディメンション デザイナーが表示されたら、[属性] ペインで [Product Category Key] をクリックします。[プロパティ] ウィンドウで、Name プロパティを見つけて名前を Category に変更します。[プロパティ] ウィンドウを下にスクロールして、NameColumn プロパティを見つけます。

プロパティ ボックス内をクリックして省略記号 ([...]) ボタンを表示し、このボタンをクリックします。次に、[EnglishProductCategoryName] をクリックし、[OK] をクリックします。同様の手順を繰り返して、Product Subcategory Key の名前を Subcategory に変更し、EnglishProductSubcategoryName をその名前列として指定します。最後に、Product Key 属性の名前を Product に変更します。

階層を追加する

[属性] ペインで、ディメンション名 Product の下に青い波線が表示されています。この線をポイントすると、"親子ディメンション以外のディメンションに階層を作成します。" という警告メッセージが表示されます。このメッセージは、SSAS データベースを適切に構築するのに役立つように SSAS 2008 に組み込まれたベスト プラクティス警告の例です。(ドキュメント ワークスペースの該当タブをクリックするかソリューション エクスプローラーで Date.dim をダブルクリックして) Date ディメンション デザイナーに戻ると、ディメンション デザイナーにも同じ警告が表示されます。

ディメンションへの階層の追加はベスト プラクティスと考えられています。それにはいくつかの理由がありますが、特に利便性と最適化のためです。より具体的に言うと、階層は、ユーザーが要約されたデータから詳細なデータへとたどっていくためのナビゲーション パスを提供します。また、階層を使用すると、SSAS ではユーザー クエリより前に集計を計算し格納することができるようになるので、クエリ パフォーマンスを向上させることができます。

たとえば、ユーザーが販売店による販売を年単位で確認する必要があり、Date ディメンション内の階層でキー属性 (Date Key) から Calendar Year 属性までのロールアップ パスが定義されている場合、SSAS では、処理中に販売データを年単位で計算し、その後、結果を永続ストレージに格納することができます。この、永続ストレージへの集計の格納により、各年の売上をクエリ時に計算する必要がなくなります。また、この格納は、データをリレーショナル データ マートから取得する場合と SSAS のような多次元データベースから取得する場合の主な違いです。

Date ディメンションに階層を追加するには、ディメンション デザイナーの [属性] ペインから [階層] ペインに Calendar Year 属性をドラッグします。1 つ目の属性を追加すると、階層オブジェクトが表示されます。表示される階層オブジェクトでは、追加した属性の下に空の新しいレベルがあります。Quarter 属性と Month 属性を空のレベル用の領域にドロップして、この 2 つの属性を階層に追加します。次に、[階層] を右クリックし、[名前の変更] をクリックし、「Year」と入力して、階層の名前を変更します。

階層を追加しましたが、Date ディメンションに対する警告は依然として表示されます。線をポイントすると、"ユーザー定義階層内のレベルとして使用されている属性の属性階層を表示するのは避けてください。" という新しい警告が表示されます。このメッセージは、属性が階層に含まれている場合は、ユーザーがその属性を自動的に目にすることができないようにする必要があることを示します。つまり、ユーザーは階層内をたどっていった場合にのみその属性を目にすることができるようにする必要があるということです。

私の経験では、これは、ユーザーに関連して本当に下す必要がある決断です。この忠告に従うことにした場合は、[属性] ペインで [Quarter] をクリックし、[プロパティ] ウィンドウで AttributeHierarchyVisible の値を False に変更します。

属性リレーションシップ

階層自体の上にも警告が表示されます。このメッセージでは、階層の 1 つ以上のレベルの間に属性リレーションシップがないためパフォーマンスの問題が発生する可能性があることが警告されます。属性リレーションシップは、クエリ パフォーマンスと集計の設計を最適化したり、ディメンションに必要なストレージの量を削減したり、データベース処理時間を短縮したりするために SSAS によって使用されます。

ディメンション デザイナーで [属性リレーションシップ] タブをクリックします (このタブがあるのは、Analysis Services 2008 を使用している場合のみです)。既定では、すべての属性は、キー属性である Date Key に直接関連付けられています。リレーションシップを再割り当てして設計を最適化するには、Month オブジェクトを Quarter オブジェクトにドラッグし、Quarter オブジェクトを Calendar Year オブジェクトにドラッグします。デザイナー内のリレーションシップは、左から右に、各レベル間の多対一リレーションシップを適切に表すようになりました (図 4 参照)。


図 4: 属性リレーションシップ

次に、Product ディメンションに Categories という階層を追加し、上から順に Category、Subcategory、および Product がこの階層に含まれるようにします。階層を作成したら、テーブル間の外部キー リレーションシップは DSV 内で既に定義されているので、レベル間の属性リレーションシップを修正する必要はないことに気付くでしょう。ただし、必要に応じて AttributeHierarchyVisible プロパティの値を False に設定することができます。

プロジェクトには、適切に定義された階層と属性リレーションシップを持つ 2 つのディメンションが含まれるようになりました。ディメンションの設計についてさらに学んでいくと、パフォーマンスを調整したりユーザー インターフェイスの特定の動作を制御したりするために使用できるプロパティがいくつかあることがわかります。

また、より複雑な BI ソリューションではディメンションの数がいくつか増えるでしょう。ですが、ここまでのところで、ディメンションの基礎は習得しました。また、キューブを作成して有効なソリューションを引き続き構築するのに必要なものは、用意できました。

キューブを作成する

ディメンション定義作業を開始するためにディメンション ウィザードを使用したのと同様に、キューブの作成を開始するにはキューブ ウィザードを使用します。ソリューション エクスプローラーでキューブ フォルダーを右クリックし、[新しいキューブ] をクリックし、必要に応じてようこそページで [次へ] をクリックします。[作成方法の選択] ページで、既定のオプションをそのまま使用します (手動で、またはテンプレートを使用して作成する設計がある場合は、他の 2 つのオプションを使用し、この設計を基にして SSAS でデータ ソース内にテーブルを生成します。キューブを参照するには、Integration Services を使用してこうしたテーブルにデータを設定する必要があります)。[次へ] をクリックします。

[メジャー グループ テーブルの選択] ページで、InternetSales と ResellerSales を選択し、[次へ] をクリックします (メジャー グループ テーブルはファクト テーブルと同義です)。選択されたメジャー グループ テーブル内にあるすべての数値列がウィザードに表示されます。これまでにとってきた単純化アプローチとの一貫性を保つため、ページ上部にある [メジャー] チェック ボックスをオフにしてすべてのメジャーのチェック ボックスをオフにし、各グループ (Internet Sales と Reseller Sales) から Order Quantity、Total Product Cost、および Sales Amount というメジャーを選択します。

このページではメジャーの名前を変更することもできます。これを行うには、メジャー名を右クリックし、新しい名前を入力します。ただし、各メジャー名が一意になるようにしてください。メジャー名は短い方がよいですが、内容がわかりにくくなるほど短くはしないでください。Internet Sales グループのメジャーの名前を、Internet Order Quantity、Internet Cost、および Internet Sales に変更します。同様に、Reseller Sales グループのメジャーの名前を、Reseller Order Quantity、Reseller Cost、および Reseller Sales に変更します。[次へ] をクリックします。

ウィザードの [既存のディメンションの選択] ページに、既に作成したディメンションが表示されます。[次へ] をクリックします。まだメジャー グループ テーブルとして、または既存のディメンションによって参照されていないテーブルが DSV 内にある場合は、[新しいディメンションの選択] ページが表示され、ここで他の必要なディメンションをすばやく追加することができます。この場合、Internet Sales と Reseller Sales をディメンションとして作成する必要はないので、[Internet Sales] チェック ボックスと [Reseller Sales] チェック ボックスをオフにします (厳密に言えばこの 2 つはメジャー グループ テーブルですが、テーブルに販売注文番号が格納されている場合、販売注文番号に基づく売上のレポートや分析をサポートするためのディメンションを作成することができます)。

[次へ] をクリックし、キューブの名前を Sales に変更し、[完了] をクリックします。お疲れさまでした。

単純なキューブを無事に構築することができました。キューブ デザイナーの左側のペインには、キューブに追加されたメジャー グループとディメンションが表示され、右側には、ソースの DSV が表示されます (図 5 参照)。

図 5: メジャー グループとディメンションが表示されたキューブ デザイナー

キューブを構築した後で最初に行うべきことは、キューブ ブラウザーで値が見やすくなるように、各メジャーの FormatString プロパティを設定することです。これを行う最も手っ取り早い方法は、メジャーをグリッドで表示することです。キューブ デザイナーのツール バーで、左から 5 番目のボタンをクリックして、ツリー ビューからグリッド ビューに切り替えます。グリッド ビューでは、Ctrl キーを使用していくつかのメジャーを同時に選択することができます。まず、Internet Order Quantity と Reseller Order Quantity を選択します。[プロパティ] ウィンドウで、[FormatString] ボックスの一覧の [Standard] をクリックします。次に、残りのメジャーをすべて選択して、FormatString プロパティを Currency に設定します。

計算を追加する

SSAS の強力な機能の 1 つは、多次元式言語 (MDX) を使用して計算を追加できることです。Excel で数式を記述できる方であれば、単純な MDX 式を使用してキューブ内で計算を作成することができます。より複雑な式を作成するには、少し時間を割いて、学習とたくさんの練習を通じて MDX について知る必要があります。

このソリューションの設計目標の 1 つは販売チャネルごとの収益性の比較であることを思い出してください。現在、キューブには、収益性を計算するのに必要なメジャー (Internet Cost、Internet Sales、Reseller Cost、および Reseller Sales) が含まれています。売上とコストの差が粗利益ですが、この計算によって得られるのは絶対的な金額であり、チャネル間の比較には役立ちません。粗利益だけでなく、粗利益を売上高で割った粗利益率も計算する必要があります。

キューブ デザイナーで、[計算] タブ (左から 3 番目のタブ) をクリックします。次に、ツール バーの [新しい計算されるメンバ] ボタン (左から 5 番目のボタン) をクリックします。[名前] ボックスに、「[Internet Gross Margin]」と入力します。

名前にスペースが含まれている場合は、角かっこを使用する必要があります。[式] ボックスに「[Internet Sales] - [Internet Cost]」と入力し、[書式設定文字列] ボックスの一覧の ["Currency"] をクリックします。同様の手順を繰り返して、図 6 に示す計算を追加します。

名前 書式設定文字列
[Reseller Gross Margin] [Reseller Sales] - [Reseller Cost] "Currency"
[Internet Gross Margin Pct] [Internet Gross Margin] / [Internet Sales] "Percent"
[Reseller Gross Margin Pct] [Reseller Gross Margin] / [Reseller Sales] "Percent"

図 6: キューブへの計算の追加

 

BIDS から Analysis Services データベースを配置する

ここまでのところで、サーバー上に SSAS データベース を作成するために必要なオブジェクトは構築しましたが、データベース自体はまだ存在しません。BIDS で設計作業を実行すると、サーバーに配置する必要がある XML ファイルが生成されます。

このようなファイルを配置すると、データベースを処理できるようになります。XML ファイルで定義されたストレージ構造を構築したり、指定されたデータ ソースに対するクエリを実行してこうした構造にデータを設定したりするのに必要なコマンドが、データベースによって実行されます。

BIDS 内では、こうした作業はすべて、ソリューション エクスプローラーでプロジェクトを右クリックし、[配置] をクリックすることによって開始します。[配置状況] ウィンドウが開き、実行される各手順、およびその手順が成功したか失敗したかが示されます。

プロジェクトを配置した後でも、デザイナー内で変更を加えることができます。変更を加えたら、変更をサーバーに反映させるために前述のようにしてプロジェクトを再び配置し、処理を起動します。データベースが上書きされるというメッセージが表示されたら、そのデータベースに変更を加えているのは自分だけであると確信できる場合は [はい] をクリックします。

配置後は、変更を加えてコマンドを実行しても、データベースの処理が起動されない場合があります。その場合は、変更したディメンションやキューブを右クリックし、[処理] をクリックし、[実行] をクリックします。[完全処理] (ディメンションの構造を大幅に変更した場合に使用する必要があります) を使用してディメンションを処理する場合、キューブの処理も必要な可能性があります。

 

BIDS でキューブを参照する

ソリューションが正常に配置および処理されていれば、開発の各段階で、ユーザーの視点から進捗状況を確認することができます。キューブ デザイナーで、[ブラウザ] タブをクリックします。左側のペインに、SSAS データベース内のオブジェクトがメタデータ ツリーの形で表示されます (図 7 参照)。最上位のノードはキューブです。[Measures] ノードおよびこのノード内のフォルダーを展開して、使用できるメジャーをすべて表示します。また、[Order Date] ノードと [Product] ノードを展開して、この 2 つのディメンション内の属性を表示します。

図 7: Sales キューブのメタデータ ツリー

たった 1 つの Date ディメンションを作成しただけなのに、なぜキューブに Due Date、Order Date、および Ship Date が含まれているのかと疑問に思っている方がいらっしゃるかもしれません。これらのキューブ ディメンションは、同じディメンションの異なる論理バージョンを表すので、多様ディメンションと呼ばれます。

Date ディメンションを含めると、これらのディメンションが自動的にキューブ内に生成されます。ファクト テーブルには、注文イベント、出荷イベント、および期限イベントを別々に追跡するために 3 つの異なる外部キー列が含まれており、この 3 つはどれも、Date ディメンションの基となる 1 つのテーブルに関連付けられているからです (こうした多様な日付が分析の役に立たない場合は、デザイナーの [キューブ構造] ページで、不要な日付をすべて削除することができます)。

キューブ データを確認するには、オブジェクトを、メタデータ ツリーからデザイナーの中央にあるグリッドにドラッグします。まずは、Internet Sales を "ここに詳細のフィールドをドロップします" というラベルの付いた領域にドラッグします。

同様の手順を繰り返して、Internet Gross Margin Pct、Reseller Sales、および Reseller Gross Margin Pct をグリッドに追加します。キューブ ブラウザーに表示された、この単純なクエリの結果から (図 8 参照)、インターネットによる販売の方が販売店による販売よりもはるかに収益性が高いことがわかります。

図 8: キューブ ブラウザーに表示されるクエリ結果

属性をグリッドの行、列、またはフィルター (これらは軸と総称されます) 用のセクションにドラッグするか、属性やメジャーをグリッドの外にドラッグして、クエリ結果を引き続き調査することができます。軸にオブジェクトを追加してクエリを絞り込むというプロセスは、BI ユーザーからはスライス & ダイスと呼ばれており、コードをまったく記述することなくデータをクエリするための非常に手っ取り早い方法です。たとえば、年単位でスライスするには、Order Date.Year を "ここに行のフィールドをドロップします" というラベルの付いたセクションにドラッグします。

(ピラミッド形のアイコンが示すとおり) Order Date.Year は階層なので、1 つまたは複数の年を展開して、四半期単位でスライスするようにドリルダウンすることができます。同様に、Categories をメジャーの上の列軸にドラッグすると、カテゴリ単位で刻むことができます。

オブジェクトを行や列に配置したら、キャプション内の矢印をクリックして項目の一覧をフィルター処理することができます。グリッドから Components を削除するには、Category キャプション内の矢印をクリックし、[Components] チェック ボックスをオフにして [OK] をクリックします。次に、ビューを簡略化するため、Internet Sales と Reseller Sales をグリッドの外にドラッグします。インターネット チャネルと販売店チャネルの収益性を年/四半期単位および製品カテゴリ単位で容易に比較できるようになりました (図 9 参照)。

 

図 9: 販売チャネルの収益性 (年/四半期単位および製品カテゴリ単位)

キューブをユーザーと共有する

既定では、キューブにアクセスできるのはサーバー管理者のみです。しかし、キューブを分析サーバーに配置すると、権限を設定して、ユーザーによるキューブへのアクセスを許可し、ユーザーが好きなツールを使用してキューブを参照できるようにすることができます。インタラクティブな参照には Microsoft Excel 2007 がよく使用されますが、Reporting Services を使用してキューブ データに基づくレポートを配布することもできます。これについては、今後の記事で説明します。

新しいスキルを応用する

サンプルの AdventureWorks データを使用して小規模なデータベースを構築したので、今度は、単純なキューブを構築して、学んだことを自分自身のデータに応用する必要があります。設計が単純でデータ セットが比較的小規模な (たとえば、数百万行のデータしか含まれていない) 場合は、データ マートの構築および保守という作業を行うことなくデータベースを構築することができます。データ ソース ビューを設定して、スター スキーマにできるだけ近い形でデータを構成する名前付きクエリをソースに対して実行するだけです。データ ソースに新しいデータが追加された場合は、SSAS データベースのデータをデータ ソースのデータと同じ状態に保つために、単純に SSAS データベースの完全処理を実行します。

この記事では、単純なキューブを構築するために知っておく必要がある非常に基本的な事項しか説明していないので、より多くのデータをキューブに格納する場合は、オンライン ブックなどのリソースで SSAS についてさらに確認する必要があります。たとえば、この記事の初めの方で、SSAS のメリットの 1 つは集計の管理だと書きましたが、この記事では、このテーマについて詳しくは説明していません。

集計や他の高度なトピックの詳細については、『Microsoft SQL Server 2008 Analysis Services Step by Step』(Microsoft Press、2009 年) を参照してください。これは、何年も前に私と共にビジネス インテリジェンス関連の仕事を始めた、私の良き友人である Scott Cameron が最近出版した書籍です。今回は初めてのキューブを構築したので、より高度なキューブを作成して Microsoft BI プラットフォームを最大限に活用できるように、スキルの向上に取り組み続けてください。

 

Stacia Misner は、BI コンサルタント、教育者、ライターであると同時に、Data Inspirations の創業者兼社長でもあります。IT 業界で 25 年の経験を持ち、そのうち 9 年間は Microsoft BI スタックに重点を置いてきました。これまでに、BI および SQL Server に関する本を数冊書いています。最新の著作である『Microsoft SQL Server 2008 Reporting Services Step by Step』(Microsoft Press、2009 年) が今年出版されました。連絡先は smisner@datainspirations.com (英語のみ) です。

 

関連リソース

Analysis Services 開発 (オンライン ブック)
msdn.microsoft.com/library/bb500183.aspx

Analysis Services のセキュリティ (オンライン ブック)
msdn.microsoft.com/library/ms175386.aspx

Analysis Services 2008 のビデオ (オンライン ブック)
msdn.microsoft.com/library/dd299422.aspx