2015-06-10 13 views
6

Ho un cruscotto automatico in un foglio "la mia dashboard" in Google Drive.Cercando di lavorare in fogli con set di dati di grandi dimensioni

I dati del dashboard provengono da Google Analytics (GA) tramite l'API. La maggior parte dei dati sono stati in grado di accedere utilizzando l'aggiunta Google Fogli GA.

I dati di origine per una delle tabelle nel dashboard sono piuttosto grandi - troppo grandi per adattarsi al foglio stesso.

Quindi, con alcune capacità di scripting limitate e l'aiuto di questo forum e alcune esercitazioni online ho creato uno script in Google-Apps-Script che interroga l'API GA e restituisce tutti i dati di cui ho bisogno e quindi inserisce un file csv nella stessa directory del dashboard principale.

Così ora, nella mia cartella "dashboard" in Drive ho 2 file: "il mio dashboard" - un Foglio e "i miei dati" un file csv. Potrei, se volessi, inviare i risultati della chiamata api su un foglio, ma ho appena pensato che un file CSV sarebbe più efficiente.

Ho aperto il file csv "i miei dati" in un foglio Gsheet e l'ho chiamato "combinato". Ecco un esempio di come appaiono i dati:

ga:year ga:month ga:medium ga:source ga:campaign ga:goal1Completions 
2013 5 (none) (direct) (not set) 116 
2013 5 (not set) Adperio silvercontact?dp 0 
2013 5 (not set) Conde*it _medium=email 0 
2013 5 (not set) Hearst (not set) 0 
2013 5 (not set) stackersocial stackersocial 0 
2013 5 12111 9591 201fHN000xRGGszT3aEAA11uIsaT000. 0 
2013 5 12111 9591 201fHN00BrT.K.AY0Hvf3q1uIqgl000. 0 
2013 5 12111 9591 201fHN00CK619oBE3OsBZp1uIqGX000. 0 
2013 5 12111 9591 201fHN00DFXJxnUu1jx25M1uIzkC000. 0 

Ci sono ~ 65k righe di dati.

Ora, nella mia bacheca ho bisogno di una tabella che raggruppa e aggrega i dati nel foglio "combinato" (o potrei usare il csv in qualche modo?). Il mio preferito andare alla formula è in genere, ad es.

=sum(filter(ga:goal1Completions, ga:year="2015"...))

Tirare in e l'interrogazione di questi dati si sta dimostrando difficile e spero in qualche consiglio.

Non posso semplicemente importare i dati nella mia dashboard poiché ricevo l'avviso relativo al superamento della dimensione massima del foglio di 200k di celle. Quindi devo fare affidamento sulla formula per importare i dati ed eseguire calcoli ogni volta. Ecco un esempio di quello che sto usando in questo momento:

=SUM(filter(IMPORTRANGE("https://docs.google.com/spreadsheets/d/xxxxxxxx/edit?usp=sharing","combined!F2:F"), 
IMPORTRANGE("https://docs.google.com/spreadsheets/d/xxxxxxxx/edit?usp=sharing","combined!A2:A")=year(G$17), 
IMPORTRANGE("https://docs.google.com/spreadsheets/d/xxxxxxxx/edit?usp=sharing","combined!B2:B")=month(G$17), 
IMPORTRANGE("https://docs.google.com/spreadsheets/d/xxxxxxxx/edit?usp=sharing","combined!C2:C")="(direct)", 
IMPORTRANGE("https://docs.google.com/spreadsheets/d/xxxxxxxx/edit?usp=sharing","combined!D2:D")="(none)")) 

Quindi per ogni parametro nella funzione in una cella devo importare la colonna di dati e sottoinsieme di esso.

Sono sicuro che ci deve essere un modo migliore. In questo momento funziona davvero, ma è eccezionalmente lento.

