Analysis Services のパーソナル化拡張機能

SQL Server Analysis Services のパーソナル化拡張機能は、プラグイン アーキテクチャを実装するという概念の基盤です。 プラグイン アーキテクチャでは、新しいキューブ オブジェクトや機能を動的に開発し、他の開発者と簡単に共有することができます。 そのため、Analysis Services のパーソナル化拡張機能では、次のことを実現できます。

  • 動的な設計と配置   Analysis Services のパーソナル化拡張機能を設計して配置するとすぐに、ユーザーが次のユーザー セッションの開始時にオブジェクトや機能にアクセスできるようになります。

  • インターフェイス非依存   Analysis Services のパーソナル化拡張機能の作成に使用されたインターフェイスに関係なく、ユーザーは任意のインターフェイスを使用してオブジェクトや機能にアクセスできます。

  • セッション コンテキスト   Analysis Services のパーソナル化拡張機能は、既存のインフラストラクチャのパーマネント オブジェクトではなく、キューブを再処理する必要はありません。 この機能は、ユーザーがデータベースに接続したときにそのユーザー用に公開および作成され、そのユーザー セッションの間だけ使用できます。

  • 迅速な配布   Analysis Services のパーソナル化拡張機能の場所や入手方法に関する詳細な仕様を作成することなく、この拡張機能を他のソフトウェア開発者と共有できます。

Analysis Services のパーソナル化拡張機能の用途はさまざまです。 たとえば、会社の売上にさまざまな通貨が使用されているとします。 この場合、キューブにアクセスしている人物の現地通貨で連結売上を返す計算されるメンバーを作成します。 このメンバーをパーソナル化拡張機能として作成します。 その後、この計算されるメンバーをユーザー グループと共有します。 共有すると、ユーザーはサーバーに接続するとすぐに計算されるメンバーにアクセスできるようになります。ユーザーは、計算されるメンバーの作成に使用されたインターフェイスと同じインターフェイスを使用していなくてもアクセスできます。

Analysis Services のパーソナル化拡張機能は、既存のマネージ アセンブリ アーキテクチャに対する単純で簡潔な変更で、Analysis Services の Microsoft.AnalysisServices.AdomdServer オブジェクト モデル、多次元式 (MDX) 構文、およびスキーマ行セット全体で公開されます。

論理アーキテクチャ

Analysis Services のパーソナル化拡張機能のアーキテクチャは、マネージ アセンブリ アーキテクチャと次の 4 つの基本要素に基づいています。

  • [PlugInAttribute] カスタム属性
    サービスの開始時に、Analysis Services によって必要なアセンブリが読み込まれ、PlugInAttribute カスタム属性を持つクラスが特定されます。

    注意

    .NET Framework では、カスタム属性は、コードを記述して実行時の動作を指定する方法と定義されています。 詳細については、MSDN の『.NET Framework 開発者ガイド』で、「属性の概要」を参照してください。

    PlugInAttribute カスタム属性を持つすべてのクラスに対して、Analysis Services によって既定のコンストラクターが呼び出されます。 起動時にすべてのコンストラクターを呼び出すと、新しいオブジェクトの作成元となる、ユーザー操作に依存しない共通の場所が提供されます。

    クラス コンストラクターでは、通常、パーソナル化拡張機能の作成および管理に関する情報の少量のキャッシュの構築に加え、SessionOpened および SessionClosing イベントのサブスクライブが実行されます。 これらのイベントをサブスクライブしないと、共通言語ランタイム (CLR) のガベージ コレクターによって、誤ってクラスにクリーンアップのマークが付けられる可能性があります。

  • セッション コンテキスト
    パーソナル化拡張機能に基づくオブジェクトの場合、クライアント セッション中に Analysis Services によって実行環境が作成され、この環境でほとんどのオブジェクトが動的に作成されます。 他の CLR アセンブリと同様に、この実行環境からも他の関数やストアド プロシージャにアクセスできます。 ユーザー セッションが終了すると、作成されたオブジェクトが Analysis Services によって動的に削除され、実行環境が終了されます。

  • イベント
    オブジェクトの作成は、セッション イベント On-Cube-OpenedCubeOpened および On-Cube-ClosingCubeClosing によってトリガーされます。

    クライアントとサーバー間の通信は、特定のイベントを介して行われます。 このイベントによって、クライアントのオブジェクトが作成される状況がクライアントで認識されるようになります。 クライアントの環境は、セッション イベントとキューブ イベントという 2 つのイベント セットを使用して動的に作成されます。

    セッション イベントは、サーバー オブジェクトに関連付けられます。 クライアントがサーバーにログオンすると、Analysis Services によってセッションが作成され、SessionOpened イベントがトリガーされます。 クライアントがサーバー上のセッションを終了すると、Analysis Services によって SessionClosing イベントがトリガーされます。

    キューブ イベントは、接続オブジェクトに関連付けられます。 キューブに接続すると、CubeOpened イベントがトリガーされます。 キューブを閉じるか別のキューブに変更することによってキューブへの接続を終了すると、CubeClosing イベントがトリガーされます。

  • トレーサビリティとエラー処理
    SQL Server Profiler を使用すると、すべての操作をトレースできます。 未処理のエラーは、Windows イベント ログにレポートされます。

