Habilitando o DirectQuery para um conector baseado em ODBC
Usar a função interna Odbc.DataSource de M é a maneira recomendada de criar conectores personalizados para fontes de dados que tenham um driver ODBC existente e/ou suportem uma sintaxe de consulta SQL. Encapsular a função Odbc.DataSource permite que o conector herde o comportamento de dobragem de consulta padrão com base nos 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, opcionalmente, habilitar o modo DirectQuery, permitindo que o Power BI gere consultas dinamicamente em tempo de execução sem pré-armazenar em cache o modelo de dados do usuário.
Nota
Habilitar o suporte ao DirectQuery aumenta o nível de dificuldade e complexidade do seu conector. Quando o DirectQuery está habilitado, o Power BI impede que o mecanismo M compense operações que não podem ser totalmente enviadas para a fonte de dados subjacente.
Este artigo pressupõe familiaridade com a criação de um conector personalizado básico.
Consulte o exemplo SqlODBC para obter a maioria dos exemplos de código nas seções a seguir. Outros exemplos podem ser encontrados no diretório de amostras 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 seu sistema. Esta função também suporta dobragem de consulta e permite uma gama 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 que você execute 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 funcionalidade de dobramento de consulta e requer que as consultas SQL sejam fornecidas pelo conector (ou usuário final). Quando você cria um conector personalizado, essa função normalmente é usada internamente para executar consultas para recuperar metadados que podem não ser 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 manter a consistência com as funções de fonte de dados internas fornecidas 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 seu conector.
Embora você possa definir parâmetros com um número fixo de valores (por exemplo, uma lista suspensa na interface do usuário), os parâmetros são inseridos antes que o usuário seja autenticado. Quaisquer valores que possam ser descobertos programaticamente após a autenticação do utilizador (como o nome do catálogo ou da base de dados) devem ser selecionáveis através do Navigator. 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 dentro do seu conector.
Se você achar que os usuários normalmente sabem quais valores inserir para os itens que 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
), definir substituições de comportamento específicas para seu conector e permite extensibilidade futura sem afetar a compatibilidade com versões anteriores da sua função.Os argumentos relacionados à segurança/credenciais NUNCA devem fazer parte dos parâmetros da função da fonte de dados, pois os valores inseridos na caixa de diálogo de conexão são mantidos para a consulta do usuário. Os parâmetros relacionados a credenciais devem ser especificados como parte dos métodos de autenticação suportados do conector.
Por padrão, todos os parâmetros necessários para sua função de fonte de dados são considerados no valor Caminho da Fonte de Dados usado para identificar as credenciais do usuário.
Embora a interface do usuário para a função interna Odbc.DataSource forneça uma lista suspensa que permite ao usuário selecionar um DSN, essa funcionalidade não está disponível por extensibilidade. Se a configuração da fonte de dados for complexa o suficiente para exigir uma caixa de diálogo de configuração totalmente personalizável, recomendamos que você exija que os usuários finais pré-configurem um DSN do sistema e que sua função inclua o nome do DSN como um campo de texto.