Habilitar o DirectQuery para um conector baseado em ODBC

Usar a função Odbc.DataSource interna do M é a maneira recomendada de criar conectores personalizados para fontes de dados que têm um driver ODBC existente e/ou dar suporte a uma sintaxe de consulta SQL. Encapsular a função Odbc.DataSource permite que o conector herde o comportamento de dobragem de consulta padrão de acordo com os recursos relatados pelo driver. Isso permitirá que o mecanismo M gere instruções SQL com base em filtros e outras transformações definidas pelo usuário na experiência do Power Query, sem precisar fornecer essa lógica dentro do próprio conector.

As extensões ODBC podem habilitar opcionalmente o modo DirectQuery, permitindo que o Power BI gere consultas de forma dinâmica em runtime sem pré-armazenar em cache o modelo de dados do usuário.

Observação

Habilitar o suporte do DirectQuery eleva o nível de dificuldade e complexidade do conector. Quando o DirectQuery está habilitado, o Power BI impede que o mecanismo M compense as operações que não podem ser totalmente enviadas por push para a fonte de dados subjacente.

Este artigo pressupõe familiaridade com a criação de um conector personalizado básico.

Consulte o Exemplo de SqlODBC para obter a maioria dos exemplos de código nas seções a seguir. Outros exemplos podem ser encontrados no diretório de exemplos do ODBC.

Funções de extensibilidade ODBC

O mecanismo M fornece duas funções de fonte de dados relacionadas ao ODBC: Odbc.DataSource e Odbc.Query.

A função Odbc.DataSource fornece uma tabela de navegação padrão com todos os bancos de dados, tabelas e exibições do sistema. Essa função também dá suporte à dobragem de consulta e permite uma variedade de opções de personalização. A maioria das extensões baseadas em ODBC usa essa função como sua função de extensibilidade primária. A função aceita dois argumentos: uma cadeia de conexão e um registro de opções, para fornecer substituições de comportamento.

A função Odbc.Query permite executar instruções SQL por meio de um driver ODBC. Ele atua como uma passagem para a execução da consulta. Ao contrário da função Odbc.DataSource , ela não fornece a funcionalidade de dobragem de consulta e exige que as consultas SQL sejam fornecidas pelo conector (ou pelo usuário final). Ao criar um conector personalizado, em geral, essa função é usada internamente para executar consultas para recuperar metadados que talvez não sejam expostos por meio de canais ODBC regulares. A função aceita dois argumentos: uma cadeia de conexão e uma consulta SQL.

Diretrizes da função de fonte de dados

Os conectores personalizados podem aceitar qualquer número de argumentos de função. Mas, para permanecer consistente com as funções de fonte de dados internas enviadas com o Power Query, as seguintes diretrizes são recomendadas:

  • Exija o conjunto mínimo de parâmetros usados para estabelecer uma conexão com o servidor. Quanto menos parâmetros os usuários finais precisarem fornecer, mais fácil será o uso do conector.

  • Embora você possa definir parâmetros com um número fixo de valores (ou seja, uma lista suspensa na interface do usuário), os parâmetros são inseridos antes que o usuário seja autenticado. Todos os valores, que podem ser descobertos programaticamente depois que o usuário é autenticado (como catálogo ou nome de banco de dados), devem ser selecionáveis por meio do Navegador. O comportamento padrão para a função Odbc.DataSource é retornar uma tabela de navegação hierárquica que consiste em nomes de Catálogo (Banco de Dados), Esquema e Tabela. No entanto, esse comportamento pode ser substituído em seu conector.

  • Caso você perceba que os usuários normalmente sabem quais valores inserir para itens que eles selecionariam no Navegador (como o nome do banco de dados), torne esses parâmetros opcionais. Os parâmetros que podem ser descobertos programaticamente não devem ser necessários.

  • O último parâmetro para sua função deve ser um registro opcional chamado "opções". Esse parâmetro normalmente permite que usuários avançados definam propriedades comuns relacionadas ao ODBC (como CommandTimeout) e definam substituições de comportamento específicas do conector. Também permite extensibilidade futura sem afetar a compatibilidade com versões anteriores para sua função.

  • Os argumentos relacionados à segurança/credencial nunca DEVEM fazer parte dos parâmetros da função de fonte de dados, pois os valores inseridos na caixa de diálogo de conexão serão persistidos para a consulta do usuário. Os parâmetros relacionados à credencial devem ser especificados como parte dos métodos de Autenticação compatíveis com o conector.

Por padrão, todos os parâmetros necessários para sua função de fonte de dados são fatorados no valor Caminho da Fonte de Dados usado para identificar as credenciais de usuário.

Embora a interface do usuário para a função interna Odbc.DataSource forneça uma lista suspensa que permite que o usuário selecione um DSN, essa funcionalidade não está disponível por meio da extensibilidade. Caso a configuração da fonte de dados seja complexa o suficiente para exigir uma caixa de diálogo de configuração totalmente personalizável, é recomendável que você exija que os usuários finais pré-configurem um DSN do sistema e que sua função use o nome DSN como um campo de texto.

Próximas etapas