Iteraciones en múltiples llamadas al API de ITM Platform con Excel Power Query
Nota: Esta guía sigue los pasos mostrados en este vídeo:
Cuando se utiliza el API, en ocasiones hay que hacer una llamada por cada registro de una consulta previa. Por ejemplo:
- Una primera llamada a la lista de proyectos da como resultado una lista
- Para conocer el presupuesto de cada registro, se obtiene una tabla agregada de presupuestos de proyecto a partir de la lista anterior
Este es el esquema conceptual de las llamadas:
Paso 1: Identificación de métodos y acceso básico al API
Para todo lo referente al acceso básico al API de ITM Platform, puede consultar la primera parte de esta guía, con su vídeo correspondiente: En el caso del ejemplo empleado en este artículo, es necesario emplear tres métodos. Los primeros dos ya habían sido utilizados para acceder a ITM Platform y generar la lista de proyectos.
- Autenticación
- Lista de proyectos
- Presupuesto por cada proyecto
Partiendo de la consulta del artículo anterior, se seleccionan únicamente las columnas ProjectID y ProjectName. El resultado es una lista de proyectos debidamente identificada.
let myToken = Json.Document(Web.Contents(«https://api.itmplatform.com/company/login/elon.musk@itmplatform.com/12345»)), Source = Json.Document(Web.Contents(«https://api.itmplatform.com/company/projects/?ProjectStartDate=lt:2017-05-08T00:00:00Z&ProjectEndDate=gt:2017-05-06T00:00:00Z», [Headers=[token=myToken[Token]]])), #»Converted to Table» = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #»Expanded Column1″ = Table.ExpandRecordColumn(#»Converted to Table», «Column1», {«ProjectID», «ProjectName»}, {«ProjectID», «ProjectName»}), in #»Expanded Column1″
La segunda consulta del ejemplo recupera el presupuesto detallado por cada proyecto.
La consulta se realiza siguiendo el mismo procedimiento, con una diferencia muy importante: la URL varía por cada llamada:
https://api.itmplatform.com/itmrozas/projects/{ProjectID}/budget
Es decir, hay que reemplazar {ProjectID] por su valor: el ID de cada proyecto. Para hacerlo de forma automática hay que crear una nueva consulta y transformarla en una función. La sintaxis es muy similar.
Nota: Antes de proseguir, es conveniente cambiar el nivel de privacidad del libro actual a “ninguno“ en las opciones de privacidad de las opciones de Power Query. De lo contrario podría haber errores a la hora de combinar consultas.
(p_id) => let myToken = Json.Document(Web.Contents(«https://api.itmplatform.com/company/login/elon.musk@itmplatform.com/12345»)), Source = Json.Document(Web.Contents(«https://api.itmplatform.com/company/projects/»& Number.ToText(p_id) & «/budget», [Headers=[token=myToken[Token]]])) in Source
Diferencias con consultas genéricas:
- al inicio se abre con:
(p_id) =>
Esta fórmula indica que una función reemplazará a Number.ToText(p_id) en cada URL que genere por el ID de proyecto.
- Al grabar la query, el sistema indica que se trata de una función. En este caso, lleva el nombre “Budget”
Paso 3 – Unir los pasos anteriores
Una vez creada la función, hay que volver sobre la consulta inicial para:
Añadir una columna a modo de función personalizada
Elegir la función recién creada
Escoger como parámetro la columna ProjectID
El resto de pasos es el habitual:
- Expandir las columnas para seleccionar las que sean de interés
- Añadr las columnas personalizadas convenientes
- Grabar y utilizar cualquiera de los medios de explotación de datos de Excel, como por ejemplo PowerPivot.
En el ejemplo se han añadido dos campos personalizados:
- Total Budget
- Actual cost
Los dos campos se han comparado con un gráfico de barras.
Nota: Si el resultado de la primera tabla contiene muchos registros, las llamadas a la segunda consulta pueden demorarse, pues se harán tantas consultas como registros haya. Trate de limitar la búsqueda a lo que le interese.