Analysis Services を使用すると、 DirectQuery モードを使用してリレーショナル データベース システムから直接データと集計を取得することで、データを取得し、表形式モデルからレポートを作成できます。 このトピックでは、メモリ内にのみ存在する標準の表形式モデルと、リレーショナル データ ソースに対してクエリを実行できる表形式モデルの違いについて説明し、DirectQuery モードで使用するモデルを作成およびデプロイする方法について説明します。
このトピックのセクション:
DirectQuery モードの利点
既定では、テーブル モデルはメモリ内キャッシュを使用してデータの格納とクエリを行います。 表形式モデルではメモリ内に存在するデータが使用されるため、複雑なクエリでも非常に高速になる可能性があります。 ただし、キャッシュされたデータを使用する場合には、いくつかの欠点があります。
ソース データが変更された場合、データは更新されません。 データの更新を取得するには、モデルを処理する必要があります。
モデルをホストするコンピューターをオフにすると、キャッシュはディスクに保存され、モデルを読み込むか、PowerPivot ファイルを開いたときに再度開く必要があります。 保存操作と読み込み操作には時間がかかる場合があります。
これに対し、DirectQuery モードでは、SQL Server データベースに格納されているデータが使用されます。 一般に、モデルの作成中にデータのすべてまたは小さなサンプルをキャッシュにインポートし、モデルをデプロイするときに、キャッシュされたデータではなく、モデルに対するクエリのデータ ソースを SQL Server にすることを指定します。 データに対する DAX クエリは、Analysis Services によって、指定されたリレーショナル データ ソースに対して同等の SQL ステートメントに変換されます。
DirectQuery モードを使用してモデルをデプロイするには、多くの利点があります。
Analysis Services サーバーのメモリに収まらない大きすぎるデータ セットに対してモデルを作成できます。
データは -date up-toであることが保証されており、データの個別のコピーを維持する必要がある追加の管理オーバーヘッドはありません。 基になるソース データに対する変更は、データ モデルに対するクエリにすぐに反映できます。
DirectQuery では、xVelocity メモリ最適化列インデックスによって提供されるなど、プロバイダー側のクエリ アクセラレーションを利用できます。
バックエンド データベースによって適用されるセキュリティは、行レベルのセキュリティを使用して確実に適用されます。 これに対し、キャッシュされたデータを使用している場合は、サーバーとまったく同じようにキャッシュをセキュリティで保護することが困難な場合があります。
モデルに複数のクエリを必要とする複雑な数式が含まれている場合、Analysis Services は最適化を実行して、バックエンド データベースに対して実行されるクエリのクエリ プランが可能な限り効率的になるようにすることができます。
DirectQuery モードで使用するモデルの作成
表形式モデルは、モデル デザイナー SQL Server Data Tools (SSDT) を使用して作成されます。 モデル デザイナーは、すべてのモデルをメモリ内に作成します。つまり、モデリングを行うときに、データが大きすぎてメモリに収まらない場合は、ワークスペース データベースで使用されるキャッシュにデータのサブセットのみをインポートする必要があります。
DirectQuery モードに切り替える準備ができたら、DirectQuery モードを有効にするプロパティを変更できます。 詳細については、「 DirectQuery デザイン モードの有効化 (SSAS テーブル)」を参照してください。
これを行うと、モデル デザイナーは、キャッシュされたデータを引き続き操作できるハイブリッド モードで実行するようにワークスペース データベースを自動的に構成します。 モデル デザイナーは、DirectQuery モードと互換性のないモデル内の機能についても通知します。 次の一覧は、留意すべき主な要件をまとめたものです。
データ ソース: DirectQuery モデルでは、単一の SQL Server データ ソースからのデータのみを使用できます。 モデルに対して DirectQuery モードが有効になっている場合、コピー/貼り付け操作によって追加されたテーブルを含め、モデル デザイナーで他の種類のデータを使用することはできません。 その他のインポート オプションはすべて無効です。 クエリに含まれるテーブルは、SQL Server データ ソースの一部である必要があります。 詳細については、「 DirectQuery モデルのデータ ソース」を参照してください。
計算列のサポート: DirectQuery モデルでは、計算列はサポートされていません。 ただし、データ セットに対して動作するメジャーと KPI を作成できます。 詳細については、 検証 に関するセクションを参照してください。
DAX 関数の限定的な使用: 一部の DAX 関数は DirectQuery モードでは使用できないため、他の関数に置き換えるか、データ ソースの派生列を使用して値を作成する必要があります。 モデル デザイナーは、DirectQuery モードと互換性のない数式を作成するときに発生するエラーに対して、デザイン時の検証を提供します。 詳細については、以下のセクションを参照してください。 検証。
数式の互換性: 特定の既知のケースでは、同じ数式によって、リレーショナル データ ストアのみを使用する DirectQuery モデルと比較して、キャッシュされたモデルまたはハイブリッド モデルで異なる結果が返される場合があります。 これらの違いは、xVelocity インメモリ分析 (VertiPaq) エンジンと SQL Server のセマンティックの違いの結果です。 これらの違いの詳細については、「 数式の互換性」セクションを参照してください。
安全: モデルのデプロイ方法に応じて、さまざまな方法を使用してモデルをセキュリティで保護できます。 表形式モデルのキャッシュ されたデータは、Analysis Services インスタンスのセキュリティ モデルを使用してセキュリティで保護されます。 DirectQuery モデルはロールを使用してセキュリティで保護できますが、リレーショナル データ ストアで定義されているセキュリティを使用することもできます。 モデルは、DirectQuery 専用モデルに基づいてレポートを開くユーザーが、SQL Server のアクセス許可で許可されているデータのみを表示できるように構成できます。 セキュリティの詳細については、このセクションを参照してください。
クライアントの制限: モデルが DirectQuery モードの場合、DAX を使用してのみクエリを実行できます。 MDX を使用してクエリを作成することはできません。 つまり、Excel は MDX を使用するため、Excel ピボット クライアントを使用できません。
ただし、XMLA Execute ステートメントの一部として DAX テーブル クエリを使用する場合は、SQL Server Management Studio で DirectQuery モデルに対してクエリを作成できます。詳細については、「[DAX クエリ構文リファレンス](/dax/dax-syntax-reference」を参照してください。
すべての設計の問題を解決し、モデルをテストしたら、デプロイの準備が整います。 この時点で、モデルに対するクエリに応答するための推奨される方法を設定できます。 ユーザーにキャッシュへのアクセス権を付与するか、常にリレーショナル データ ソースのみを使用しますか?
ハイブリッド モードでモデルをデプロイする場合、キャッシュは引き続き使用でき、クエリに使用できます。 ハイブリッド モードには、次のような多くのオプションがあります。
キャッシュとリレーショナル データ ソースの両方を使用できる場合は、優先接続方法を設定できますが、最終的にはクライアントは DirectQueryMode 接続文字列プロパティを使用して、使用するソースを制御します。
また、DirectQuery モードに使用されるプライマリ パーティションが処理されず、常にリレーショナル ソースを参照する必要がある方法で、キャッシュ上のパーティションを構成することもできます。 パーティションを使用してモデルの設計とレポートエクスペリエンスを最適化する方法は多数あります。 詳細については、「 パーティションと DirectQuery モード (SSAS テーブル)」を参照してください。
モデルがデプロイされたら、推奨される接続方法を変更できます。 たとえば、テストにハイブリッド モードを使用し、モデルを使用するレポートまたはクエリを徹底的にテストした後にのみ、モデルを DirectQuery のみの モードに切り替えることができます。 詳細については、「 DirectQuery の優先接続方法を設定または変更する」を参照してください。
DirectQuery モデルのデータ ソース
DirectQuery モードを有効にするようにデザイン環境を変更するとすぐに、ワークスペース データベースのデータ ソースが検証され、それらが単一の SQL Server データ ソースから取得されることが確認されます。 コピー貼り付けされたデータを含む他のソースからのデータは、DirectQuery モデルでは許可されません。
DirectQuery モードでモデルを使用する場合は、レポートに必要なすべてのデータが指定された SQL Server データベースに格納されていることを確認する必要があります。 モデリングに必要なデータがそのソースで使用できない場合は、Integration Services またはその他のデータ ウェアハウス ツールを使用して、DirectQuery データ ソースとして機能する SQL Server データベースにデータをインポートすることを検討してください。
DirectQuery モードの検証と設計の制限
DirectQuery モードで使用するモデルを作成するときは、最初にデータの一部をキャッシュに読み込む必要があります。 最終的に使用するデータが大きすぎてメモリに収まらない場合は、テーブルのインポート ウィザードの [プレビュー] および [フィルター] オプションを使用してデータのサブセットを選択するか、SQL スクリプトを記述して目的のデータを取得できます。
警告
DirectQuery モードでは計算列の使用がサポートされていないため、他の操作を結合または実行する列がある場合は、事前に計画を立て、データ インポート クエリまたはスクリプトの一部として列定義を作成する必要があります。
検証エラーを表示して解決するには、SQL Server Data Tools で エラー一覧 を開きます。 DirectQuery モードの使用を妨げる重大なエラーは、[ エラー ] タブに表示されます。DirectQuery モードに変更する前に、これらのエラーを修正する必要があります。 通常、解決が困難な検証エラーは、DirectQuery モードでサポートされていない数式に関連しています。 数式と計算列に関連するエラーの概要については、「数式の 互換性」セクションを参照してください。
次の一覧では、DirectQuery アクセス用のモデルを作成するときに留意する必要があるその他の考慮事項について説明します。
DirectQuery のみのモードの場合、レポートの結果は、結果を表示しているユーザーのセキュリティ コンテキストによって異なる場合があります。 ユーザーが期待される結果を得られるように、異なる資格情報でモデルをテストする必要があります。
ハイブリッド モードで動作するようにモデルを構成し、SQL Server のキャッシュまたはデータを使用できるようにする場合は、接続文字列で指定されたモードに応じて、各ソースに接続しているクライアントで異なる結果が表示される可能性があることに注意する必要があります。 レポート ユーザーに SQL Server からのデータのみが表示されるようにする必要がある場合は、キャッシュをクリアするか、モデルを DirectQueryOnly に変更する必要があります。
DirectQuery モデルの数式の互換性
一部のモデルには、DirectQuery モードでサポートされていない数式が含まれている場合があり、検証エラーを防ぐためにモデルを再設計する必要があります。 DirectQuery モードでサポートされる数式に関する制限事項は次のとおりです。
計算列は、DirectQuery モードが有効になっている表形式モデルではサポートされていません。ハイブリッド モデルでもサポートされていません。 モデルの計算列が必要な場合は、インポート定義で Transact-SQL を使用して、それらを派生列に変換することを検討してください。
DirectQuery モデルでは、メジャーで使用する DAX 数式がサポートされており、これらの数式はリレーショナル データ ストアに対してセット ベースの操作に変換されます。 暗黙的なメジャーを使用して作成するすべてのメジャーがサポートされます。
すべての関数がサポートされているわけではありません。 Analysis Services では、DirectQuery モデルのクエリを実行するときに、すべての DAX 数式とメジャー定義が SQL ステートメントに変換されるため、Transact-SQL に変換できない要素を含む数式では、モデルの検証エラーがトリガーされます。 たとえば、タイム インテリジェンス関数はサポートされていません。 サポートされている関数であっても、統計関数など、動作が異なる場合があります。 互換性の問題の完全な一覧については、「 DirectQuery モードでの数式の互換性」を参照してください。
モデル内の一部の数式は、モデルを DirectQuery モードに切り替えたときに検証できますが、キャッシュとリレーショナル データ ストアに対して実行すると異なる結果が返されることがあります。 これは、キャッシュに対する計算では、Excel の動作をエミュレートするための多くの機能を含む xVelocity インメモリ分析 (VertiPaq) エンジンのセマンティクスが使用されるのに対し、リレーショナル データ ストアに格納されているデータに対するクエリでは必ずしも SQL Server のセマンティクスが使用されるためです。 モデルをリアルタイムにデプロイするときに異なる結果を返す可能性がある DAX 関数の一覧については、「 DirectQuery モードでの数式の互換性」を参照してください。
DirectQuery モデルへの接続
クエリ言語として MDX を使用するクライアントは、DirectQuery モードを使用するモデルに接続できません。 たとえば、DirectQuery モデルに対して MDX クエリを作成しようとすると、キューブが見つからないか、処理されていないことを示すエラーが表示されます。 Power View、DAX 数式、または XMLA クエリを使用して、DirectQuery モデルに対するクエリを作成できます。 テーブル モデルに対してアドホック クエリを実行する方法の詳細については、「 テーブル モデル データ アクセス」を参照してください。
ハイブリッド モデルを使用している場合は、接続文字列プロパティ DirectQueryMode を指定することで、ユーザーがキャッシュに接続するか、DirectQuery データを使用するかを指定できます。
DirectQuery モードでのセキュリティ
モデルの作成中に、ソース データの取得に使用するアクセス許可を指定します。 これは、多くの場合、独自の資格情報、または開発に使用されるアカウントになります。 ただし、DirectQuery モードを使用するようにモデルを切り替えると、セキュリティ コンテキストはより複雑になります。
ユーザーがリレーショナル データ ストア内のデータに必要なレベルのアクセス権を持っているかどうかを検討します。
同じモデルまたはレポートを表示するユーザーには、ユーザーのセキュリティ コンテキストに応じて異なるデータが表示される場合があります。
モデル キャッシュが保持されている場合、キャッシュは Analysis Services セキュリティ モデル (ロール) を使用してセキュリティで保護されます。 キャッシュには、モデル デザイナーが表示する権限はありますが、ユーザーには表示されないデータが含まれている場合があります。 モデルデザイナーとレポート デザイナーは、キャッシュをクリアするか、ロールを介してアクセスを制御してこのデータをセキュリティで保護する必要があります。
キャッシュからのクエリに応答するモデルでは、データ ソースに接続するときに現在のユーザーを偽装することはできません。 データ ソースに接続するときに現在のユーザーを偽装する場合は、DirectQuery モードを使用する必要があります。
レポート モデルにセキュリティが必要な場合は、Analysis Services ロールを使用するか、データ ソースに対して行レベルのアクセス許可を設定するかの 2 つのオプションがあります。 リレーショナル データ ソースのセキュリティは、テーブルへのアクセスを制御するために使用され、列レベルのセキュリティはサポートされていません。 そのため、ある地域のユーザーに異なる地域の売上高を表示する権限がない場合、Sales テーブルに基づくメジャーを含むレポートは空白またはエラーを返します。
偽装設定プロパティは、DirectQuery のみを使用してモデルに接続する場合、または DirectQuery を使用してクエリに応答するハイブリッド モデルに対して、DirectQuery を使用して使用する資格情報を指定します。 プロパティには、次の値があります。
デフォルト
インポート ウィザードで指定された資格情報を使用して、データ ソースに接続します。 特定の Windows ユーザーまたはサービス アカウントを指定できます。
ImpersonateCurrentUser
現在のユーザーの資格情報を使用してデータ ソースに接続します。
これらのプロパティを設定する方法については、「 DirectQuery 展開シナリオ (SSAS 表形式)」を参照してください。
DirectQuery プロパティ
次の表に、DirectQuery を有効にし、モデルに対するクエリに使用されるデータソースを制御するために、SQL Server Data Tools および SQL Server Management Studio で設定できるプロパティの一覧を示します。
プロパティ名 | 説明 |
---|---|
DirectQueryMode プロパティ | このプロパティを使用すると、モデル デザイナーで DirectQuery モードを使用できます。 他の DirectQuery プロパティを変更するには、このプロパティを On に設定する必要があります。詳細については、「 DirectQuery デザイン モードの有効化 (SSAS テーブル)」を参照してください。 |
QueryMode プロパティ | このプロパティは、DirectQuery モデルの既定のクエリ メソッドを指定します。このプロパティは、モデルを配置するときにモデル デザイナーで設定しますが、後でオーバーライドできます。 プロパティには、次の値があります。 DirectQuery - この設定では、モデルに対するすべてのクエリでリレーショナル データ ソースのみを使用するように指定します。 メモリ内の DirectQuery - この設定では、クライアントからの接続文字列で特に指定されていない限り、既定でリレーショナル ソースを使用してクエリに応答する必要があることを指定します。 メモリ内 - この設定では、キャッシュのみを使用してクエリに応答する必要があることを指定します。 DirectQuery を使用したIn-Memory - この設定は、既定で指定します。 クライアントからの接続文字列で特に指定されていない限り、キャッシュを使用してクエリに応答する必要があります。 詳細については、「 DirectQuery の優先接続方法を設定または変更する」を参照してください。 |
DirectQueryMode プロパティ | モデルがデプロイされたら、SQL Server Management Studio でこのプロパティを変更することで、DirectQuery モデルの優先クエリ データ ソースを変更できます。 前のプロパティと同様に、このプロパティはモデルの既定のデータ ソースを指定し、次の値を持ちます。 InMemory: クエリはキャッシュのみを使用できます。 DirectQuerywithInMemory: クライアントからの接続文字列で特に指定されていない限り、クエリでは既定でリレーショナル データ ソースが使用されます。 InMemorywithDirectQuery: クライアントからの接続文字列で特に指定されていない限り、クエリは既定でキャッシュを使用します。 (DirectQuery: クエリではリレーショナル データ ソースのみが使用されます。 詳細については、「 DirectQuery の優先接続方法を設定または変更する」を参照してください。 |
なりすまし設定プロパティ | このプロパティは、クエリ時に SQL Server データ ソースに接続するために使用される資格情報を定義します。 このプロパティはモデル デザイナーで設定できます。この値は、モデルのデプロイ後に後で変更できます。 これらの資格情報は、リレーショナル データ ストアに対するクエリへの応答にのみ使用されることに注意してください。これらは、ハイブリッド モデルのキャッシュの処理に使用される資格情報と同じではありません。 モデルがメモリ内でのみ使用されている場合、偽装は使用できません。 ImpersonateCurrentUser 設定は、モデルが DirectQuery モードを使用していない限り無効です。 |
さらに、モデルにパーティションが含まれている場合は、DirectQuery モードのクエリのソースとして使用するパーティションを 1 つ選択する必要があります。 詳細については、「 パーティションと DirectQuery モード (SSAS テーブル)」を参照してください。
関連トピックとタスク
トピック | 説明 |
---|---|
パーティションと DirectQuery モード (SSAS 表形式) | DirectQuery モード用に構成されたモデルでパーティションを使用する方法について説明します。 |
DirectQuery モードでの DAX 数式の互換性 | DirectQuery モード用に構成されたモデルで使用できる数式の制限と互換性の要件について説明します。 |
DirectQuery デザイン モードを有効にする (SSAS 表形式) | DirectQuery モードの使用をサポートするようにデザイン時環境を変更する方法について説明します |
DirectQuery パーティションの変更 (SSAS テーブル) | DirectQuery パーティションを変更する方法について説明します。 |
DirectQuery の優先接続方法を設定または変更する | DirectQuery 用に構成されたモデルの接続方法を設定または変更する方法について説明します。 |
DirectQuery 配置シナリオ (SSAS 表形式) | DirectQuery の展開シナリオについて説明します。 |
テーブル モデル データベースの In-Memory または DirectQuery アクセスを構成する | DirectQuery の構成について |
Analysis Services キャッシュをクリアする | 表形式モデルのキャッシュをクリアする |
こちらもご覧ください
パーティション (SSAS テーブル)
テーブル モデル プロジェクト (SSAS テーブル)
Excel で分析 (SSAS 表形式)