Microsoft Excel

Microsoft Excel

sabato 8 novembre 2014

Ottenere informazioni su un itinerario con Excel “Power Query” e Bing Maps REST Services*


(*Bing™ Maps REST Services Application Programming Interface (API))

“Power Query” è un add-in di Excel che ci permette di comunicare con altri linguaggi, con il risultato di ottenere informazioni dal loro contenuto. Ad esempio è possibile calcolare la distanza tra due città “comunicando” con le informazioni fornite dalle API (cioè una altra applicazione che contiene info e comunica con altre appl.). “Bing™ Maps REST Services” è il servizio API di Bing Maps.

Conoscere la distanza tra due punti di un percorso è un fatto di grande importanza. Per un tecnico gestionale che deve calcolare la lunghezza del percorso che ottimizza i tempi di lavoro è (una) condizione necessaria per la progettazione dei servizi.

Un ottimo blog su come fare questo con le API di Google è:
http://www.excel2013.info/power-query/connection-api/

Riprendendo quanto dimostrato nel blog, vogliamo ottenere la distanza tra due punti di un itinerario con Bing Maps REST Services e Excel “Power Query”.

Procedere nel modo seguente:

1.       Ottenere una BingMapskey

2.       Scaricare l’add-in “Power Query” (possibile per vers. 2010 e 2013 di Excel).

3.       Utilizzare la documentazione API di Bing e cercare la URL e i parametri che interessano. La guida delle API di Bing si trova on-line. Cercare nel capitolo “Routes Api” per trovare quello che interessa. Nel nostro caso possiamo scrivere:


Se inseriamo l’indirizzo API nella url di un browser (Explorer ad es.) otteniamo come risposta un file xml (nel ns.caso “o=xml”, oppure json se “o=json”) che contiene molteplici informazioni sugli indirizzi “londra” e “leeds” come lat, lon, distanza tra le città, ecc.

Da tutti i parametri noi vogliamo la distanza e ottenere essa da excel (per adesso la riposta è un file)

4.       Scrivere il codice in Power Query. Nella barra multifunzione → Power Query → Recupera dati esterni → Da altre origini → Query Vuota → editor di query → Visualizzazione → Editor avanzato.

All’interno dell’editor avanzato digitare il frammento di codice in linguaggio M#:

Let

Source=Xml.Document(Web.Contents("http://dev.virtualearth.net/REST/V1/Routes/Driving?o=xml&wp.0=london&wp.1=leeds&avoid=minimizeTolls&key=insertbingmapskey"))

In

Source

Al post di insertbingmapskey è chiaro che va inserita la stringa di caratteri della chiave di prova. “o=” è il file di output che è xml, “wp.0” è l’indirizzo di partenza (londra) e “wp.1” è l’indirizzo di arrivo (leeds).

5.       Risposta di Power Query: Il frammento di codice restituisce la seguente risposta:
 
 
L’informazione attesa “distanza tra 2 città” non è visibile: dobbiamo continuare a esplorare il contenuto delle API. Nella colonna “Value” fare “clic” una volta sulla parola Table.
6.     Esplora il file xml: Il risultato è la tabella seguente dove il risultato non è ancora visibile: continuiamo a esplorare il file xml facendo “clic” sulla parola Table della colonna Value nella riga ResourceSets.


7.       Si ottiene la tabella seguente.



8.      Procedendo ancora come al passo precedente più volte si ottengono le seguenti tabelle in successione

La distanza fra londra e leeds è quindi di 310 km circa.

Il codice in linguaggio M# associato risulta

let

   Source = Xml.Document(Web.Contents ("http://dev.virtualearth.net/REST/V1/Routes/Driving?o=xml&wp.0=london&wp.1=leeds&avoid=minimizeTolls&key=insertyourbingmapskey")),

    Value = Source{0}[Value],

    Value1 = Value{6}[Value],

    Value2 = Value1{0}[Value],

    Value3 = Value2{1}[Value],

    Value4 = Value3{0}[Value],
in

    Value4

In un prossimo blog vedremo come scrivendo le città (o le strade) su un foglio excel, sfruttando questo metodo, riesco ad ottenere velocemente le distanze.

Buon Lavoro. Daniele