すべてのオブジェクトの作成および管理はこのアーキテクチャに依存せず、オブジェクトの開発者が責任を負います。

インフラストラクチャの基盤

Analysis Services のパーソナル化拡張機能は、既存のコンポーネントに基づいています。 次に、パーソナル化拡張機能を実現する強化や改善の概要を示します。

アセンブリ

カスタム属性 PlugInAttribute をカスタム アセンブリに追加して、Analysis Services のパーソナル化拡張機能のクラスを特定することができます。

AdomdServer オブジェクト モデルへの変更

Microsoft.AnalysisServices.AdomdServer オブジェクト モデル内の次のオブジェクトが強化されたか、モデルに追加されています。

新しい AdomdConnection クラス

新しく追加された AdomdConnection クラスは、プロパティとイベントの両方を介していくつかのパーソナル化拡張機能を公開します。

プロパティ

  • SessionID: 現在の接続のセッション ID を表す読み取り専用の文字列値です。

  • ClientCulture: 現在のセッションに関連付けられているクライアントのカルチャへの読み取り専用の参照です。

  • User: 現在のユーザーを表す ID インターフェイスへの読み取り専用の参照です。

イベント

Context クラスの新しいプロパティ

Context クラスには、2 つの新しいプロパティが追加されています。

  • Server: 新しいサーバー オブジェクトへの読み取り専用の参照です。

  • CurrentConnection: 新しい AdomdConnection オブジェクトへの読み取り専用の参照です。

新しい Server クラス

新しく追加された Server クラスは、クラスのプロパティとイベントの両方を介していくつかのパーソナル化拡張機能を公開します。

プロパティ

  • Name: サーバー名を表す読み取り専用の文字列値です。

  • Culture: サーバーに関連付けられているグローバル カルチャへの読み取り専用の参照です。

イベント

AdomdCommand クラス

AdomdCommand クラスで、次の MDX コマンドがサポートされるようになりました。

MDX の拡張と強化

CREATE MEMBER コマンドに caption プロパティ、display_folder プロパティ、および associated_measure_group プロパティが追加されました。

UPDATE MEMBER コマンドが追加され、更新が必要になり計算の解決時の優先順位が失われることになる場合のメンバーの再作成が不要になりました。 更新では、計算されるメンバーのスコープの変更、計算されるメンバーの別の親への移動、または別の solveorder の定義は実行できません。

CREATE SET コマンドに caption プロパティ、display_folder プロパティ、および新しい STATIC | DYNAMIC キーワードが追加されました。 静的とは、作成時にのみセットを評価することを示します。 動的とは、クエリでセットが使用されるたびに、セットを評価することを示します。 キーワードが省略された場合、既定値は STATIC になります。

CREATE KPI コマンドと DROP KPI コマンドが MDX 構文に追加されました。 KPI は、任意の MDX スクリプトから動的に作成できます。

スキーマ行セットの拡張

MDSCHEMA_MEMBERS に scope 列が追加されました。 スコープの値は MDMEMBER_SCOPE_GLOBAL=1 と MDMEMBER_SCOPE_SESSION=2 です。

MDSCHEMA_SETS に set_evaluation_context 列が追加されました。 セットの評価コンテキストの値は MDSET_RESOLUTION_STATIC = 1 と MDSET_RESOLUTION_DYNAMIC = 2 です。

MDSCHEMA_KPIS に scope 列が追加されました。 スコープの値は MDKPI_SCOPE_GLOBAL=1 と MDKPI_SCOPE_SESSION=2 です。