テーブル モデルでの DirectQuery モードDirectQuery mode in tabular models

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

この記事では、1200以上の互換性レベルで Analysis Services 表形式モデルの DirectQuery モード について説明します。This article describes DirectQuery mode for Analysis Services tabular models at the 1200 and higher compatibility levels. DirectQuery モードは、Visual Studio でデザインするモデルに対して有効にすることができます。また、既に配置されているテーブルモデルに対しては、SQL Server Management Studio (SSMS) を使用して DirectQuery モードに変更することもできます。DirectQuery mode can be enabled for models you're designing in Visual Studio, or for tabular models that have already been deployed, you can change to DirectQuery mode by using SQL Server Management Studio (SSMS). DirectQuery モードを選択する前に、利点と制限事項について理解しておくことが重要です。Before choosing DirectQuery mode, it's important to understand both the benefits and limitations.


既定では、テーブル モデルでは、インメモリ キャッシュを使用してデータを格納およびデータにクエリを実行します。By default, tabular models use an in-memory cache to store and query data. テーブルモデルでメモリ内に存在するデータをクエリする場合、複雑なクエリでも非常に高速に実行できます。When tabular models query data residing in-memory, even complex queries can be very fast. ただし、キャッシュされたデータの使用にはいくつかの制限があります。たとえば、非常に大きなデータセットが使用可能なメモリを超える可能性があり、メモリ内のモデルデータの処理 (更新) には、必要に応じて大量の使用可能なリソースが必要になる場合があります。However, there are some limitations to using cached data, for example, very large data sets can exceed available memory and processing (refresh) of in-memory model data can require excessive amounts of available resources if needed frequently.

DirectQuery は、クエリの実行をより効率的にする RDBMS 機能も利用してこれらの制限を解決します。DirectQuery overcomes these limitations while also leveraging RDBMS features making query execution more efficient. DirectQuery では次のようになります。With DirectQuery:

  • データは最新です。Data is up-to-date. データは常にデータソースで照会されるため、クライアントレポートアプリケーションは常に最新のデータを取得します。Because data is always queried at the data source, client reporting applications are always getting the latest data.

  • (インメモリキャッシュ内の) データのコピーを個別に保持する必要があるという追加の管理オーバーヘッドはありません。There is no extra management overhead of having to maintain a separate copy of the data (in the in-memory cache). モデルデータの処理 (更新) は必要ありません。No processing (refresh) of model data is required. 基になるソース データに対する変更は、データ モデルに対するクエリに即時に反映できます。Changes to the underlying source data can be immediately reflected in queries against the data model.

  • データセットは、Analysis Services server リソースのメモリ容量よりも大きくなる場合があります。Datasets can be larger than the memory capacity of an Analysis Services server resource.

  • DirectQuery では、メモリ最適化列インデックスによって提供されるような、プロバイダー側のクエリアクセラレーションを利用できます。DirectQuery can take advantage of provider-side query acceleration, such as that provided by memory-optimized column indexes.

  • データベースの行レベルのセキュリティ機能を使用して、バックエンドソースデータベースによってセキュリティを適用できます (または、DAX を使用してモデルに定義されている行レベルのセキュリティ規則を使用することもできます)。Security can be enforced by the back-end source database by using row-level security features from the database (alternatively, you can use row-level security rules defined in the model by using DAX).

  • 複数のクエリを必要とする可能性のある複雑な数式がモデルに含まれる場合、Analysis Services は最適化を実行して、バックエンド データベースに対して実行されるクエリのクエリ プランができるだけ効率的になることを保証できます。If the model contains complex formulas that might require multiple queries, Analysis Services can perform optimization to ensure that the query plan for the query executed against the back-end database will be as efficient as possible.


DirectQuery モードの表形式モデルにはいくつかの制限があります。Tabular models in DirectQuery mode have some limitations. モードを切り替える前に、バックエンド サーバーでクエリを実行する利点が、機能の低下より大きいかどうかを判断する必要があります。Before switching modes, it's important to determine whether the advantages of query execution on the backend server outweigh any reduction in functionality. Visual Studio で既存のモデルのモードを変更すると、テーブルモデルデザイナーによって、モデル内の DirectQuery モードと互換性のないすべての機能が通知されます。If you change the mode of an existing model in Visual Studio, Tabular model designer will notify you of any features in your model that are incompatible with DirectQuery mode. 次の制限事項に注意してください。Keep the following limitations in mind:

