オブジェクトの処理 (XMLA)

Microsoft SQL Server 2005 Analysis Services (SSAS) における処理は、データをビジネス分析のための情報に変換する 1 つまたは一連のステップです。処理内容はオブジェクトの種類によって異なりますが、データを情報に変換する処理の一部として必ず実行されます。

Analysis Services オブジェクトを処理するには、Process コマンドを使用します。Process コマンドでは、Analysis Services インスタンスの以下のオブジェクトを処理できます。

  • キューブ
  • データベース
  • ディメンション
  • メジャー グループ
  • マイニング モデル
  • マイニング構造
  • パーティション

Process コマンドには、オブジェクトの処理を制御するために設定できるさまざまなプロパティが用意されています。Process コマンドには、行う処理の程度、処理対象のオブジェクト、不一致バインドを使用するかどうか、エラー処理の方法、および書き戻しテーブルの管理方法を制御するプロパティがあります。

処理オプションの指定

Process コマンドの Type プロパティでは、オブジェクトの処理時に使用する処理オプションを指定します。処理オプションの詳細については、「処理オプションと設定」を参照してください。

次の表は、Type プロパティの定数と、各定数を使用して処理できるさまざまなオブジェクトの一覧を示しています。

Type の値 適用されるオブジェクト

ProcessFull

キューブ、データベース、ディメンション、メジャー グループ、マイニング モデル、マイニング構造、パーティション

ProcessAdd

ディメンション、パーティション

ProcessUpdate

ディメンション

ProcessIndexes

ディメンション、キューブ、メジャー グループ、パーティション

ProcessData

ディメンション、キューブ、メジャー グループ、パーティション

ProcessDefault

キューブ、データベース、ディメンション、メジャー グループ、マイニング モデル、マイニング構造、パーティション

ProcessClear

キューブ、データベース、ディメンション、メジャー グループ、マイニング モデル、マイニング構造、パーティション

ProcessStructure

キューブ、マイニング構造

ProcessClearStructureOnly

マイニング構造

ProcessScriptCache

キューブ

Analysis Services オブジェクトの処理の詳細については、「Analysis Services での処理」を参照してください。

処理対象のオブジェクトの指定

Process コマンドの Object プロパティには、処理対象のオブジェクトのオブジェクト識別子が含まれます。Process コマンドで指定できるオブジェクトは 1 つだけですが、1 つのオブジェクトを処理すると、その子オブジェクトも処理されます。たとえば、キューブ内のメジャー グループを処理すると、そのメジャー グループのすべてのパーティションが処理されます。また、データベースを処理すると、キューブ、ディメンション、およびマイニング構造など、そのデータベースに含まれるすべてのオブジェクトが処理されます。

Process コマンドの ProcessAffectedObjects 属性を true に設定すると、指定されたオブジェクトを処理することによって影響を受ける関連オブジェクトもすべて処理されます。たとえば、Process コマンドの ProcessUpdate 処理オプションを使用してディメンションを増分更新する場合、ProcessAffectedObjects が true に設定されていれば、メンバの追加または削除によって無効になる集計が含まれるパーティションもすべて Analysis Services によって処理されます。この場合、1 つの Process コマンドで Analysis Services インスタンスの複数のオブジェクトを処理することができますが、Process コマンドで指定された単一のオブジェクトの他に処理する必要があるオブジェクトは、Analysis Services によって決定されます。

しかし、Batch コマンドの中で複数の Process コマンドを使用することによって、ディメンションなどの複数のオブジェクトを同時に処理することもできます。バッチ操作では、ProcessAffectedObjects 属性を使用する場合よりも詳細なレベルで、Analysis Services インスタンスのオブジェクトの直列または並列処理を制御することができ、大規模な Analysis Services データベースの処理方法をチューニングすることができます。バッチ操作の実行の詳細については、「バッチ操作の実行 (XMLA)」を参照してください。

不一致バインドの指定

Batch コマンドに含まれない Process コマンドの場合、処理対象のオブジェクトに対する Process コマンドの BindingsDataSource、および DataSourceView プロパティに、オプションで不一致バインドを指定できます。不一致バインドは、バインドが Process コマンドの実行時のみに存在する、データ ソース、データ ソース ビュー、および他のオブジェクトへの参照であり、処理中のオブジェクトに関連付けられている既存のバインドを上書きします。不一致バインドが指定されていない場合、処理対象のオブジェクトに現在関連付けられているバインドが使用されます。

不一致バインドは以下の状況で使用されます。

  • パーティションの増分更新を行う。行が 2 回カウントされないように、代替のファクト テーブルか、既存のファクト テーブルに対するフィルタを指定する必要があります。
  • Microsoft SQL Server 2005 Integration Services (SSIS) のデータ フロー タスクを使用して、ディメンション、マイニング モデル、またはパーティションの処理中にデータを提供する。

不一致バインドは、Analysis Services Scripting Language (ASSL) の一部として記述されます。ASSL での不一致バインドの詳細については、「データ ソースとバインド (ASSL)」を参照してください。

パーティションの増分更新

