Habilitación de DirectQuery para un conector basado en ODBC

El uso de la función Odbc.DataSource integrada de M es la manera recomendada de crear conectores personalizados para orígenes de datos que tienen un controlador ODBC existente o admiten una sintaxis de consulta SQL. Ajustar la función Odbc.DataSource permite al conector heredar el comportamiento de plegado de consultas predeterminado en función de las funcionalidades notificadas por el controlador. Este comportamiento permite al motor de M generar instrucciones SQL basadas en filtros y otras transformaciones definidas por el usuario dentro de la experiencia de Power Query, sin tener que proporcionar esta lógica dentro del propio conector.

Las extensiones ODBC pueden habilitar opcionalmente el modo DirectQuery, lo que permite a Power BI generar consultas dinámicamente en tiempo de ejecución sin almacenar en caché previamente el modelo de datos del usuario.

Nota:

Habilitar la compatibilidad con DirectQuery eleva el nivel de dificultad y complejidad de su conector. Cuando DirectQuery está habilitado, Power BI impide que el motor de M compense las operaciones que no se puedan delegar completamente en el origen de datos subyacente.

Este artículo asume que tiene familiaridad con la creación de un conector personalizado básico.

Consulte el ejemplo SqlODBC para obtener la mayoría de los ejemplos de código de las secciones siguientes. Otros ejemplos se pueden encontrar en el directorio de ejemplos odbc.

Funciones de extensibilidad ODBC

El motor M proporciona dos funciones de origen de datos relacionadas con ODBC: Odbc.DataSource y Odbc.Query.

La función Odbc.DataSource proporciona una tabla de navegación predeterminada con todas las bases de datos, tablas y vistas del sistema. Esta función también admite el plegado de consultas y permite una variedad de opciones de personalización. La mayoría de las extensiones basadas en ODBC usan esta función como función de extensibilidad principal. La función acepta dos argumentos: una cadena de conexión y un registro de opciones para proporcionar invalidaciones de comportamiento.

La función Odbc.Query permite ejecutar instrucciones SQL a través de un controlador ODBC. Actúa como un paso directo para la ejecución de consultas. A diferencia de la función Odbc.DataSource , no proporciona funcionalidad de plegado de consultas y requiere que el conector (o el usuario final proporcione consultas SQL). Al compilar un conector personalizado, esta función se usa internamente para ejecutar consultas para recuperar metadatos que podrían no exponerse a través de canales ODBC normales. La función acepta dos argumentos: una cadena de conexión y una consulta SQL.

Directrices de función del origen de datos

Los conectores personalizados pueden aceptar cualquier número de argumentos de función. Pero para mantener la coherencia con las funciones de origen de datos integradas que se incluyen con Power Query, se recomiendan las siguientes directrices:

  • Requerir el conjunto mínimo de parámetros usados para establecer una conexión con el servidor. Cuantos menos parámetros necesiten proporcionar los usuarios finales, más fácil es usar el conector.

  • Aunque puede definir parámetros con un número fijo de valores (por ejemplo, una lista desplegable en la interfaz de usuario), los parámetros se escriben antes de autenticar al usuario. Los valores que se pueden detectar mediante programación después de autenticar al usuario (como el nombre del catálogo o de la base de datos) deben seleccionarse a través del navegador. El comportamiento predeterminado de la función Odbc.DataSource es devolver una tabla de navegación jerárquica formada por catálogos (base de datos), esquema y nombres de tabla. Sin embargo, este comportamiento se puede invalidar dentro del conector.

  • Si cree que los usuarios suelen saber qué valores escribir para los elementos que seleccionarían en el Navegador (por ejemplo, el nombre de la base de datos), haga que estos parámetros sean opcionales. Los parámetros que se pueden detectar mediante programación no deben ser obligatorios.

  • El último parámetro de la función debe ser un registro opcional denominado "options". Este parámetro normalmente permite a los usuarios avanzados establecer propiedades comunes relacionadas con ODBC (como CommandTimeout), establecer invalidaciones de comportamiento específicas del conector y permite la extensibilidad futura sin afectar a la compatibilidad con versiones anteriores para la función.

  • Los argumentos relacionados con la seguridad o las credenciales nunca deben formar parte de los parámetros de la función de origen de datos, ya que los valores especificados en el cuadro de diálogo de conexión se conservan en la consulta del usuario. Los parámetros relacionados con credenciales deben especificarse como parte de los métodos de autenticación admitidos del conector.

De forma predeterminada, todos los parámetros necesarios para la función de origen de datos se integran en el valor de la ruta de acceso del origen de datos que se utiliza para identificar las credenciales de usuario.

Aunque la interfaz de usuario de la función Odbc.DataSource integrada proporciona una lista desplegable que permite al usuario seleccionar un DSN, esta funcionalidad no está disponible a través de la extensibilidad. Si la configuración del origen de datos es lo suficientemente compleja como para requerir un cuadro de diálogo de configuración totalmente personalizable, se recomienda que requiera que los usuarios finales configuren previamente un DSN del sistema y que la función tome el nombre de DSN como campo de texto.