ここでは、DirectQuery モデルでのパーティションの使用方法について説明します。 表形式モデルのパーティションに関する一般的な情報については、「 パーティション (SSAS 表形式)」を参照してください。
使用されているパーティションを変更する方法、またはパーティションに関する情報を表示する方法については、「 DirectQuery パーティションの変更 (SSAS 表形式)」を参照してください。
DirectQuery モードでのパーティションの使用
テーブルごとに、DirectQuery データ ソースとして使用する 1 つのパーティションを指定する必要があります。 複数のパーティションがある場合は、モデルを切り替えて DirectQuery モードを有効にすると、テーブル内に作成された最初のパーティションに DirectQuery パーティションのフラグが既定で設定されます。 これは、後で SQL Server Data Tools (SSDT) のパーティション マネージャーを使用して変更できます。
DirectQuery モードで 1 つのパーティションのみ許可するのはなぜでしょうか。
テーブル モデルでは、OLAP モデルの場合と同様に、テーブルのパーティションが SQL クエリによって定義されます。 パーティションの定義を作成する開発者は、パーティションが重ならないようにする必要があります。 Analysis Services では、レコードが 1 つのパーティションに属しているか、複数のパーティションに属しているかはチェックされません。
キャッシュされたテーブル モデル内のパーティションは同じように動作します。 インメモリ モデルを使用する場合は、キャッシュがアクセスされるときに、DAX 数式がパーティションごとに評価され、結果が結合されます。 一方、テーブル モデルが DirectQuery モードを使用する場合は、複数のパーティションを評価して結果を結合し、リレーショナル データ ストアに送信する SQL ステートメントに変換することは不可能です。 この操作を行うと、パフォーマンスが許容できないほど低下し、集計される結果が不正確になる可能性があります。
したがって、DirectQuery モードで応答されたクエリに対して、サーバーは DirectQuery アクセスのプライマリ パーティションとしてマークされた単一のパーティション ( DirectQuery パーティション) を使用します。 このパーティションの定義で指定された SQL クエリは、DirectQuery モードでのクエリの応答に使用できるデータの完全なセットを定義します。
パーティションを明示的に定義していない場合、エンジンは単純にリレーショナル データ ソース全体に SQL クエリを発行し、DAX 数式で指定されたセットベース操作を実行してクエリ結果を返します。
テーブルに複数のパーティションがあり、1 つのパーティションを DirectQuery パーティションとして選択した場合、既定では他のすべてのパーティションはメモリ内でのみ使用されるように自動的にマークされます。
キャッシュ モデルと DirectQuery モデルのパーティション
DirectQuery パーティションを構成するときは、パーティションの処理オプションを指定する必要があります。
DirectQuery パーティションには 2 つの処理オプションがあります。 このプロパティを設定するには、SQL Server Data Tools (SSDT)、またはSQL Server Management Studioのパーティション マネージャーを使用して、処理オプション プロパティを選択します。 次の表にこのプロパティの値を示し、接続文字列の [DirectQueryUsage] プロパティと組み合わせた場合の各値の影響について説明します。
DirectQueryUsage プロパティ | [処理オプション] プロパティ | Notes |
---|---|---|
DirectQuery | [このパーティションを処理しない] | モデルが DirectQuery のみを使用している場合、処理は必要ありません。 ハイブリッド モデルでは、DirectQuery パーティションが処理されないように構成できます。 たとえば、非常に大きなデータ セットを操作する場合に、キャッシュに結果のすべてを追加する必要がなければ、DirectQuery パーティションにテーブル内の他のパーティションに対する結果の和集合を含めて、和集合を処理しないことを指定できます。 リレーショナル ソースに対するクエリは影響を受けず、キャッシュ データに対するクエリは他のパーティションからのデータを結合します。 |
InMemory (DirectQuery あり) | [パーティションを処理できる] | モデルがハイブリッド モードを使用している場合は、メモリ内に対するクエリと DirectQuery データ ソースに対するクエリで同じパーティションを使用する必要があります。 |