通常、既に処理されているパーティションを増分更新する場合は、不一致バインドが必要です。これは、パーティションに対して指定されているバインドが、既にパーティション内で集計されているファクト テーブル データを参照するためです。既に処理されているパーティションを Process コマンドを使用して増分更新する場合、Analysis Services は以下のアクションを実行します。

  • 増分更新を行うパーティションと同じ構造の一時パーティションを作成します。
  • Process コマンドで指定された不一致バインドを使用して、一時パーティションを処理します。
  • 一時パーティションを、選択された既存のパーティションにマージします。

XML for Analysis (XMLA) を使用したパーティションのマージの詳細については、「パーティションのマージ (XMLA)」を参照してください。

処理エラーの処理

Process コマンドの ErrorConfiguration プロパティでは、オブジェクトの処理時に発生したエラーの処理方法を指定できます。たとえば、ディメンションの処理時に、Analysis Services がキー属性のキー列で重複した値を検出したとします。属性キーは一意でなければならないため、Analysis Services は重複したレコードを破棄します。Analysis Services は、ErrorConfigurationKeyDuplicate プロパティに基づいて、以下のいずれかの処理を行います。

  • エラーを無視し、ディメンションの処理を続行する。
  • Analysis Services が重複したキーを検出したことを示すメッセージを返し、処理を続行する。

ErrorConfiguration によって Process コマンドの実行時のオプションが指定される同様の状況は、他にも多くあります。

書き戻しテーブルの管理

Process コマンドで、まだ完全に処理されていない書き込み許可パーティション、または完全に処理されていない書き込み許可パーティションに対するキューブやメジャー グループが見つかった場合、そのパーティションには書き戻しテーブルがまだ存在していない可能性があります。Process コマンドの WritebackTableCreation プロパティは、Analysis Services が書き戻しテーブルを作成するかどうかを決定します。

説明

次の例は、Analysis Services の Adventure Works DW サンプル データベースを完全に処理します。

コード

<Process xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
  <Object>
    <DatabaseID>Adventure Works DW</DatabaseID>
  </Object>
  <Type>ProcessFull</Type>
  <WriteBackTableCreation>UseExisting</WriteBackTableCreation>
</Process>

説明

次の例は、Analysis Services の Adventure Works DW サンプル データベースの Adventure Works DW キューブの Internet Sales メジャー グループに含まれる、Internet_Sales_2004 パーティションを増分更新します。Process コマンドは、2004 年 12 月 31 日 より後の注文日に関する集計をパーティションに追加しています。これは、Process コマンドの Bindings プロパティに不一致クエリ バインドを使用して、パーティションに追加する集計を生成する基になるファクト テーブルの行を取得することにより行っています。

コード

<Process ProcessAffectedObjects="true" xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
  <Object>
    <DatabaseID>Adventure Works DW</DatabaseID>
    <CubeID>Adventure Works DW</CubeID>
    <MeasureGroupID>Fact Internet Sales 1</MeasureGroupID>
    <PartitionID>Internet_Sales_2004</PartitionID>
  </Object>
  <Bindings>
    <Binding>
      <DatabaseID>Adventure Works DW</DatabaseID>
      <CubeID>Adventure Works DW</CubeID>
      <MeasureGroupID>Fact Internet Sales 1</MeasureGroupID>
      <PartitionID>Internet_Sales_2004</PartitionID>
      <Source xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="QueryBinding">
        <DataSourceID>Adventure Works DW</DataSourceID>
        <QueryDefinition>
          SELECT
            [dbo].[FactInternetSales].[ProductKey],
            [dbo].[FactInternetSales].[OrderDateKey],
            [dbo].[FactInternetSales].[DueDateKey],
            [dbo].[FactInternetSales].[ShipDateKey], 
            [dbo].[FactInternetSales].[CustomerKey], 
            [dbo].[FactInternetSales].[PromotionKey],
            [dbo].[FactInternetSales].[CurrencyKey],
            [dbo].[FactInternetSales].[SalesTerritoryKey],
            [dbo].[FactInternetSales].[SalesOrderNumber],
            [dbo].[FactInternetSales].[SalesOrderLineNumber],
            [dbo].[FactInternetSales].[RevisionNumber],
            [dbo].[FactInternetSales].[OrderQuantity],
            [dbo].[FactInternetSales].[UnitPrice],
            [dbo].[FactInternetSales].[ExtendedAmount],
            [dbo].[FactInternetSales].[UnitPriceDiscountPct],
            [dbo].[FactInternetSales].[DiscountAmount],
            [dbo].[FactInternetSales].[ProductStandardCost],
            [dbo].[FactInternetSales].[TotalProductCost],
            [dbo].[FactInternetSales].[SalesAmount],
            [dbo].[FactInternetSales].[TaxAmt],
            [dbo].[FactInternetSales].[Freight],
            [dbo].[FactInternetSales].[CarrierTrackingNumber],
            [dbo].[FactInternetSales].[CustomerPONumber]
          FROM [dbo].[FactInternetSales]
          WHERE OrderDateKey &gt; '1280'
        </QueryDefinition>
      </Source>
    </Binding>
  </Bindings>
  <Type>ProcessAdd</Type>
  <WriteBackTableCreation>UseExisting</WriteBackTableCreation>
</Process>