viali Stavo pensando:

  1. Qualcuno sul così detto utilizzando il servizio di cache here. Ma come funzionerebbe o come lo integrerei con le mie funzioni IMPORTRANGE() sopra?
  2. C'è qualche vantaggio nell'avere un file csv o dovrei semplicemente inviare i risultati in un GSheet fin dall'inizio?
  3. Nello script che eseguo per ottenere i dati, prima di esportarli in un file csv (o in un foglio di calcolo se è meglio?) Ho i dati come array prima della conversione in un file. C'è qualcosa di stravagante che posso fare qui, come interrogare questo array direttamente dal foglio? Tenendo presente che le mie capacità di scripting sono piuttosto semplici.
  4. Probabilmente potrei creare una funzione per chiamare individualmente l'api GA per ogni cella in cui si trova la funzione, restituendo i risultati in ogni singola cella (quindi nell'esempio sopra, una funzione per chiamare ga api per anno = anno (G17) & mese = mese (G17) & medio = [some_other_cell_reference). Quindi questa opzione si tradurrebbe in più chiamate API, ma i dati più piccoli su cui lavorare. Non sono sicuro se sia una buona idea o se vada nella direzione sbagliata del tutto.

Spero di aver comunicato sufficientemente il mio problema. Devo trovare un modo più efficiente di interrogare i miei dati esterni nella dashboard.

+0

Hai esaminato BigQuery? https://cloud.google.com/bigquery/what-is-bigquery Puoi spingere i limiti di ciò che i GSheet possono fare. –

+0

Troppo largo. "Ci sono troppe risposte possibili, o le buone risposte sarebbero troppo lunghe per questo formato". Si prega di "isolare un problema che può essere risolto in alcuni paragrafi". –

+0

Quindi hai deciso contro FusionTables? http://stackoverflow.com/questions/30695675/union-data-in-multiple-tabs/30725158?noredirect=1#comment49536435_30725158 Sarebbe interessante sapere cosa ti ha fatto pensare? :) – Tim

risposta

2

Invece di importare una colonna alla volta utilizzando più IMPORTRANGE e FILTER, utilizzare una sola IMPORTRANGE per estrarre tutte le colonne necessarie in un'unica operazione e utilizzare QUERY per eseguire le operazioni necessarie.

Nello stesso modo in cui si include IMPORTRANGE dentro filtro, è possibile includere all'interno QUERY

OSSIA Per semplicità vorrei aggiungere solo una criteri di filtro

`=QUERY(IMPORTRANGE("key","range"),"select sum(Col6) where Col1 ='"&G$17&'")` 
+0

Ciao @Ruben. OK, ma quando eseguo il mio importrange() iniziale per inserire tutte le colonne dove dovrei "archiviare" i risultati per interrogarli successivamente? Il motivo per cui ho i dati esterni è perché non riesco a inserire i dati nel foglio di lavoro senza violare il limite massimo di dimensioni. –

+0

QUERY, come FILTER, potrebbe utilizzare il risultato IMPORTRANGE come parametro. –

2

Poiché i dati di origine è troppo grande per Google Fogli, è possibile utilizzare un archivio dati alternativo che permetterebbe di eseguire query interessanti - Fusion Tables, per esempio.

È possibile accedere a Fusion Tables da Google Apps Script tramite il servizio avanzato FusionTables, che deve essere enabled first.

In Database abstraction with google apps script, Bruce McPherson introduce uno strato di astrazione che può avere una varietà di servizi come magazzini di back-end. Che si prende cura dei dettagli di trattare con FusionTables per te. Ancora meglio, puoi refactoring il codice per utilizzare prima il cDbAbstraction library con il back-end Google Sheet esistente, quindi aggiungere DriverFusion per il set di dati completo in un secondo momento.

+1

Hai appena visto il commento di @ Tim e rispondi a [tua domanda precedente] (http://stackoverflow.com/questions/30695675/union-data-in-multiple-tabs/30725158) ... stesso tema. Fogli Google non è pensato per i Big Data. – Mogsdad

+0

Ciao @Mogsdad grazie per le informazioni. Dato il mio set di competenze, sto lottando per andare avanti con le cose in base alla tua soluzione, ma forse richiede solo alcune più avanzate capacità di codifica e familiarità con l'utilizzo delle API.Ma in poche parole penso che tu stia suggerendo di inserire i dati in una tabella di fusione e usarli per archiviare i miei dati, quindi magari interrogare i dati della tabella di fusione usando ad es. https://developers.google.com/fusiontables/docs/v2/sql-reference e quindi estraendo i risultati in fogli? Che l'essenza di quello che stai dicendo? –

Problemi correlati