Compartir vía


TripPin parte 1: conector de datos para un servicio OData

En este tutorial de varias partes se describe la creación de una nueva extensión de origen de datos para Power Query. El tutorial está diseñado para seguirse secuencialmente: cada lección se basa en el conector creado en las lecciones anteriores, agregando incrementalmente nuevas funcionalidades al conector.

En esta lección, aprenderá lo siguiente:

  • Creación de un nuevo proyecto de conector de datos mediante el SDK de Power Query
  • Creación de una función base para extraer datos de un origen
  • Prueba del conector en el SDK de Power Query
  • Registro del conector en Power BI Desktop

Creación de un conector básico de OData

En esta sección, creará un nuevo proyecto de conector de datos, proporcionará información básica y lo probará en el SDK de Power Query.

Abra Visual Studio Code. Se recomienda crear una nueva área de trabajo y, a continuación, crear un nuevo proyecto de extensión. Para crear el nuevo proyecto de extensión, abra el explorador y, en la sección SDK de Power Query, seleccione el botón Crear un proyecto de extensión.

Captura de pantalla que resalta la opción para crear un proyecto de extensión del SDK de Power Query.

Después de seleccionar este botón, se le pedirá que escriba el nombre del nuevo proyecto. Asigne al nuevo proyecto el nombre TripPin.

Captura de pantalla del nuevo proyecto de extensión creado denominado TripPin mediante el SDK de Power Query.

Abra el archivo TripPin.pq y pegue la siguiente definición del conector.

section TripPin;

[DataSource.Kind="TripPin", Publish="TripPin.Publish"]
shared TripPin.Feed = Value.ReplaceType(TripPinImpl, type function (url as Uri.Type) as any);

TripPinImpl = (url as text) =>
    let
        source = OData.Feed(url)
    in
        source;

// Data Source Kind description
TripPin = [
    Authentication = [
        Anonymous = []
    ],
    Label = "TripPin Part 1 - OData"
];

// Data Source UI publishing description
TripPin.Publish = [
    Beta = true,
    Category = "Other",
    ButtonText = { "TripPin OData", "TripPin OData" }
];

Esta definición del conector contiene:

  • Un registro de definición de origen de datos para el conector TripPin
  • Declaración que indica que Implícita (Anónima) es el único tipo de autenticación para este origen.
  • Una función (TripPinImpl) con una implementación que llama a OData.Feed
  • Una función compartida (TripPin.Feed) que establece el tipo de parámetro en Uri.Type
  • Un registro de publicación del origen de datos que permite que el conector aparezca en el cuadro de diálogo Obtener datos de Power Query

Abra el archivo TripPin.query.pq. Reemplace el contenido actual por una llamada a la función exportada.

TripPin.Feed("https://services.odata.org/v4/TripPinService/")

Para poder probar el conector, debe compilarlo. Para ello, vaya al Terminal y seleccione la opción Ejecutar tarea de compilación... (método abreviado de teclado Ctrl + Mayús + B). Se recomienda elegir la opción MakePQX, pero cualquiera de las opciones disponibles para compilar debe funcionar.

Captura de pantalla que muestra la ejecución de una tarea de compilación antes de probar el conector.

El resultado de esta operación crea una nueva carpeta Bin donde el conector compilado se almacena como TripPin.mez.

Captura de pantalla de la nueva carpeta bin creada en la que se encuentra el archivo del conector con una extensión mez y un nombre TripPin.mez.

El archivo <proyecto>.query.pq se usa para probar la extensión sin tener que implementarlo en la carpeta bin de Power BI Desktop. Con las herramientas disponibles dentro del SDK de Power Query:

  1. Seleccione la opción Establecer credencial.
  2. Seleccione el origen de datos como TripPin.
  3. Seleccione el archivo TripPin.query.pq como archivo de prueba/consulta.
  4. Seleccione anónimo como tipo de autenticación.

En el cuadro de diálogo de salida, aparece un mensaje que confirma que ha establecido una credencial para el origen de datos y los detalles de cada credencial creada.

Captura de pantalla del cuadro de diálogo de salida que muestra los detalles de la autenticación recién creada para el conector TripPin mediante la dirección URL pasada en el archivo .query.pq.

Nota:

Siempre puede borrar las credenciales mediante el comando Borrar todas las credenciales o comprobar las credenciales disponibles mediante el comando Enumerar credenciales en las herramientas del SDK de Power Query.

Con la credencial en su lugar, seleccione el archivo TripPin.query.pq y seleccione con el botón derecho en el documento para evaluar el archivo actual de Power Query o use la opción para evaluar el archivo actual desde las herramientas del SDK de Power Query.

Captura de pantalla de varias alternativas para evaluar el archivo actual de Power Query.

El cuadro de diálogo de salida muestra un mensaje de los resultados de la evaluación, así como una nueva ventana con el nombre PQTest result.

Captura de pantalla de la ventana de resultados de PQTest que muestra los resultados de la evaluación ejecutada.

La ventana de resultados de PQTest consta de tres pestañas:

  • Salida: muestra una vista previa de los datos en una cuadrícula.
  • Resumen: detalles de evaluación generales, como StartTime, EndTime, Duration, el archivo que se usó para la evaluación, el estado, etc.
  • Origen de datos: proporciona información sobre el origen de datos que se usó desde Kind, el nombre de la función y la ruta de acceso.

