Powerquery è un grande e flessibile strumento per ottenere e trasformare i dati provenienti da fonti diverse in Excel o Power Pivot. La procedura standard per PowerQuery è quello di leggere una tabella completa e sostituire la destinazione con il risultato della query corrente. Questo è esattamente quello che ci serve per la maggior parte dei casi l’uso di PowerQuery. Tuttavia, se volete aggiungere nuovi dati per i dati esistenti si può ancora utilizzare Power query, ma si deve seguire un approccio leggermente diverso.
Per esempio, diciamo che vogliamo creare una lista dei post del blog, mentre il feed RSS fornisce solo i post più recenti. In questo caso avremmo bisogno di aggiungere i risultati della query per i dati esistenti.
Il feed RSS fornisce solo le ultime 25 voci del blog. Se Powerquery non rileva automaticamente questo come una tabella XML è possibile inserire la funzione XML.Tables. Gli elementi vengono memorizzati nell’ultima colonna (tabella la voce) che può essere espansa cliccando sul pulsante immagine a destra tra “ingresso”. Per il nostro esempio, ci interessa solo i dati di pubblicazione e il titolo.
Espandendo questa tabella si ottiene una riga per ogni post sul blog. Per il ottenere il titolo, sto espandendo l’ultima colonna (nel mio caso title.1 poiché non vi è già un titolo di una colonna per il titolo del blog) per il suo valore di testo Infine, abbiamo cambiato il tipo della prima colonna di DateTime e rinominato le colonne.
Lo script completo generato da Power query è il seguente:
let
Source = Xml.Tables(Web.Contents(“http://ms-olap.blogspot.com/feeds/posts/default”)),
#”Expand entry” = Table.ExpandTableColumn(Source, “entry”, {“published”, “title”}, {“published”, “title.1″}),
#”Expand title.1″ = Table.ExpandTableColumn(#”Expand entry”, “title.1”, {“Element:Text”}, {“Element:Text”}),
#”Removed Columns” = Table.RemoveColumns(#”Expand title.1″,{“id”, “updated”, “category”, “title”, “subtitle”, “link”, “author”, “generator”, “http://a9.com/-/spec/opensearchrss/1.0/”}),
#”Split Column by Position” = Table.SplitColumn(#”Removed Columns”,”published”,Splitter.SplitTextByPositions({0, 19}, false),{“published.1”, “published.2″}),
#”Changed Type” = Table.TransformColumnTypes(#”Split Column by Position”,{{“published.1”, type datetime}, {“published.2″, type text}}),
#”Removed Columns1″ = Table.RemoveColumns(#”Changed Type”,{“published.2″}),
#”Renamed Columns” = Table.RenameColumns(#”Removed Columns1″,{{“published.1”, “Date”}, {“Element:Text”, “Title”}})
in
#”Renamed Columns”
Ora possiamo caricare questo risultato alla cartella di lavoro facendo clic sul pulsante Chiudi e carica. Ora, ecco che arriva la parte interessante. Fino ad ora, il feed RSS fornisce solo le ultime 25 righe, in questo modo ogni volta che c’è un nuovo post, il post più vecchio sarebbe stato rimosso dalla tabella. Diciamo che vorremmo aggiungere nuovi messaggi al tavolo. Per farlo, creiamo una nuova query denominata “I dati esistenti” dai dati che abbiamo appena caricato nella cartella di lavoro: Utilizzando il “Save & Load To …” l, si può scegliere di creare solo una connessione (i dati non vengono effettivamente trasferito qui).
Ora possiamo modificare la prima query ( “blogposts”) di nuovo. Nella scheda Home della barra multifunzione di alimentazione query si possono trovare le opzioni per combinare le query. Nel nostro caso, io sempilicemente decidiamo di aggiungere i nuovi dati a quelli esistenti. Se si dispone di una chiave per abbinare le stesse righe, si potrebbe anche fare una fusione in base alla colonna chiave (ad esempio se vi sono aggiornati righe).
Il risultato è che ora abbiamo 25 righe della tabella esistente e 25 righe letto di recente dal blog. A questo punto, le voci sono identiche così abbiamo 25 duplicati. Eliminiamo le righe duplicate utilizzando la funzione “Elimina duplicati”.