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. Esse comportamento permite 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.
O mecanismo M oferece 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.
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 é 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 sã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, estabeleça a pré-configuração de um DSN de sistema como requisito para os usuários finais. Além disso, use o nome DSN como um campo de texto na sua função.