Puede probar unas cuantas direcciones URL de OData diferentes en el archivo de prueba para ver qué resultados diferentes se devuelven. Por ejemplo:

  • https://services.odata.org/v4/TripPinService/Me
  • https://services.odata.org/v4/TripPinService/GetPersonWithMostFriends()
  • https://services.odata.org/v4/TripPinService/People

El archivo TripPin.query.pq puede contener instrucciones únicas, instrucciones Let o documentos de sección completos.

let
    Source = TripPin.Feed("https://services.odata.org/v4/TripPinService/"),
    People = Source{[Name="People"]}[Data],
    SelectColumns = Table.SelectColumns(People, {"UserName", "FirstName", "LastName"})
in
    SelectColumns

Importante

Asegúrese de guardar siempre los archivos mientras trabaja. Si realiza cambios en el archivo TripPin.pq, siempre debe desencadenar una tarea de compilación posterior para asegurarse de que está probando con la versión más reciente del conector.

Abra Fiddler para capturar el tráfico HTTP y ejecute la consulta. Debería ver unas cuantas solicitudes diferentes para services.odata.org, generadas por el proceso de contenedor mashup. Puede ver que el acceso a la dirección URL raíz del servicio da como resultado un estado 302 y una redirección a la versión más larga de la dirección URL. Los redireccionamientos siguientes son otro comportamiento que se obtiene "gratis" de las funciones de la biblioteca base.

Algo que debe tenerse en cuenta si se observan las direcciones URL es que se puede ver el plegado de consultas que se ha producido con la instrucción SelectColumns. https://services.odata.org/v4/TripPinService/People?$select=UserName%2CFirstName%2CLastName

Si agrega más transformaciones a la consulta, puede ver cómo afectan a la dirección URL generada.

Es importante tener en cuenta este comportamiento. Aunque no se implementase lógica de plegado explícita, el conector hereda estas funcionalidades de la función OData.Feed. Las instrucciones M admiten composición: los contextos de filtro fluirán de una función a otra siempre que sea posible. Esto es similar en concepto a la forma en que las funciones de origen de datos usadas en el conector heredan su contexto de autenticación y sus credenciales. En lecciones posteriores, reemplazará el uso de OData.Feed, que tiene funcionalidades de plegado nativas, con Web.Contents, que no tiene. Para obtener el mismo nivel de funcionalidades, deberá usar la interfaz Table.View e implementar su propia lógica de plegado explícita.

Carga de la extensión en Power BI Desktop

Para usar la extensión en Power BI Desktop, deberá copiar el archivo de salida del proyecto de conector (TripPin.mez) en el directorio conectores personalizados.

  1. Cree un directorio [Mis documentos]\Power BI Desktop\Conectores personalizados.
  2. Copie el archivo de extensión (TripPin.mez) en este directorio.
  3. Marque la opción (Opción no recomendada) Permitir que se cargue cualquier extensión sin ninguna validación ni advertencia en Power BI Desktop (en Archivo>Opciones y configuración>Opciones>Seguridad>Extensiones de datos).
  4. Reinicie Power BI Desktop.
  5. Seleccione Obtener datos > Más para abrir el cuadro de diálogo Obtener datos.

Puede localizar la extensión escribiendo su nombre en el cuadro de búsqueda.

Cuadro de diálogo Obtener datos.

Seleccione el nombre de la función y seleccione Conectar. Aparece un mensaje de terceros: seleccione Continuar para continuar. Ahora aparece el cuadro de diálogo de invocación de funciones. Escriba la dirección URL raíz del servicio (https://services.odata.org/v4/TripPinService/) y seleccione Aceptar.

Invocar función.

Puesto que es la primera vez que accede a este origen de datos, recibirá una solicitud de credenciales. Compruebe que se haya seleccionado la dirección URL más corta y, a continuación, seleccione Conectar.

Imagen de la solicitud de credenciales establecida en Anónimo y la configuración de nivel establecida en la dirección URL más corta.

Observe que, en lugar de obtener una tabla de datos simple, aparece el navegador. Esto se debe a que la función OData.Feed devuelve una tabla con metadatos especiales sobre ella que la experiencia de Power Query conoce para mostrarla como una tabla de navegación. En este tutorial se explica cómo crear y personalizar su propia tabla de navegación en una lección futura.

Tabla de navegación.

Seleccione la tabla Me y, después, Transformar datos. Observe que las columnas (la mayoría de ellas) ya tienen tipos asignados. Esta es otra característica de la función OData.Feed subyacente. Si observa las solicitudes en Fiddler, verá que ha capturado el documento $metadata del servicio. La implementación de OData del motor lo hace automáticamente para determinar el esquema, los tipos de datos y las relaciones del servicio.

Registro Me.

Conclusión

En esta lección le hemos mostrado cómo crear un conector sencillo basado en la función de biblioteca OData.Feed. Como ha visto, se necesita poca lógica para habilitar un conector totalmente funcional por medio de la función base OData. Otras funciones que ofrecen extensibilidad, como ODBC. DataSource, proporcionan funcionalidades similares.

En la siguiente lección, reemplazará el uso de OData.Feed por una función menos compatible: Web.Contents. Cada lección implementa más características del conector, incluida la paginación, la detección de metadatos y esquemas, y el plegado de consultas a la sintaxis de consulta de OData, hasta que el conector personalizado admita el mismo intervalo de funcionalidades que OData.Feed.

Pasos siguientes

TripPin parte 2: conector de datos para un servicio REST