テーブル モデルでの DirectQuery モード

適用対象: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

この記事では、1200 以上の互換性レベルでの Analysis Services テーブル モデルの DirectQuery モード について説明します。 DirectQuery モードは、Visual Studio で設計しているモデルに対して有効にすることも、既にデプロイされている表形式モデルの場合は、SQL Server Management Studio (SSMS) を使用して DirectQuery モードに変更することもできます。 DirectQuery モードを選択する前に、利点と制限事項の両方を理解しておくことが重要です。

メリット

既定では、テーブル モデルでは、インメモリ キャッシュを使用してデータを格納およびデータにクエリを実行します。 テーブル モデルでメモリ内のデータをクエリすると、複雑なクエリでも非常に高速に実行できます。 ただし、キャッシュ データの使用にはいくつかの制限があります。たとえば、非常に大きなデータ セットは使用可能なメモリを超える可能性があり、インメモリ モデル データの処理 (更新) が頻繁に必要な場合には、大量の使用可能リソースが必要になる場合があります。

DirectQuery は、クエリの実行をより効率的にする RDBMS 機能も利用してこれらの制限を解決します。 DirectQuery では次のようになります。

  • データは最新の状態です。 データは常にデータ ソースで照会されるため、クライアント レポート アプリケーションは常に最新のデータを取得します。

  • (メモリ内キャッシュ内の) データの個別のコピーを維持する必要があるという追加の管理オーバーヘッドはありません。 モデル データの処理 (更新) は必要ありません。 基になるソース データに対する変更は、データ モデルに対するクエリに即時に反映できます。

  • データセットは、Analysis Services サーバー リソースのメモリ容量よりも大きくなる可能性があります。

  • DirectQuery では、メモリ最適化列インデックスによって提供されるなど、プロバイダー側のクエリ アクセラレーションを利用できます。

  • バックエンド ソース データベースでは、データベースの行レベルのセキュリティ機能を使用してセキュリティを適用できます (または、DAX を使用してモデルで定義されている行レベルのセキュリティ規則を使用することもできます)。

  • 複数のクエリを必要とする可能性のある複雑な数式がモデルに含まれる場合、Analysis Services は最適化を実行して、バックエンド データベースに対して実行されるクエリのクエリ プランができるだけ効率的になることを保証できます。

制限事項

DirectQuery モードの表形式モデルには、いくつかの制限があります。 モードを切り替える前に、バックエンド サーバーでクエリを実行する利点が、機能の低下より大きいかどうかを判断する必要があります。 Visual Studio で既存のモデルのモードを変更すると、表形式モデル デザイナーによって、DirectQuery モードと互換性のないモデル内の機能が通知されます。 次の制限事項に注意してください。

機能 Restriction
データ ソース DirectQuery モデルでは、Azure SQL Database、Azure Synapse Analytics、SQL Server、Oracle、Teradata の 1 つのリレーショナル データベースからのデータのみを使用できます。
SQL ストアド プロシージャ DirectQuery モデルの場合、テーブルを定義する SQL ステートメントでストアド プロシージャを指定することはできません。
計算テーブル DirectQuery モデルでは、計算テーブルはサポートされませんが、計算列はサポートされます。 計算テーブルを含むテーブル モデルを変換しようとすると、モデルは貼り付けられたデータを含むことができないというエラーが発生します。
クエリの制限 既定の行制限は 100 万行です。 この制限は、 MaxIntermediateRowSize を指定することで増やすことができます。 詳細については、「 DAX のプロパティ」を参照してください。
DAX の数式 DirectQuery モードで表形式モデルに対してクエリを実行する場合、Analysis Services は DAX の数式とメジャー定義を SQL ステートメントに変換します。 SQL 構文に変換できない要素を含む DAX の数式がある場合、モデルで検証エラーが返されます。

この制限は、ほとんどの場合、特定の DAX テーブル関数に限定されます。 メジャーの場合、DAX の数式はリレーショナル データ ストアに対するセットベースの操作に変換されます。 これは、暗黙的に作成されるすべてのメジャーがサポートされることを意味します。