機能Feature RestrictionRestriction
データ ソースData sources DirectQuery モデルでは、Azure SQL Database、Azure Synapse Analytics、SQL Server、Oracle、Teradata の各種類の1つのリレーショナルデータベースのデータのみを使用できます。DirectQuery models can only use data from a single relational database of the following types: Azure SQL Database, Azure Synapse Analytics, SQL Server, Oracle, and Teradata.
SQL ストアド プロシージャSQL stored procedures DirectQuery モデルの場合、ストアドプロシージャを SQL ステートメントで指定してテーブルを定義することはできません。For DirectQuery models, stored procedures cannot be specified in a SQL statement to define tables.
計算テーブルCalculated tables DirectQuery モデルでは、計算テーブルはサポートされませんが、計算列はサポートされます。Calculated tables are not supported in DirectQuery models, but calculated columns are. 計算テーブルを含むテーブル モデルを変換しようとすると、モデルは貼り付けられたデータを含むことができないというエラーが発生します。If you try to convert a tabular model that contains a calculated table, an error will occur stating that the model cannot contain pasted data.
クエリの制限Query limits 既定の行制限は100万行です。Default row limit is one million rows. この制限は、 MaxIntermediateRowSizeを指定することによって増やすことができます。This limit can be increases by specifying MaxIntermediateRowSize. 詳細については、「 DAX のプロパティ」を参照してください。To learn more, see DAX Properties.
DAX の数式DAX formulas DirectQuery モードでテーブルモデルに対してクエリを実行する場合、Analysis Services は、DAX の数式とメジャーの定義を SQL ステートメントに変換します。When querying a tabular model in DirectQuery mode, Analysis Services converts DAX formulas and measure definitions into SQL statements. SQL 構文に変換できない要素を含む DAX の数式がある場合、モデルで検証エラーが返されます。DAX formulas containing elements that cannot be converted into SQL syntax will return validation errors on the model.

この制限は、ほとんどの場合、特定の DAX テーブル関数に限定されます。This restriction is mostly limited to certain DAX table functions. メジャーの場合、DAX の数式はリレーショナル データ ストアに対するセットベースの操作に変換されます。For measures, DAX formulas are converted to set-based operations against the relational data store. これは、暗黙的に作成されるすべてのメジャーがサポートされることを意味します。This means that all measures created implicitly are supported.

検証エラーが発生したときは、数式を書き換えるか、別の関数に置き換えるか、データ ソースで派生列を使用することによって回避する必要があります。When a validation error occurs, you'll need to re-write the formula, substituting a different function, or workaround it by using derived columns in the data source. 互換性のない関数を含む数式がテーブルモデルに含まれている場合は、デザイナーで DirectQuery モードに切り替えるとレポートされます。If a tabular model includes formulas containing incompatible functions, it will be reported when you switch to DirectQuery mode in the designer.

注: モデル内の一部の数式は、モデルを DirectQuery モードに切り替えたときに検証される場合がありますが、キャッシュとリレーショナルデータストアに対して実行すると、異なる結果が返されます。Note: Some formulas in the model might validate when you switch the model to DirectQuery mode, but return different results when executed against the cache vs. the relational data store. これは、キャッシュに対する計算では、メモリ内分析エンジンのセマンティクスが使用されるためです。このエンジンには、Excel の動作をエミュレートするための機能が含まれていますが、リレーショナルデータソースに格納されているデータに対するクエリでは、SQL のセマンティクスが使用されます。This is because calculations against the cache use the semantics of the in-memory analytics engine, which contains features meant to emulate the behavior of Excel, whereas queries against data stored in the relational data source use the semantics of SQL.

数式の整合性Formula consistency 特定のケースでは、同じ数式で返される結果が、キャッシュ モデルと、リレーショナル データ ストアのみを使用する DirectQuery モデルとで異なる場合があります。In certain cases, the same formula can return different results in a cached model compared to a DirectQuery model that uses only the relational data store. これらの違いは、インメモリ分析エンジンとデータソースのセマンティックの違いによるものです。These differences are a consequence of the semantic differences between the in-memory analytics engine and the data source.

MDX の制限事項MDX limitations 相対的なオブジェクト名はありません。No relative object names. すべてのオブジェクト名を完全修飾する必要があります。All object names must be fully qualified.

セッション スコープの MDX ステートメントは使用できません (名前付きセット、計算メンバー、計算セル、表示部分の合計、既定メンバーなど)。ただし、"WITH" 句などのクエリ スコープ構造は使用できます。No session-scope MDX statements (named sets, calculated members, calculated cells, visual totals, default members, and so forth), but you can use query-scope constructs, such as the 'WITH' clause.

