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