ODBC ベースのコネクタの DirectQuery の有効化
既存の ODBC ドライバーがある、または SQL クエリ構文をサポートするデータ ソース用のカスタム コネクタを作成するには、M に組み込まれている Odbc.DataSource 関数を使うことをお勧めします。 Odbc.DataSource 関数をラップすると、ドライバーによって報告された機能に基づいて、コネクタがデフォルトのクエリ フォールディング動作を継承できるようになります。 このビヘイビアーにより、M エンジンは、Power Query のエクスペリエンス内でユーザーが定義したフィルターや他の変換に基づいて SQL ステートメントを生成することができ、コネクタ自体でこのロジックを提供する必要がなくなります。
ODBC 拡張機能では、オプションで DirectQuery モードを有効にすることができ、Power BI がユーザーのデータ モデルを事前にキャッシュせずに、実行時に動的にクエリを生成できるようになります。
注意
DirectQuery サポートを有効にすると、コネクタの難易度と複雑さのレベルが上がります。 DirectQuery が有効になっている場合、Power BI は、基になるデータ ソースに完全にプッシュできない操作を M エンジンが補うことを防ぎます。
この記事は、基本的なカスタム コネクタの作成に精通していることを前提としています。
次のセクションのほとんどのコード例については、SqlODBC サンプル を参照してください。 他のサンプルは、ODBC サンプル ディレクトリにあります。
M エンジンは、Odbc.DataSource と Odbc.Query という 2 つの ODBC 関連データ ソース関数を提供します。
Odbc.DataSource 関数は、システムのすべてのデータベース、テーブル、ビューを含むデフォルトのナビゲーション テーブルを提供します。 この関数はクエリの折りたたみもサポートしており、さまざまなカスタマイズ オプションが可能です。 ほとんどの ODBC ベースの拡張機能は、この関数を主要な拡張機能として使用します。 この関数は、接続文字列と、動作をオーバーライドするためのオプション レコードという 2 つの引数を受け入れます。
Odbc.Query 関数を使うと、ODBC ドライバーを通じて SQLステートメントを実行できます。 これは、クエリ実行のパススルーとして機能します。 Odbc.DataSource 関数とは異なり、クエリ フォールディング機能はなく、コネクタ (またはエンド ユーザー) によって SQL クエリを提供される必要があります。 この関数は、通常、カスタム コネクタを作成する際に、通常の ODBC チャネルを介して公開されない可能性があるメタデータを取得するクエリを実行するために、内部的に使用されます。 この関数は、接続文字列と SQL クエリの 2 つの引数を受け入れます。
カスタム コネクタは、関数の引数をいくつでも受け入れることができます。 ただし、Power Query に付属の組み込みデータ ソース関数との一貫性を保つために、次のガイドラインに従うことをお勧めします。
サーバーへの接続を確立するために使用する最小限のパラメーターのセットを要求します。 エンドユーザーが指定する必要があるパラメータが少ないほど、コネクタは使いやすくなります。
決まった数の値でパラメーターを定義できますが (例えば、UI のドロップダウン リスト)、パラメーターはユーザーが認証される前に入力されます。 ユーザーの認証後にプログラムで検出できる値 (カタログ名やデータベース名など) を、ナビゲーターを使用して選べるようにする必要があります。 Odbc.DataSource 関数のデフォルトの動作は、カタログ (データベース)、スキーマ、およびテーブル名で構成される階層ナビゲーション テーブルを返します。 ただし、この動作はコネクタ内でオーバーライドできます。
ナビゲーターから選ぶ項目 (データベース名など) に入力する値をユーザーが通常はわかっていると思われる場合は、これらのパラメーターを省略可能にします。 プログラムで検出できるパラメーターは必須にするべきではありません。
関数の最後のパラメーターは、"options" という名前の省略可能なレコードにする必要があります。 通常、このパラメーターを使用すると、上級ユーザーは共通の ODBC 関連プロパティ (
CommandTimeout
など) を設定したり、コネクターに固有の動作オーバーライドを設定したりでき、関数の下位互換性に影響を与えることなく将来の拡張性を実現できます。接続ダイアログに入力された値はユーザーのクエリに保持されるため、セキュリティや資格情報に関連する引数は、データ ソース関数のパラメーターの一部にしてはなりません。 資格情報関連のパラメーターは、コネクタでサポートされている認証方法の一部として指定する必要があります。
既定では、データ ソース関数に必要なすべてのパラメーターは、ユーザーの資格情報の識別に使用されるデータ ソース パスの値に組み込まれます。
組み込みの Odbc.DataSource 関数の UI には、ユーザーが DSN を選択できるドロップダウンが用意されていますが、この機能は拡張機能によって使用できません。 データ ソース構成が完全にカスタマイズ可能な構成ダイアログを必要とするほど複雑な場合は、エンド ユーザーにシステム DSN を事前構成し、関数に DSN 名をテキスト フィールドとして取り込むように要求することをお勧めします。