1. Büyük veri analizinden slayt sunusuna
Veri bilimcilerin büyük veri analizleri yapabileceği birçok araç vardır ancak analistler sonuçları yönetime sunmak zorundadır. Kağıt üzerindeki veya bir veritabanındaki çok sayıda rakam, önemli paydaşlara sunulamaz. Bu orta düzey Google Apps Komut Dosyası codelab'i, son aşamayı otomatikleştirmenize yardımcı olmak için 2 Google geliştirici platformunu (Google Workspace ve Google Cloud Console) kullanır.
Google Cloud'un geliştirici araçları, ayrıntılı veri analizi yapmanıza olanak tanır. Ardından sonuçları alıp bir e-tabloya ekleyebilir ve verilerle bir slayt sunusu oluşturabilirsiniz. Bu, yönetime veri iletmek için daha uygun bir yol sunar. Bu codelab'de, Cloud Console'un BigQuery API'si (Apps Komut Dosyası gelişmiş hizmeti olarak) ile Google E-Tablolar ve Google Slaytlar için yerleşik Apps Komut Dosyası hizmetleri açıklanmaktadır.
Motivasyon
Bu codelab'deki örnek uygulama, aşağıdaki diğer kod örneklerinden esinlenmiştir:
- GitHub'da açık kaynaklı olan Google Apps Komut Dosyası BigQuery Hizmeti örnek uygulaması.
- E-tablo verilerinden slayt oluşturma başlıklı geliştirici videosunda yer alan ve bu blog yayınında yayınlanan örnek uygulama.
- Google Slides API codelab'de yer alan örnek uygulama.
Slaytlar API'si codelab örnek uygulamasında BigQuery ve Slaytlar da yer alsa da bu codelab'in örnek uygulamasından birkaç açıdan farklıdır:
- Onların Node.js uygulaması ile bizim Apps Komut Dosyası uygulamamız.
- Onlar REST API'leri kullanırken biz Apps Komut Dosyası hizmetlerini kullanırız.
- Bu uygulamalar Google Drive'ı kullanır ancak Google E-Tablolar'ı kullanmaz. Bu uygulama ise E-Tablolar'ı kullanır ancak Drive'ı kullanmaz.
Bu codelab'de, Google Cloud genelindeki özellikleri ve API'leri gerçek hayattaki bir kullanım alanına benzer şekilde gösterirken birden fazla teknolojiyi tek bir uygulamada bir araya getirmek istedik. Bu laboratuvarın amacı, hayal gücünüzü kullanmaya teşvik etmek ve kuruluşunuz ile müşterilerinizin karşılaşabileceği zorlukların üstesinden gelmek için hem Cloud Console hem de Google Workspace'i kullanmayı düşünmenizi sağlamaktır.
Neler öğreneceksiniz?
- Birden fazla Google hizmetiyle Google Apps Komut Dosyası'nı kullanma
- Büyük verileri analiz etmek için Google BigQuery'yi kullanma
- Google E-Tablosu oluşturma ve bu dosyaya veri ekleme
- E-Tablolar'da grafik oluşturma
- E-Tablolar'daki verileri ve grafikleri Google Slaytlar sunusuna aktarma
İhtiyacınız olanlar
- İnternete erişimi olan bir web tarayıcısı
- Google Hesabı (Google Workspace hesapları için yönetici onayı gerekebilir)
- Google E-Tablolar hakkında temel bilgi
- E-tabloların A1 notasyonunu okuma
- Temel JavaScript becerileri
- Apps Komut Dosyası geliştirme bilgisi faydalıdır ancak zorunlu değildir.
2. Anket
Bu codelab'i/eğitimi nasıl kullanacaksınız?
Google Workspace geliştirici araçları ve API'leriyle ilgili deneyiminizi nasıl değerlendirirsiniz?
Apps Komut Dosyası ile ilgili deneyiminizi nasıl değerlendirirsiniz?
Cloud Console geliştirici araçları ve API'leriyle ilgili deneyiminizi nasıl değerlendirirsiniz?
3. Genel Bakış
Bu codelab'in ne hakkında olduğunu öğrendiğinize göre yapacaklarınız:
- Mevcut bir Apps Komut Dosyası-BigQuery örneğini alıp çalışır hale getirin.
- Örnekten yararlanarak BigQuery'ye nasıl sorgu göndereceğinizi ve sonuçları nasıl alacağınızı öğrenin.
- Bir Google E-Tablosu oluşturun ve BigQuery'deki sonuçları bu tabloya ekleyin.
- Döndürülen ve E-Tablo'ya eklenen verileri biraz değiştirmek için kodu düzenleyin.
- BigQuery verileri için grafik oluşturmak üzere Apps Komut Dosyası'nda E-Tablolar hizmetini kullanın.
- Google Slaytlar sunusu oluşturmak için Slaytlar hizmetini kullanın.
- Varsayılan başlık slaytına başlık ve alt başlık ekleyin.
- Veri tablosu içeren bir slayt oluşturun ve E-Tablo'nun veri hücrelerini bu slayta aktarın.
- Başka bir slayt oluşturup e-tablo grafiğini bu slayta ekleyin.
Apps Komut Dosyası, BigQuery, E-Tablolar ve Slaytlar hakkında bazı temel bilgilerle başlayalım.
Google Apps Komut Dosyası ve BigQuery
Google Apps Komut Dosyası, Google REST API'lerden daha yüksek düzeyde çalışan bir Google Workspace geliştirme platformudur. Tüm beceri düzeylerindeki geliştiricilerin erişebileceği sunucusuz bir geliştirme ve uygulama barındırma ortamıdır. Apps Komut Dosyası, Google Workspace'in otomasyonu, kapsamının genişletilmesi ve entegrasyonu için kullanılan sunucusuz bir JavaScript çalışma zamanıdır.
Node.js'ye benzer şekilde sunucu taraflı bir JavaScript'tir. Ancak hızlı, eşzamansız ve etkinliğe dayalı uygulama barındırma yerine Google Workspace ile diğer Google hizmetleriyle sıkı entegrasyon elde etmeye odaklanır. Üstelik sunduğu geliştirme ortamı, alışkın olduğunuz ortamdan farklı olabilir. Apps Komut Dosyası size şu olanakları tanır:
- Tarayıcı tabanlı bir kod düzenleyici kullanarak komut dosyaları geliştirebilirsiniz. Apps Komut Dosyası için kullanılan komut satırı dağıtım aracı
clasp'i kullanırken yerel olarak da geliştirme işlemleri gerçekleştirebilirsiniz. - Google Workspace'e ve diğer Google hizmetlerine veya harici hizmetlere erişmek için (Apps Komut Dosyası'nın
URL FetchveyaJDBChizmetlerini kullanarak) özelleştirilmiş bir JavaScript sürümünde kod yazabilirsiniz. - Apps Komut Dosyası bu işlemi sizin için yaptığından yetkilendirme kodu yazmanız gerekmez.
- Uygulamanızı barındırmanız gerekmez. Uygulamanız, buluttaki Google sunucularında barındırılır ve çalışır.
Apps Komut Dosyası, diğer Google teknolojileriyle arayüz oluşturmak için 2 yöntemden yararlanır:
- Yerleşik hizmet olarak
- Gelişmiş hizmet olarak
Yerleşik hizmet, kullanıcı verileri, diğer Google sistemleri ve harici sistemlerle etkileşim kurmak için üst düzey yöntemler sunar. Gelişmiş hizmet, temelde bir Google Workspace API veya Google REST API için ince bir sarmalayıcıdır. Gelişmiş hizmetler, REST API için eksiksiz kapsam sunar. Genellikle yerleşik hizmetlerden daha fazlasını gerçekleştirebilse de bu hizmetler daha karmaşık kodların kullanılmasını gerektirir (Yine de REST API'yi kullanmaktan daha kolaydır). Ayrıca gelişmiş hizmetlerin kullanılmadan önce komut dosyası projesi için etkinleştirilmiş olması gerekir.
Daha kolay kullanılabilmesi ve gelişmiş hizmetlere göre daha fazla iş yapabilmesi nedeniyle, mümkünse geliştiriciler yerleşik hizmet kullanmalıdır. Ancak bazı Google API'lerinin yerleşik hizmetleri yoktur. Bu nedenle bazı durumlarda tek seçenek, gelişmiş hizmeti kullanmak olabilir. Örneğin, Google BigQuery'nin yerleşik hizmeti yoktur ancak BigQuery Hizmeti mevcuttur. BigQuery hizmeti, büyük veri topluluklarında (ör. birden fazla terabayt) sorgu çalıştırmak için Google BigQuery API'yi kullanmanıza olanak tanıyan bir Cloud Console hizmetidir. Bu hizmet, sonuçları saniyeler içinde sağlayabilir.
Apps Komut Dosyası'ndan E-Tablolar ve Slaytlar'a erişme
BigQuery'nin aksine, hem E-Tablolar hem de Slaytlar'da yerleşik hizmetler bulunur. Ayrıca, yalnızca API'de bulunan özelliklere erişmek için gelişmiş hizmetler de sunar. Koda geçmeden önce hem yerleşik E-Tablolar hem de Slaytlar hizmetleriyle ilgili dokümanları inceleyin. E-Tablolar ve Slaytlar'ın gelişmiş hizmetleriyle ilgili dokümanlar da olduğunu unutmayın.
4. 1. görev: BigQuery'yi çalıştırma ve sonuçları E-Tablolar'a kaydetme
Giriş
Bu codelab'in büyük bir bölümünü bu ilk görevle tamamlayacağız. Hatta bu bölümü tamamladığınızda tüm codelab'in neredeyse yarısını bitirmiş olacaksınız. Birkaç alt bölüme ayrılan bu bölümde:
- Hem Google Apps Komut Dosyası hem de Cloud Console projesi oluşturun.
- BigQuery gelişmiş hizmetine erişimi etkinleştirin.
- Komut dosyası düzenleyiciyi açın ve uygulama kaynak kodunu girin.
- Uygulama yetkilendirme sürecini (OAuth2) tamamlama
- BigQuery'ye istek gönderen uygulamayı çalıştırın.
- BigQuery sonuçları kullanılarak oluşturulan yeni Google E-Tablosu'nu inceleyin.
Kurulum
- Apps Komut Dosyası projesi oluşturmak için
script.google.comadresine gidin ve Yeni proje'yi tıklayın. - Apps Komut Dosyası projenizi yeniden adlandırmak için Adsız proje'yi tıklayın, projeniz için bir başlık girin ve Yeniden adlandır'ı tıklayın.
Ardından, BigQuery'deki verileri sorgulamak için bir Cloud Console projesi oluşturmanız gerekir.
- Cloud Console projesi oluşturmak için bu kısayol bağlantısını kullanarak proje oluşturun, projeye bir ad verin ve Oluştur'u tıklayın.
- Proje oluşturma işlemi tamamlandığında sayfada bir bildirim gösterilir. Sayfanın üst kısmındaki projeler listesinde yeni projenizin seçili olduğundan emin olun.
- Menü'yü (
) tıklayın ve API'ler ve Hizmetler > OAuth kullanıcı rızası ekranı'na (doğrudan bağlantı) gidin. - Kuruluşunuzdaki Google Workspace kullanıcıları için bir uygulama oluşturmak üzere Dahili > Oluştur'u tıklayın.
- Uygulama adı alanına "Big Data Codelab" yazın.
- Kullanıcı desteği ve Geliştirici iletişim bilgileri alanlarına iletişim e-postalarını girin.
- Kaydet ve devam et > Kaydet ve devam et'i tıklayın.
- Gezinme çubuğunda Diğer'i
tıklayın ve Proje ayarları'nı (doğrudan bağlantı) seçin. - Proje numarası altında listelenen değeri kopyalayın. (Ayrı bir proje kimliği alanı, codelab'in ilerleyen bölümlerinde kullanılır.)
Ardından, Apps Komut Dosyası projenizi Cloud Console projesine bağlayacaksınız.
- Apps Komut Dosyası düzenleyicisine geçin ve Proje Ayarları 'nı
tıklayın. - Google Cloud Platform (GCP) Projesi bölümünde Projeyi değiştir'i tıklayın.
- Proje numarasını girin ve Projeyi ayarla'yı tıklayın.
- Ardından, BigQuery gelişmiş hizmetini eklemeye başlamak için Düzenleyici 'yi
tıklayın. - Hizmetler'in yanındaki Hizmet ekle'yi
tıklayın. - Hizmet ekle iletişim kutusunda BigQuery API'yi seçip Ekle'yi tıklayın.
Son adım, Cloud Console'da BigQuery API'yi etkinleştirmektir.
- Bunu yapmak için Cloud Console'a geçin ve API'ler ve Hizmetler > Kontrol Paneli'ni tıklayın. (3. adımda oluşturduğunuz projede olduğunuzdan emin olun.)
- API'leri ve Hizmetleri Etkinleştir'i tıklayın.
- "Big query" ifadesini arayın, BigQuery API'yi (BigQuery Data Transfer API değil) seçin ve Etkinleştir'i tıklayarak API'yi etkinleştirin.