検証エラーが発生したときは、数式を書き換えるか、別の関数に置き換えるか、データ ソースで派生列を使用することによって回避する必要があります。 テーブル モデルに互換性のない関数を含む数式が含まれている場合は、デザイナーで DirectQuery モードに切り替えたときにレポートされます。

注: モデル内の一部の数式は、モデルを DirectQuery モードに切り替えたときに検証される場合がありますが、キャッシュとリレーショナル データ ストアに対して実行すると異なる結果が返されることがあります。 これは、キャッシュに対する計算では、Excel の動作をエミュレートするための機能を含むインメモリ分析エンジンのセマンティクスが使用され、リレーショナル データ ソースに格納されているデータに対するクエリでは SQL のセマンティクスが使用されるためです。

数式の整合性 特定のケースでは、同じ数式で返される結果が、キャッシュ モデルと、リレーショナル データ ストアのみを使用する DirectQuery モデルとで異なる場合があります。 これらの違いは、メモリ内分析エンジンとデータ ソースの間のセマンティックの違いの結果です。

MDX の制限事項 相対的なオブジェクト名はありません。 すべてのオブジェクト名を完全修飾する必要があります。

セッション スコープの MDX ステートメントは使用できません (名前付きセット、計算メンバー、計算セル、表示部分の合計、既定メンバーなど)。ただし、"WITH" 句などのクエリ スコープ構造は使用できます。

MDX のサブセレクト句の異なるレベルのメンバーとの組は使用できません。

ユーザー定義階層は使用できません。

ネイティブ SQL クエリは使用できません (通常、Analysis Services は T-SQL のサブセットをサポートしますが、DirectQuery モデルについてはサポートしません)。

データ ソースに接続する

Visual Studio で DirectQuery モデルを設計する場合、データ ソースに接続し、モデルに含めるテーブルとフィールドを選択することは、メモリ内モデルの場合とほぼ同じです。

DirectQuery を既に有効にしていても、まだデータ ソースに接続していない場合は、データの取得 (またはレガシ プロバイダー データ ソースの場合はデータインポート ウィザード) を使用して、データ ソースへの接続、テーブルとフィールドの選択などを行うことができます。 違いは、処理を完了しても、メモリ内キャッシュにデータが実際にインポートされない点です。

DirectQuery のインポートの成功

データの取得を既に使用してデータをインポートしているが、DirectQuery モードをまだ有効にしていない場合は、メモリ内キャッシュがクリアされます。

DirectQuery モデル プロジェクトへのサンプル データの追加

既定では、Visual Studio (SSDT) の表形式モデル デザイナーを使用して DirectQuery 表形式モデル プロジェクトを設計する場合、モデルのワークスペース データベースにはデータは含まれません。 テーブルごとに 1 つの既定のパーティションがあり、このパーティションは、すべてのクエリをデータ ソースに転送します。 DirectQuery が初めて導入されたので、テーブル モデル デザイナーには、パーティション マネージャーの サンプルとして設定 機能が含まれています。 この機能を使用すると、少量のサンプル データをワークスペース データベースにインポートするために使用できるテーブルにコピー パーティションを追加できます。 この機能は、データ ソースに影響を与えずにモデリングの決定を検証するのに役立ちます。

重要

現在、表形式モデル デザイナーの[サンプルとして設定] 機能はサポートされていません。 Table <TableName> にサンプル パーティションが含まれていません。SSDT でデータを使用するには、サンプル パーティションの警告を追加してください

DirectQuery モデルのデプロイ

DirectQuery モデルは、インポート モデルと同じようにデプロイされます。 ただし、インポート モデルとは異なり、DirectQuery モデルに計算列や計算グループなどの計算アイテムが含まれている場合は、デプロイ後にすべてのテーブルに対して プロセス再計算 を実行する必要があります。 詳細については、「 データベース、テーブル、またはパーティションを処理する」を参照してください。

こちらもご覧ください

Visual Studio での DirectQuery モードの有効化
SSMS での DirectQuery モードの有効化
DirectQuery モデルでパーティションを定義する DirectQueryモードでモデルをテストする
Azure Analysis Services でサポートされるデータ ソース
SQL Server Analysis Services表形式 1400 以降のモデルでサポートされているデータ ソース