SSMS での DirectQuery モードの有効化
適用対象: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium
既にデプロイされている表形式モデルのデータ アクセス プロパティを変更して DirectQuery モードを有効にすることができます。このモードでは、メモリ内に存在するキャッシュされたデータではなく、バックエンド リレーショナル データ ソースに対してクエリが実行されます。
重要
データ ストレージ モードを切り替えるには、SQL Server Management Studio (SSMS) ではなく Visual Studio の表形式モデル デザイナーを使用することをお勧めします。 Visual Studio を使用してモデル モードを変更し、その後、サーバーへのデプロイに従うと、モデルとデータベースの同期が維持されます。さらに、モデルのストレージ モードを変更すると、発生した検証エラーを確認できます。 この記事の説明に従って SSMS を使用する場合、検証エラーは報告されません。
要件
表形式モデルで DirectQuery モードを使用できるようにするのは、次の複数ステップのプロセスです。
モデルに DirectQuery モードで検証エラーが発生する可能性がある機能がないことを確認し、モデルのデータ ストレージ モードをメモリ内から DirectQuery に変更します。
機能の制限事項の一覧は、 DirectQuery モードで説明されています。
バックエンド外部データベースからデータを取得するためにデプロイされたデータベースで使用される接続文字列と資格情報を確認します。 接続は 1 つだけであること、また、設定がクエリの実行に適していることを確認します。
DirectQuery 用に特化して設計されていない表形式のデータベースには、複数の接続があることがあります。DirectQuery モードで必須となるため、接続を 1 つにする必要があります。
データの処理に最初に使用された資格情報が、データのクエリに使用されるようになりました。 DirectQuery 構成の一環として、アカウントを確認し、専用の操作用に別の資格情報を使用する場合はアカウントを変更します。
DirectQuery モードは、Analysis Services が信頼する委任の唯一のシナリオです。 ソリューションが委任を呼んで、ユーザー固有のクエリの結果を取得する場合は、バックエンド データベースへの接続に使用されているアカウントが、要求によりユーザー ID を委任する必要があります。また、ユーザー ID は、バックエンド データベースを読み取るアクセス許可を所有している必要があります。
最後の手順として、DirectQuery モードがクエリを実行して動作することを確認します。
DirectQuery モードに切り替える
オブジェクト エクスプローラーで、データベース>のプロパティ>モデル>の既定のモードを右クリックします。
モードを [ DirectQuery] に設定します。
有効な値 説明 DirectQuery クエリは、モデルに定義されているデータ ソース接続を使用して、バックエンド リレーショナル データベースに対して実行されます。
モデルへのクエリは、ネイティブ データベース クエリに変換され、データ ソースにリダイレクトします。
モデル セットを DirectQuery モードで処理すると、メタデータのみがコンパイルされ、デプロイされます。 データ自体はモデルの外部にあり、稼動しているデータ ソースのデータベース ファイルに存在します。[インポート] クエリは、MDX または DAX の表形式データベースに対して実行されます。
インポート モードに設定されたモデルを処理すると、データはバックエンド データ ソースから取得され、ディスクに格納されます。 データベースがロードされると、非常に高速のテーブル スキャンやクエリが実行され、データ全体がメモリにコピーされます。
これは表形式モデルの既定のモードで、特定の (非リレーショナル) データ ソースに適応する唯一のモードです。デュアル Import と DirectQuery の両方を許可します。 このモードは、Azure Analysis ServicesまたはPower BI Premiumではサポートされていません。
接続プロパティを確認する
データ ソース接続のセットアップ方法に応じて、DirectQuery を切り替えると、接続のセキュリティ コンテキストを変更することができます。 データ アクセス モードを変更するときに、偽装や接続文字列プロパティをチェックして、バックエンド データベースに接続しているログインが有効であることを確認してください。
「 Configure Analysis Services for Kerberos constrained delegation 」の「 信頼された委任用に Analysis Services を構成する 」セクションを確認します。こちらでは、DirectQuery シナリオのユーザー ID の委任について、その経緯を説明しています。
オブジェクト エクスプローラーで、 [接続] を展開し、[接続] をダブルクリックして、該当するプロパティを表示します。
DirectQuery モデルの場合は、データベースに定義されている接続は 1つのみです、また、データ ソースはリレーショナルで、サポートされているデータベース型にする必要があります。 「 サポートされているデータ ソース」を参照してください。
[接続文字列 ] がサーバー、データベース名、および DirectQuery 操作で使用する認証方法を指定します。 SQL Server 認証を使用している場合は、こちらでデータベース ログインを指定できます。
[権限借用情報 ] は、Windows の認証に使用されます。 DirectQuery モードの表形式モデルで有効なオプションは次のとおりです。
サービス アカウントを使用します。 Analysis Services サービス アカウントがリレーショナル データベースの読み取りアクセス許可を所有している場合、このオプションを選べます。
特定のユーザー名とパスワードを使用します。 リレーショナル データベースの読み取りアクセス許可を持つ Windows のユーザー アカウントを指定します。
これらの資格情報は、リレーショナル データ ストアに対するクエリの応答にのみ使用されます。これらはハイブリッド モデルのキャッシュの処理に使用される資格情報と同じではありません。
モデルをメモリ内でのみ使用する場合は、権限借用を使用できません。 モデルで DirectQuery モードを使用していない限り、 ImpersonateCurrentUser設定は無効です。
DirectQuery アクセスを検証する
Management Studio で、SQL Server のリレーショナル データベースに接続しながら、SQL Server Profiler または xEvents を使用して、トレースを開始します。
Oracle または Teradata を使用している場合は、これらのデータベース プラットフォームのトレース ツールを使用します。
Management Studio で、
select <some measure> on 0 from model.
など、シンプルな MDX クエリを入力して、実行します。トレースすると、リレーショナル データベースでクエリが実行された証拠が表示されるはずです。