Artık uygulama kodunu girmeye, yetkilendirme sürecini tamamlamaya ve bu uygulamayı çalıştırmak için ilk adımları atmaya hazırsınız.
Uygulamayı yükleyip çalıştırma
- Komut dosyası düzenleyicide varsayılan
myFunction()kod bloğunu aşağıdaki kodla değiştirin:
// File name for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud Console Project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');
/**
* Runs a BigQuery query; puts results into a Sheet. You must turn on
* the BigQuery advanced service before you can run this code.
* @see https://developers.google.com/apps-script/advanced/bigquery#run_query
* @see https://github.com/googleworkspace/apps-script-samples/blob/master/advanced/bigquery.gs
*
* @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
* @see https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
*/
function runQuery() {
// Replace sample with your own BigQuery query.
var request = {
query:
'SELECT ' +
'LOWER(word) AS word, ' +
'SUM(word_count) AS count ' +
'FROM [bigquery-public-data:samples.shakespeare] ' +
'GROUP BY word ' +
'ORDER BY count ' +
'DESC LIMIT 10'
};
var queryResults = BigQuery.Jobs.query(request, PROJECT_ID);
var jobId = queryResults.jobReference.jobId;
// Wait for BigQuery job completion (with exponential backoff).
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
}
// Get all results from BigQuery.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
// Return null if no data returned.
if (!rows) {
return Logger.log('No rows returned.');
}
// Create the results spreadsheet.
var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
var sheet = spreadsheet.getActiveSheet();
// Add headers to Sheet.
var headers = queryResults.schema.fields.map(function(field) {
return field.name.toUpperCase();
});
sheet.appendRow(headers);
// Append the results.
var data = new Array(rows.length);
for (var i = 0; i < rows.length; i++) {
var cols = rows[i].f;
data[i] = new Array(cols.length);
for (var j = 0; j < cols.length; j++) {
data[i][j] = cols[j].v;
}
}
// Start storing data in row 2, col 1
var START_ROW = 2; // skip header row
var START_COL = 1;
sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
}
- Kaydet'i
tıklayın.
Code.gssimgesinin yanında Diğer
> Yeniden adlandır'ı tıklayın. Başlığı Code.gsyerinebq-sheets-slides.jsolarak değiştirin.- Ardından, BigQuery'yi sorgulayan ve sonuçları Google E-Tablosu'na yazan kodu inceleyelim. Bu bilgiyi
runQuery()sayfasının üst kısmında görebilirsiniz:
SELECT
LOWER(word) AS word,
SUM(word_count) AS count
FROM [bigquery-public-data:samples.shakespeare]
GROUP BY word
ORDER BY count
DESC LIMIT 10
Bu sorgu, Shakespeare'in eserleri (BigQuery'nin herkese açık veri kümesinin bir parçasıdır) içinde arama yapar ve eserlerin tümünde en sık kullanılmış olan 10 kelimeyi, kullanım sayısına göre sıralayarak gösterir. Bu derlemeyi elle yapmanın ne kadar zor olacağını hayal ettiğinizde BigQuery'nin ne kadar yararlı olabileceği hakkında bir fikir edinebilirsiniz.
İşlev, geçerli bir Cloud Console proje kimliği gerektiren bir PROJECT_ID değişkeni de bildirir. Değişkenin altındaki if ifadesi, proje kimliği olmadan uygulamanın devam etmesini engellemek için kullanılır.
- Cloud Console projenize geçin, gezinme çubuğunda Diğer'i
tıklayın ve Proje ayarları'nı seçin. - Proje kimliği altında listelenen değeri kopyalayın.
- Apps Komut Dosyası Düzenleyicisi'ne geri dönün,
bq-sheets-slides.jsiçindePROJECT_IDdeğişkenini bulun ve değeri ekleyin. - Kaydet
> Çalıştır'ı tıklayın.
- Devam etmek için İzinleri incele'yi tıklayın.
- Komut dosyası çalışmaya başladığında yerleşik yürütme günlüğü açılır ve komut dosyası işlemlerini gerçek zamanlı olarak günlüğe kaydeder.
- Yürütme günlüğünde "Yürütme tamamlandı" ifadesi gösterildikten sonra Google Drive'ınıza (
drive.google.com) gidin ve "Most common words in all of Shakespeare's works" (Shakespeare'in eserlerinde en sık kullanılan kelimeler) adlı Google E-Tablosu'nu (veyaQUERY_NAMEdeğişkenini güncellediyseniz bu değişkene atadığınız adı) bulun: - En sık kullanılan 10 kelimeyi ve kullanım sayılarını çoktan aza doğru sıralanmış şekilde görmek için e-tabloyu açın:

1. görev özeti
Özetlemek gerekirse, Shakespeare'in tüm eserlerini sorgulayan ve her oyundaki her kelimeyi inceleyen bir kod çalıştırdınız. Kelimeleri sayıp görünme sırasına göre azalan düzende sıraladı. Bu verileri görüntülemek için Google E-Tablolar'ın yerleşik Apps Komut Dosyası hizmetini de kullandınız.
bq-sheets-slides.js için kullandığınız kod, github.com/googlecodelabs/bigquery-sheets-slides adresindeki bu codelab'in GitHub deposunun step1 klasöründe de bulunabilir. Bu kod, BigQuery gelişmiş hizmetler sayfasındaki orijinal örnekten esinlenmiştir. Bu örnekte, Shakespeare tarafından kullanılan ve 10 veya daha fazla karakter içeren en popüler kelimeleri alan biraz farklı bir sorgu çalıştırılıyordu. GitHub deposunda da bir örnek görebilirsiniz.
Shakespeare'in eserleriyle veya diğer herkese açık veri tablolarıyla oluşturabileceğiniz diğer sorgularla ilgileniyorsanız BigQuery örnek tablolarını sorgulama ve bu GitHub deposunu ziyaret edin.
Ayrıca, sorguları Apps Komut Dosyası'nda çalıştırmadan önce Cloud Console'daki BigQuery sayfasını kullanarak da çalıştırabilirsiniz. Bu sayfayı bulmak için Menü'yü
tıklayın ve BigQuery kullanıcı arayüzü > SQL çalışma alanı'na (doğrudan bağlantı) gidin. Örneğin, sorgumuz BigQuery grafik arayüzünde şu şekilde görünür:

5. 2. görev: Google E-Tablolar'da grafik oluşturma
runQuery(), BigQuery'yi kullanmak ve veri sonuçlarını Google E-Tablosu'na göndermek için kullanılır. Ardından, verileri kullanarak bir grafik oluşturmamız gerekir. E-Tablolar'ın newChart() yöntemini çağıran createColumnChart() adlı yeni bir işlev oluşturalım.
- Apps Komut Dosyası düzenleyicisinde,
createColumnChart()işlevinirunQuery()sonrasınabq-sheets-slides.jsolarak ekleyin. Kod, sayfayı alır ve tüm verileri içeren bir sütunsal grafik isteğinde bulunur. İlk satırda sütun başlıkları bulunduğundan veri aralığı A2 hücresinden başlar.
/**
* Uses spreadsheet data to create a column chart.
* @param {Spreadsheet} Spreadsheet containing results data
* @returns {EmbeddedChart} Visualizes the results
* @see https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Retrieve the populated (first) Sheet.
var sheet = spreadsheet.getSheets()[0];
// Data range in Sheet is from cell A2 to B11.
var START_CELL = 'A2'; // skip header row
var END_CELL = 'B11';
// Place chart on Sheet starting on cell E5.
var START_ROW = 5; // row 5
var START_COL = 5; // col E
var OFFSET = 0;
// Create & place chart on the Sheet using above values.
var chart = sheet.newChart()
.setChartType(Charts.ChartType.COLUMN)
.addRange(sheet.getRange(START_CELL + ':' + END_CELL))
.setPosition(START_ROW, START_COL, OFFSET, OFFSET)
.build();
sheet.insertChart(chart);
}
createColumnChart()işlevi için bir e-tablo nesnesi parametresi gerekir. Bu nedenle,runQuery()işlevinicreateColumnChart()işlevine iletebileceğimiz birspreadsheetnesnesi döndürecek şekilde güncellememiz gerekir.runQuery()işlevinin sonunda, e-tablonun başarıyla oluşturulmasını kaydettikten sonraspreadsheetnesnesini döndürün:
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
// NEW: Return the spreadsheet object for later use.
return spreadsheet;
}
- Hem
runQuery()hem decreateColumnChart()işlevini çağırmak içincreateBigQueryPresentation()işlevi oluşturun. BigQuery ve grafik oluşturma işlevini mantıksal olarak ayırmak en iyi uygulamadır:
/**
* Runs the query, adds data and a chart to a spreadsheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
createColumnChart(spreadsheet);
}
- Yukarıda, e-tablo nesnesini döndürerek ve giriş işlevini oluşturarak iki önemli adımı tamamladınız.
runQuery()işlevini daha kullanılabilir hale getirmek için günlük satırınırunQuery()konumundancreateBigQueryPresentation()konumuna taşımamız gerekiyor. Yönteminiz artık aşağıdaki gibi görünmelidir:
/**
* Runs a BigQuery query, adds data and a chart to a spreadsheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl()); // MOVED HERE
createColumnChart(spreadsheet);
}
Yukarıdaki değişiklikleri yaptıktan sonra (PROJECT_ID hariç) bq-sheets-slides.js şu şekilde görünmelidir. Bu kodu GitHub deposunun step2 bölümünde de bulabilirsiniz.
// File name for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud Console Project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');
/**
* Runs a BigQuery query; puts results into a sheet. You must turn on
* the BigQuery advanced service before you can run this code.
* @see https://developers.google.com/apps-script/advanced/bigquery#run_query
* @see https://github.com/googleworkspace/apps-script-samples/blob/master/advanced/bigquery.gs
*
* @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
* @see https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
*/
function runQuery() {
// Replace sample with your own BigQuery query.
var request = {
query:
'SELECT ' +
'LOWER(word) AS word, ' +
'SUM(word_count) AS count ' +
'FROM [bigquery-public-data:samples.shakespeare] ' +
'GROUP BY word ' +
'ORDER BY count ' +
'DESC LIMIT 10'
};
var queryResults = BigQuery.Jobs.query(request, PROJECT_ID);
var jobId = queryResults.jobReference.jobId;
// Wait for BigQuery job completion (with exponential backoff).
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
}
// Get all results from BigQuery.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
// Return null if no data returned.
if (!rows) {
return Logger.log('No rows returned.');
}
// Create the results spreadsheet.
var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
var sheet = spreadsheet.getActiveSheet();
// Add headers to sheet.
var headers = queryResults.schema.fields.map(function(field) {
return field.name.toUpperCase();
});
sheet.appendRow(headers);
// Append the results.
var data = new Array(rows.length);
for (var i = 0; i < rows.length; i++) {
var cols = rows[i].f;
data[i] = new Array(cols.length);
for (var j = 0; j < cols.length; j++) {
data[i][j] = cols[j].v;
}
}
// Start storing data in row 2, col 1
var START_ROW = 2; // skip header row
var START_COL = 1;
sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);
// Return the spreadsheet object for later use.
return spreadsheet;
}
/**
* Uses spreadsheet data to create a columnar chart.
* @param {Spreadsheet} Spreadsheet containing results data
* @returns {EmbeddedChart} Visualizes the results
* @see https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Retrieve the populated (first) sheet.
var sheet = spreadsheet.getSheets()[0];
// Data range in sheet is from cell A2 to B11.
var START_CELL = 'A2'; // skip header row
var END_CELL = 'B11';
// Place chart on Sheet starting on cell E5.
var START_ROW = 5; // row 5
var START_COL = 5; // col E
var OFFSET = 0;
// Create & place chart on the sheet using above values.
var chart = sheet.newChart()
.setChartType(Charts.ChartType.COLUMN)
.addRange(sheet.getRange(START_CELL + ':' + END_CELL))
.setPosition(START_ROW, START_COL, OFFSET, OFFSET)
.build();
sheet.insertChart(chart);
}
/**
* Runs a BigQuery query, adds data and a chart to a spreadsheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
createColumnChart(spreadsheet);
}
Komut dosyası düzenleyicide komut dosyası projenizi kaydedin. Ardından, işlevler listesinden createBigQueryPresentation simgesini seçip Çalıştır'ı tıklayın. İşlem tamamlandıktan sonra Google Drive'ınızda başka bir e-tablo oluşturulur ancak bu sefer e-tabloda, verilerin yanında bir grafik de yer alır:

6. 3. görev: Sonuç verilerini bir slayt kümesine ekleme
Codelab'in son bölümünde Google Slaytlar sunusu oluşturma, başlık slaytına başlık ve alt başlık ekleme, ardından veri hücreleri ve grafik için slayt oluşturma konuları ele alınmaktadır.
- Apps Komut Dosyası düzenleyicisinde,
createSlidePresentation()işlevinicreateColumnChart()sonrasınabq-sheets-slides.jsolarak ekleyin. Slayt sunusuyla ilgili tüm çalışmalar bu işlevde yapılır. Öncelikle bir slayt kümesi oluşturun, ardından varsayılan başlık slaytına bir başlık ve alt başlık ekleyin.
/**
* Create presentation with spreadsheet data and a chart
* @param {Spreadsheet} Spreadsheet containing results data
* @param {EmbeddedChart} Sheets chart to embed on a slide
* @returns {Presentation} Slide deck with the results
* @see https://developers.google.com/apps-script/reference/slides/presentation
*/
function createSlidePresentation(spreadsheet, chart) {
// Create the presentation.
var deck = SlidesApp.create(QUERY_NAME);
// Populate the title slide.
var [title, subtitle] = deck.getSlides()[0].getPageElements();
title.asShape().getText().setText(QUERY_NAME);
subtitle.asShape().getText().setText('using Google Cloud Console and Google Workspace APIs:\n' +
'Google Apps Script, BigQuery, Sheets, Slides');
createSlidePresentation()kodu için sonraki adım, hücredeki verileri Google E-Tablosu'ndan yeni slayt kümesine aktarmaktır. İşleve aşağıdaki kod snippet'ini ekleyin:
// Data range to copy is from cell A1 to B11
var START_CELL = 'A1'; // include header row
var END_CELL = 'B11';
// Add the table slide and insert an empty table on it with
// the dimensions of the data range; fails if the sheet is empty.
var tableSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
var sheetValues = spreadsheet.getSheets()[0].getRange(
START_CELL + ':' + END_CELL).getValues();
var table = tableSlide.insertTable(sheetValues.length, sheetValues[0].length);
// Populate the table with spreadsheet data.
for (var i = 0; i < sheetValues.length; i++) {
for (var j = 0; j < sheetValues[0].length; j++) {
table.getCell(i, j).getText().setText(String(sheetValues[i][j]));
}
}
createSlidePresentation()için son adım, başka bir slayt ekleyip grafiği e-tablodan içe aktararakPresentationnesnesini döndürmektir. İşleve aşağıdaki kod snippet'ini ekleyin:
// Add a chart slide and insert the chart on it.
var chartSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
chartSlide.insertSheetsChart(chart);
// Return the presentation object for later use.
return deck;
}
- İşlevimiz tamamlandığına göre imzasını tekrar inceleyin.
createSlidePresentation()için hem e-tablo hem de grafik nesnesi parametreleri gerekir.runQuery()işlevini zatenSpreadsheetnesnesini döndürecek şekilde düzenlemiştik. Şimdi decreateColumnChart()işlevinde benzer bir değişiklik yaparak grafik nesnesi (EmbeddedChart) döndürmesini sağlamamız gerekiyor.createColumnChart()işlevine dönün ve aşağıdaki kod snippet'ini işlevin sonuna ekleyin:
// NEW: Return the chart object for later use.
return chart;
}
createColumnChart()artık bir grafik nesnesi döndürdüğünden grafiği bir değişkene kaydetmemiz gerekiyor. Ardından, hem e-tablo hem de grafik değişkenlerinicreateSlidePresentation()'a geçiririz. Ayrıca, yeni oluşturulan e-tablonun URL'sini kaydettiğimiz için yeni slayt sunusunun URL'sini de kaydedelim.createBigQueryPresentation()dosyanızı aşağıdaki gibi görünecek şekilde güncelleyin:
/**
* Runs a BigQuery query, adds data and a chart to a spreadsheet,
* and adds the data and chart to a new slide presentation.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
var chart = createColumnChart(spreadsheet); // UPDATED
var deck = createSlidePresentation(spreadsheet, chart); // NEW
Logger.log('Results slide deck created: %s', deck.getUrl()); // NEW
}
- Kaydedip
createBigQueryPresentation()'ı tekrar çalıştırın. Ancak bu işlem yürütülmeden önce uygulamanızın, Google Slaytlar sunularını görüntülemek ve yönetmek için kullanıcınızdan bir grup izin daha alması gerekir. Bu izinleri inceleyip onayladıktan sonra uygulama eskisi gibi çalışmaya devam eder. - Artık oluşturulan e-tabloya ek olarak aşağıda gösterilen şekilde 3 slayt (başlık, veri tablosu, veri grafiği) içeren yeni bir Slaytlar sunusu da alırsınız:



7. Sonuç
Tebrikler, Google Cloud'un her iki tarafını da kullanan bir uygulama oluşturdunuz. Bu işlev, herkese açık veri kümelerinden birini sorgulayan bir Google BigQuery isteği gerçekleştirir, sonuçları depolamak için bir Google E-Tablolar e-tablosu oluşturur, verilere dayalı bir grafik ekler ve son olarak e-tablodaki veri ve grafik sonuçlarını içeren bir Google Slaytlar sunusu oluşturur.
Teknik olarak bu işlemleri gerçekleştirdiniz. Daha kapsamlı bir açıklama yapmak gerekirse büyük veri analizinden yola çıkıp paydaşlara sunabileceğiniz bir sonuç elde ettiniz. Üstelik bunların hepsini kodlama yaparak tamamen otomatik şekilde gerçekleştirdiniz. Bu örneğin, kendi projelerinize göre özelleştirme konusunda size ilham vereceğini umuyoruz. Bu codelab'in sonunda, bu örnek uygulamayı nasıl daha da geliştirebileceğinizle ilgili bazı öneriler sunacağız.
Son görevdeki değişikliklerle (PROJECT_ID hariç) birlikte bq-sheets-slides.js artık şu şekilde görünmelidir:
/**
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// File name for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud Console Project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');
/**
* Runs a BigQuery query; puts results into a spreadsheet. You must turn on
* the BigQuery advanced service before you can run this code.
* @see https://developers.google.com/apps-script/advanced/bigquery#run_query
* @see https://github.com/googleworkspace/apps-script-samples/blob/master/advanced/bigquery.gs
*
* @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
* @see https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
*/
function runQuery() {
// Replace sample with your own BigQuery query.
var request = {
query:
'SELECT ' +
'LOWER(word) AS word, ' +
'SUM(word_count) AS count ' +
'FROM [bigquery-public-data:samples.shakespeare] ' +
'GROUP BY word ' +
'ORDER BY count ' +
'DESC LIMIT 10'
};
var queryResults = BigQuery.Jobs.query(request, PROJECT_ID);
var jobId = queryResults.jobReference.jobId;
// Wait for BigQuery job completion (with exponential backoff).
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
}
// Get all results from BigQuery.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
// Return null if no data returned.
if (!rows) {
return Logger.log('No rows returned.');
}
// Create the results spreadsheet.
var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
var sheet = spreadsheet.getActiveSheet();
// Add headers to sheet.
var headers = queryResults.schema.fields.map(function(field) {
return field.name.toUpperCase();
});
sheet.appendRow(headers);
// Append the results.
var data = new Array(rows.length);
for (var i = 0; i < rows.length; i++) {
var cols = rows[i].f;
data[i] = new Array(cols.length);
for (var j = 0; j < cols.length; j++) {
data[i][j] = cols[j].v;
}
}
// Start storing data in row 2, col 1
var START_ROW = 2; // skip header row
var START_COL = 1;
sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);
// Return the spreadsheet object for later use.
return spreadsheet;
}
/**
* Uses spreadsheet data to create a column chart.
* @param {Spreadsheet} Spreadsheet containing results data
* @returns {EmbeddedChart} Visualizes the results
* @see https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Retrieve the populated (first) sheet.
var sheet = spreadsheet.getSheets()[0];
// Data range in sheet is from cell A2 to B11.
var START_CELL = 'A2'; // skip header row
var END_CELL = 'B11';
// Place chart on sheet starting on cell E5.
var START_ROW = 5; // row 5
var START_COL = 5; // col E
var OFFSET = 0;
// Create & place chart on the sheet using above values.
var chart = sheet.newChart()
.setChartType(Charts.ChartType.COLUMN)
.addRange(sheet.getRange(START_CELL + ':' + END_CELL))
.setPosition(START_ROW, START_COL, OFFSET, OFFSET)
.build();
sheet.insertChart(chart);
// Return the chart object for later use.
return chart;
}
/**
* Create presentation with spreadsheet data and a chart
* @param {Spreadsheet} Spreadsheet containing results data
* @param {EmbeddedChart} Sheets chart to embed on a slide
* @returns {Presentation} Slide deck with the results
* @see https://developers.google.com/apps-script/reference/slides/presentation
*/
function createSlidePresentation(spreadsheet, chart) {
// Create the presentation.
var deck = SlidesApp.create(QUERY_NAME);
// Populate the title slide.
var [title, subtitle] = deck.getSlides()[0].getPageElements();
title.asShape().getText().setText(QUERY_NAME);
subtitle.asShape().getText().setText('using Google Cloud Console and Google Workspace APIs:\n' +
'Google Apps Script, BigQuery, Sheets, Slides');
// Data range to copy is from cell A1 to B11
var START_CELL = 'A1'; // include header row
var END_CELL = 'B11';
// Add the table slide and insert an empty table on it with
// the dimensions of the data range; fails if the sheet is empty.
var tableSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
var sheetValues = spreadsheet.getSheets()[0].getRange(
START_CELL + ':' + END_CELL).getValues();
var table = tableSlide.insertTable(sheetValues.length, sheetValues[0].length);
// Populate the table with spreadsheet data.
for (var i = 0; i < sheetValues.length; i++) {
for (var j = 0; j < sheetValues[0].length; j++) {
table.getCell(i, j).getText().setText(String(sheetValues[i][j]));
}
}
// Add a chart slide and insert the chart on it.
var chartSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
chartSlide.insertSheetsChart(chart);
// Return the presentation object for later use.
return deck;
}
/**
* Runs a BigQuery query, adds data and a chart to a spreadsheet,
* and adds the data and chart to a new slide presentation.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
var chart = createColumnChart(spreadsheet);
var deck = createSlidePresentation(spreadsheet, chart);
Logger.log('Results slide deck created: %s', deck.getUrl());
}
Bu kod örneğini GitHub deposundaki final klasöründe de bulabilirsiniz.
8. Ek kaynaklar
Bu codelab'de ele alınan materyalleri daha yakından incelemenize ve Google geliştirici araçlarına programatik şekilde erişmenin diğer yöntemlerini keşfetmenize yardımcı olacak ek kaynakları aşağıda bulabilirsiniz.
Bu uygulamayla ilgili kaynaklar
Belgeler
- Google Apps Komut Dosyası belgelerinin yer aldığı site
- Apps Komut Dosyası: E-Tablo Hizmeti
- Apps Komut Dosyası: Slaytlar hizmeti
- Apps Komut Dosyası: BigQuery gelişmiş hizmeti
Videolar
- Google Apps Komut Dosyası ile ilgili bir sır daha
- Google Haritalar'a e-tablolardan erişme
- Totally Unscripted
- Google Workspace Developer Show
Haberler ve güncellemeler
- Google Cloud Platform blogu
- Google Cloud Veri Analizi blogu
- Google Developers blogu
- Twitter: Google Developers (@googledevs)
- Google Workspace Developers blogu
- Twitter: Google Workspace Developers (@workspacedevs)
Diğer Codelab'ler
Giriş
- [Google E-Tablolar] Google E-Tablolar ile Apps Komut Dosyası'nın temelleri
- [REST API'ler] Google Drive'ınızdaki dosya ve klasörlere erişmek için Google Workspace ve Google API'lerini kullanma
Orta düzey
- [Apps Komut Dosyası] CLASP Apps Komut Dosyası komut satırı aracı
- [Apps Komut Dosyası] Gmail için Google Workspace eklentileri
- [Apps Komut Dosyası] Hangouts Chat için özel botlar
- [REST API'ler] Google E-Tablolar'ı uygulamanızın raporlama aracı olarak kullanma
- [REST API'ler] BigQuery API'yi kullanarak Google Slaytlar sunuları oluşturma
9. Sonraki adım: Kodlama yarışmaları
Aşağıda, bu codelab'de oluşturduğumuz örneği geliştirebileceğiniz veya artırabileceğiniz farklı yöntemler listelenmiştir. Bu liste tam kapsamlı olmamakla birlikte, bir sonraki adımı nasıl atabileceğinize dair bazı ilham verici fikirler sunar.
- Uygulama: JavaScript kullanmak veya Apps Komut Dosyası'nın getirdiği kısıtlamalarla sınırlı kalmak istemiyor musunuz? Bu uygulamayı, Google BigQuery, E-Tablolar ve Slaytlar için REST API'leri kullanan favori programlama dilinize taşıyın.
- BigQuery: Shakespeare veri kümesi için ilginizi çeken farklı bir sorguyla deneme yapın. Başka bir örnek sorguyu orijinal Apps Komut Dosyası BigQuery örnek uygulamasında bulabilirsiniz.
- BigQuery: Size daha anlamlı gelen bir herkese açık veri kümesi bulmak için BigQuery'nin diğer veri kümeleriyle denemeler yapın.
- BigQuery: Daha önce, Shakespeare'in eserleriyle veya diğer herkese açık veri tablolarıyla oluşturabileceğiniz diğer sorgulardan bahsetmiştik. Bu dokümanlara bu web sayfasından ve bu GitHub deposundan ulaşabilirsiniz.
- E-Tablolar: Grafik Galerisi'ndeki diğer grafik türleriyle denemeler yapın.
- E-Tablolar ve BigQuery: Kendi büyük e-tablo veri kümenizi kullanın. 2016'da BigQuery ekibi, geliştiricilerin veri kaynağı olarak E-Tablo kullanmasına olanak tanıyan bir özellik sundu. Daha fazla bilgi için (Google BigQuery, Google Drive ile entegre olur) başlıklı makaleyi inceleyin.
- Slaytlar: Oluşturulan sunuya, büyük veri analizinizle ilişkili resimler veya diğer öğeler gibi başka slaytlar ekleyin. Slaytlar'ın yerleşik hizmeti ile ilgili referans belgeleri burada bulabilirsiniz.
- Google Workspace: Apps Komut Dosyası'ndan diğer Google Workspace veya Google destekli hizmetleri kullanın. Örneğin, Gmail, Takvim, Dokümanlar, Drive, Haritalar, Analytics, YouTube vb. ile diğer gelişmiş hizmetler. Daha fazla bilgi için hem yerleşik hem de gelişmiş hizmetlerin referans genel bakış sayfasına gidin.