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

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

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

メリット

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

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

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

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

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

  • 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 が初めて導入されたため、テーブルモデルデザイナーには、Partition Manager の サンプル機能としてセット が含まれています。 この機能を使用すると、少量のサンプルデータをワークスペースデータベースにインポートするために使用できるテーブルにコピーパーティションを追加できます。 この機能は、データソースに影響を与えることなく、モデリングの決定を検証するのに役立ちます。

重要

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

DirectQuery モデルの配置

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

関連項目

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