MDX のサブセレクト句の異なるレベルのメンバーとの組は使用できません。No tuples with members from different levels in MDX subselect clauses.

ユーザー定義階層は使用できません。No user-defined hierarchies.

ネイティブ SQL クエリは使用できません (通常、Analysis Services は T-SQL のサブセットをサポートしますが、DirectQuery モデルについてはサポートしません)。No native SQL queries (normally, Analysis Services supports a T-SQL subset, but not for DirectQuery models).

データ ソースに接続するConnecting to a data source

Visual Studio で DirectQuery モデルをデザインする場合、データソースに接続し、モデルに含めるテーブルとフィールドを選択することは、インメモリモデルの場合とほぼ同じです。When designing a DirectQuery model in Visual Studio, connecting to a data source and selecting the tables and fields to include in your model is much the same as with in-memory models.

既に DirectQuery をオンにしていても、まだデータソースに接続していない場合は、[データの取得] (またはレガシプロバイダーのデータソースのデータインポートウィザード) を使用して、データソースへの接続、テーブルとフィールドの選択などを行うことができます。If you've already turned on DirectQuery but haven't yet connected to a data source, you can use Get Data (or Data Import Wizard for legacy provider data sources) to connect to a data source, select tables and fields, and so on. 違いは、処理を完了しても、メモリ内キャッシュにデータが実際にインポートされない点です。The difference will be when you finish, no data is actually imported to the in-memory cache.

DirectQuery のインポートの成功

[データの取得] を既に使用していても、DirectQuery モードをまだ有効にしていない場合は、メモリ内キャッシュがクリアされます。If you've already used Get Data to import data, but haven't yet turned on DirectQuery mode, when you do, the in-memory cache will be cleared.

DirectQuery モデルプロジェクトへのサンプルデータの追加Adding sample data to a DirectQuery model project

既定では、Visual Studio の表形式モデルデザイナー (SSDT) を使用して DirectQuery テーブルモデルプロジェクトをデザインする場合、モデルのワークスペースデータベースにデータは含まれません。By default, when using Tabular model designer in Visual Studio (SSDT) to design a DirectQuery tabular model project, the model's workspace database doesn't contain any data. テーブルごとに既定のパーティションが1つあり、このパーティションによってすべてのクエリがデータソースに送られます。There is one default partition for each table and this partition directs all queries to the data source. DirectQuery が初めて導入されたため、テーブルモデルデザイナーには、Partition Manager の サンプル機能としてセット が含まれています。Since DirectQuery was first introduced, Tabular model designer includes a Set as Sample feature in Partition Manager. この機能を使用すると、少量のサンプルデータをワークスペースデータベースにインポートするために使用できるテーブルにコピーパーティションを追加できます。This feature allows adding a copy partition to tables that can be used to import a small amount of sample data into the workspace database. この機能は、データソースに影響を与えることなく、モデリングの決定を検証するのに役立ちます。This feature is meant help validate modeling decisions without impacting the data source.


現在、*テーブルモデルデザイナーの*サンプルとして設定する機能はサポートされていません。Currently, the Set as Sample feature in Tabular model designer is not supported. 無視 テーブル <TableName> にサンプルパーティションが含まれていません。 SSDT でデータを使用するには、サンプルパーティションの警告を追加してくださいDisregard Table <TableName> does not contain a sample partition; to use data in SSDT please add a sample partition warnings.

DirectQuery モデルの配置Deploying DirectQuery models

DirectQuery モデルは、インポートモデルと同じように配置されます。DirectQuery models are deployed the same as import models. ただし、インポートモデルとは異なり、DirectQuery モデルに計算列や計算グループなどの計算される項目が含まれている場合は、配置後に、すべての テーブルで再 計算を実行する必要があります。However, unlike import models, if a DirectQuery model contains calculated items such as calculated columns or calculation groups, after being deployed you must perform a Process Recalc on all tables. 詳細については、「 データベース、テーブル、またはパーティションの処理」を参照してください。To learn more, see Process database, table, or partition.

関連項目See also

Visual Studio での DirectQuery モードの有効化Enable DirectQuery mode in Visual Studio
SSMS での DirectQuery モードの有効化Enable DirectQuery mode in SSMS
Directqueryモデルでのパーティションの定義directquery モードでのモデルのテスト Define partitions in DirectQuery models Test a model in DirectQuery mode
Azure Analysis Services でサポートされるデータ ソースData sources supported in Azure Analysis Services
SQL Server Analysis Services 表形式1400以降のモデルでは、データソースがサポートされています。Data sources supported in SQL Server Analysis Services tabular 1400 and higher models.