Google Sheets और Slides का इस्तेमाल करके, अपने बिग डेटा को अहम जानकारी में बदलें

डेटा वैज्ञानिकों के लिए, बड़े डेटा का विश्लेषण करने वाले कई टूल उपलब्ध हैं. हालांकि, आखिर में आपको उन नतीजों के बारे में मैनेजमेंट को बताना होता है. कागज़ पर या डेटाबेस में मौजूद कई नंबरों को मुख्य हितधारकों के सामने पेश करना मुश्किल होता है. यह इंटरमीडिएट Google Apps Script कोडलैब, Google के दो डेवलपर प्लैटफ़ॉर्म, G Suite और Google Cloud Platform (GCP) का इस्तेमाल करता है. इससे आपको आखिरी चरण पूरा करने में मदद मिलती है.

Google Cloud के डेवलपर टूल की मदद से, डेटा का बारीकी से विश्लेषण किया जा सकता है. इसके बाद, उन नतीजों को स्प्रेडशीट में डाला जा सकता है. साथ ही, उस डेटा से स्लाइड प्रज़ेंटेशन जनरेट किया जा सकता है. इससे मैनेजमेंट को नतीजे दिखाने के लिए बेहतर प्लैटफ़ॉर्म मिलता है. इस कोडलैब में, GCP के BigQuery API (Apps Script की ऐडवांस सेवा के तौर पर) और Google Sheets और Google Slides के लिए, Apps Script की बिल्ट-इन सेवाओं के बारे में बताया गया है.

मोटिवेशन/प्रायर आर्ट

इस कोडलैब में दिए गए सैंपल ऐप्लिकेशन को इन अन्य कोड सैंपल से प्रेरणा मिली है...

Slides API कोडलैब के सैंपल ऐप्लिकेशन में BigQuery और Slides की सुविधाएं भी शामिल हैं. हालांकि, यह इस कोडलैब के सैंपल ऐप्लिकेशन से कई तरह से अलग है:

  • Node.js ऐप्लिकेशन बनाम हमारा Apps Script ऐप्लिकेशन
  • Apps Script सेवाओं का इस्तेमाल करते समय, REST API का इस्तेमाल करता है
  • यह ऐप्लिकेशन Google Drive का इस्तेमाल करता है, लेकिन Google Sheets का नहीं. वहीं, यह ऐप्लिकेशन Sheets का इस्तेमाल करता है, लेकिन Drive का नहीं

इस कोडलैब के लिए, हम चाहते थे कि ज़्यादा से ज़्यादा टेक्नोलॉजी को एक ही ऐप्लिकेशन में शामिल किया जाए. साथ ही, Google Cloud की सुविधाओं और एपीआई को इस तरह से दिखाया जाए कि वे असल ज़िंदगी में इस्तेमाल होने वाले उदाहरणों से ज़्यादा मिलते-जुलते हों. हमारा मकसद आपको अपनी कल्पना का इस्तेमाल करने के लिए प्रेरित करना है. साथ ही, अपने संगठन या ग्राहकों की मुश्किल समस्याओं को हल करने के लिए, GCP और G Suite, दोनों का इस्तेमाल करने के बारे में सोचना है.

आपको क्या सीखने को मिलेगा

  • Google की कई सेवाओं (GCP और G Suite) के साथ Google Apps Script का इस्तेमाल कैसे करें
  • बड़े डेटा का विश्लेषण करने के लिए, Google BigQuery का इस्तेमाल कैसे करें
  • Google शीट बनाने और उसमें डेटा डालने का तरीका
  • Sheets में नया चार्ट बनाने का तरीका
  • Sheets से Google Slides प्रज़ेंटेशन में चार्ट और डेटा ट्रांसफ़र करने का तरीका

आपको किन चीज़ों की ज़रूरत होगी

  • इंटरनेट और वेब ब्राउज़र का ऐक्सेस
  • Google खाता (G Suite खातों के लिए, एडमिन की मंज़ूरी ज़रूरी हो सकती है)
  • JavaScript की बुनियादी जानकारी
  • Apps Script डेवलपमेंट की जानकारी होना फ़ायदेमंद हो सकता है, लेकिन यह ज़रूरी नहीं है

इस कोडलैब/ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?

इसे सिर्फ़ जानकारी के लिए पढ़ें. हो सकता है कि इसे तकनीकी टीम के सदस्यों के साथ शेयर करें इसे जितना हो सके उतना पढ़ें और इसमें दिए गए ज़्यादा से ज़्यादा टास्क पूरे करें मैं हर हाल में पूरा कोडलैब पूरा करूंगा

G Suite के डेवलपर टूल और एपीआई इस्तेमाल करने के अपने अनुभव को आप क्या रेटिंग देंगे?

शुरुआती सामान्य एडवांस

खास तौर पर, Apps Script के साथ अपने अनुभव को आप क्या रेटिंग देंगे?

शुरुआती सामान्य एडवांस

GCP के डेवलपर टूल और एपीआई इस्तेमाल करने के अपने अनुभव को आप क्या रेटिंग देंगे?

शुरुआती स्तर सामान्य स्तर एडवांस लेवल

अब आपको पता चल गया है कि यह कोडलैब किस बारे में है. अब आपको क्या करना है?

  1. Apps Script और BigQuery के किसी मौजूदा सैंपल का इस्तेमाल करना और उसे चालू करना
  2. उस सैंपल से, BigQuery को क्वेरी भेजने और उसके नतीजे पाने का तरीका जानें
  3. Google शीट बनाएं और उसमें BigQuery से मिले नतीजों को भरें
  4. कोड में थोड़ा बदलाव करके, शीट में जोड़े गए और दिखाए गए डेटा में थोड़ा बदलाव करना
  5. Apps Script में Sheets सेवा का इस्तेमाल करके, BigQuery के डेटा के लिए चार्ट बनाना
  6. नई स्लाइड प्रज़ेंटेशन बनाने के लिए, Slides सेवा का इस्तेमाल करना
  7. सभी नए स्लाइड डेक के लिए, अपने-आप बनने वाली डिफ़ॉल्ट टाइटल स्लाइड में टाइटल और सबटाइटल जोड़ना
  8. डेटा टेबल वाली नई स्लाइड बनाएं. इसके बाद, शीट की डेटा सेल को उसमें इंपोर्ट करें
  9. एक और नई स्लाइड जोड़ें और उसमें स्प्रेडशीट चार्ट जोड़ें

चलिए, Apps Script, BigQuery, Sheets, और Slides के बारे में कुछ बुनियादी जानकारी से शुरुआत करते हैं.

Google Apps Script और BigQuery

Google Apps Script, G Suite का डेवलपमेंट प्लैटफ़ॉर्म है. यह Google REST API के मुकाबले ज़्यादा बेहतर तरीके से काम करता है. यह सर्वरलेस डेवलपमेंट और ऐप्लिकेशन होस्टिंग एनवायरमेंट है. इसे डेवलपर के अलग-अलग स्किल लेवल के हिसाब से ऐक्सेस किया जा सकता है. एक वाक्य में, "Apps Script, G Suite के ऑटोमेशन, एक्सटेंशन, और इंटिग्रेशन के लिए सर्वरलेस JavaScript रनटाइम है."

यह सर्वर-साइड JavaScript है, जो Node.js की तरह ही है. हालांकि, यह तेज़ी से एसिंक्रोनस इवेंट-ड्रिवन ऐप्लिकेशन होस्टिंग के बजाय, G Suite और Google की अन्य सेवाओं के साथ बेहतर तरीके से इंटिग्रेट करने पर फ़ोकस करता है. इसमें एक डेवलपमेंट एनवायरमेंट भी होता है, जो आपके इस्तेमाल किए गए एनवायरमेंट से पूरी तरह अलग हो सकता है. Apps Script की मदद से, ये काम किए जा सकते हैं:

  • ब्राउज़र पर आधारित कोड एडिटर में डेवलप करें. हालांकि, clasp का इस्तेमाल करने पर, स्थानीय तौर पर डेवलप करने का विकल्प चुना जा सकता है. यह Apps Script के लिए, कमांड-लाइन डिप्लॉयमेंट टूल है
  • G Suite और Google या बाहरी सेवाओं को ऐक्सेस करने के लिए, JavaScript के खास वर्शन में कोड (Apps Script URLfetch या Jdbc सेवाओं के ज़रिए)
  • Apps Script, अनुमति देने वाले कोड को अपने-आप लिखता है. इसलिए, आपको इसे लिखने की ज़रूरत नहीं होती
  • आपको अपना ऐप्लिकेशन होस्ट करने की ज़रूरत नहीं है. यह क्लाउड में Google के सर्वर पर मौजूद होता है और वहीं से चलता है

ध्यान दें: Apps Script के बारे में आपको सिखाना, इस कोडलैब के दायरे से बाहर है. इसके लिए, ऑनलाइन कई संसाधन उपलब्ध हैं. आधिकारिक दस्तावेज़ में, क्विकस्टार्ट के साथ खास जानकारी, ट्यूटोरियल, और वीडियो भी शामिल हैं. आखिर में, Apps Script के बारे में जानकारी देने वाले कोडलैब को पूरा करना न भूलें. इसे इस कोडलैब को शुरू करने से पहले पूरा करना ज़रूरी है.

Apps Script, Google की अन्य टेक्नोलॉजी के साथ दो अलग-अलग तरीकों से इंटरैक्ट करती है:

  • पहले से मौजूद/नेटिव सेवा
  • ऐडवांस सेवा

बिल्ट-इन सेवा, ऐसे तरीके उपलब्ध कराती है जिनका इस्तेमाल करके G Suite या Google प्रॉडक्ट के डेटा को ऐक्सेस किया जा सकता है. इसके अलावा, इसमें अन्य काम के यूटिलिटी तरीके भी शामिल होते हैं. ऐडवांस सेवा, G Suite या Google REST API के चारों ओर एक पतला रैपर होता है. ऐडवांस सेवाओं में, REST API की सभी सुविधाएं मिलती हैं. साथ ही, ये अक्सर बिल्ट-इन सेवाओं से ज़्यादा काम कर सकती हैं. हालांकि, इनके लिए ज़्यादा जटिल कोड की ज़रूरत होती है. फिर भी, इनका इस्तेमाल REST API से ज़्यादा आसान होता है. ऐडवांस सेवाओं का इस्तेमाल करने से पहले, उन्हें स्क्रिप्ट प्रोजेक्ट के लिए चालू करना ज़रूरी है.

जब भी मुमकिन हो, डेवलपर को पहले से मौजूद सेवा का इस्तेमाल करना चाहिए. ऐसा इसलिए, क्योंकि इनका इस्तेमाल करना आसान होता है और ये ऐडवांस सेवाओं की तुलना में ज़्यादा काम करती हैं. हालांकि, कुछ Google API में पहले से मौजूद सेवाएं नहीं होती हैं. इसलिए, ऐडवांस सेवा ही एकमात्र विकल्प हो सकता है. Google BigQuery इसका एक उदाहरण है... इसमें कोई इन-बिल्ट सेवा उपलब्ध नहीं है, लेकिन BigQuery की ऐडवांस सेवा उपलब्ध है. (कोई सेवा न होने से बेहतर है, है न?) अगर आपने BigQuery का इस्तेमाल पहले कभी नहीं किया है, तो बता दें कि यह GCP की एक सेवा है. इसकी मदद से, बहुत बड़े डेटा कॉर्पस पर आसान (या मुश्किल) क्वेरी की जा सकती हैं. जैसे, कई टेराबाइट के डेटा पर क्वेरी की जा सकती है. हालांकि, इसके बावजूद यह कुछ ही सेकंड में नतीजे दे सकता है.

Apps Script से Google Sheets और Slides ऐक्सेस करना

BigQuery के उलट, Google Sheets और Slides, दोनों में बिल्ट-इन सेवाएं होती हैं. साथ ही, इनमें ऐडवांस सेवाएं भी होती हैं. इनका इस्तेमाल सिर्फ़ उन सुविधाओं को ऐक्सेस करने के लिए किया जाता है जो सिर्फ़ एपीआई में मिलती हैं. कोड में जाने से पहले, Sheets और Slides की सेवाओं के दस्तावेज़ देखें. ज़रूर, बेहतर सेवाओं के लिए भी दस्तावेज़ उपलब्ध हैं. यहां Sheets और Slides के लिए दस्तावेज़ दिए गए हैं.

परिचय

हम इस पहले टास्क के साथ, इस कोडलैब का एक बड़ा हिस्सा पूरा करने जा रहे हैं. दरअसल, यहां तक पहुंचने के बाद, आपका आधा कोडलैब पूरा हो जाएगा. इसे कई सब-सेक्शन में बांटा गया है. आपको ये सभी काम करने होंगे:

  • नया Google Apps Script प्रोजेक्ट शुरू करना
  • BigQuery की ऐडवांस सेवा का ऐक्सेस चालू करना
  • डेवलपमेंट एडिटर पर जाएं और ऐप्लिकेशन का सोर्स कोड डालें
  • ऐप्लिकेशन को अनुमति देने की प्रोसेस (OAuth2) पूरी करना
  • BigQuery को अनुरोध भेजने वाले ऐप्लिकेशन को चलाएं
  • BigQuery से मिले नतीजों के आधार पर बनाई गई नई Google शीट देखना

सेटअप

  1. a) script.google.com पर जाकर, नया Apps Script प्रोजेक्ट बनाएं . G Suite की अलग-अलग प्रॉडक्ट लाइन होती हैं. साथ ही, नया प्रोजेक्ट बनाने का तरीका इस बात पर निर्भर करता है कि आपने कौन सा वर्शन इस्तेमाल किया है. अगर सिर्फ़ Gmail खाते का इस्तेमाल किया जा रहा है और आपने हाल ही में प्रोजेक्ट बनाना शुरू किया है, तो आपको एक खाली स्क्रीन दिखेगी. साथ ही, आपको अपना पहला प्रोजेक्ट बनाने के लिए एक बटन दिखेगा:


b) अगर ऐसा नहीं है, तो आपको ऊपर बाईं ओर अपने सभी प्रोजेक्ट और बड़ा +नया बटन दिखेगा. इस पर क्लिक करें.



c) अगर ऊपर दिए गए दोनों विकल्प नहीं दिख रहे हैं, तो आपकी स्क्रीन नीचे दी गई इमेज की तरह दिख सकती है. अगर ऐसा है, तो सबसे ऊपर बाएं कोने में मौजूद हैमबर्गर मेन्यू आइकॉन ढूंढें और +नई स्क्रिप्ट चुनें.



d) कमांड-लाइन का इस्तेमाल करने वाले लोगों के लिए. आपका टूल clasp है. खास तौर पर, आपको clasp create कमांड चलानी होगी.

e) नया स्क्रिप्ट प्रोजेक्ट बनाने का आखिरी तरीका यह है कि आप सीधे शॉर्टकट लिंक: https://script.google.com/create पर जाएं.

  1. नया प्रोजेक्ट शुरू करने के लिए, आपने जिस भी तकनीक का इस्तेमाल किया हो, आपको Apps Script कोड एडिटर में ले जाया जाएगा. यह स्क्रीन इस तरह दिखती है:


  2. फ़ाइल > सेव करें पर क्लिक करें और अपने प्रोजेक्ट को कोई नाम दें.
  3. इसके बाद, आपको BigQuery क्वेरी चलाने के लिए, Google Cloud Console प्रोजेक्ट बनाना होगा.
  1. नया प्रोजेक्ट बनाएं, उसे कोई नाम दें, बिलिंग खाता चुनें, और बनाएं पर क्लिक करें.
  1. प्रोजेक्ट बन जाने के बाद, पेज के सबसे ऊपर दाईं ओर एक सूचना दिखती है. प्रोजेक्ट खोलने के लिए, प्रोजेक्ट बनाएं: <प्रोजेक्ट का नाम> एंट्री पर क्लिक करें.
  2. सबसे ऊपर बाईं ओर मौजूद मेन्यू आइकॉन पर क्लिक करें. इसके बाद, एपीआई और सेवाएं > क्रेडेंशियल पर जाएं. OAuth सहमति स्क्रीन टैब (सीधा लिंक) पर क्लिक करें.
  3. ऐप्लिकेशन का नाम फ़ील्ड में, "Big Data Codelab" डालें. इसके बाद, सबसे नीचे मौजूद सेव करें बटन पर क्लिक करें.
  4. मेन्यू को बड़ा करने के लिए, सबसे ऊपर दाईं ओर मौजूद तीन बिंदु वाले आइकॉनपर क्लिक करें. इसके बाद, प्रोजेक्ट की सेटिंग (सीधा लिंक) को चुनें.
  5. प्रोजेक्ट नंबर में दी गई वैल्यू को कॉपी करें. (एक अलग फ़ील्ड प्रॉडक्ट आईडी है, जिसका इस्तेमाल हम बाद में कोडलैब में करेंगे.)
  6. App Script Editor में वापस जाकर, संसाधन > Cloud Platform प्रोजेक्ट पर क्लिक करें.
  7. टेक्स्ट बॉक्स में प्रोजेक्ट नंबर डालें और प्रोजेक्ट सेट करें पर क्लिक करें. नई विंडो खुलने पर, पुष्टि करें पर क्लिक करें.
  8. प्रोसेस पूरी होने के बाद, डायलॉग बॉक्स को खारिज करने के लिए, बंद करें बटन पर क्लिक करें.
  9. अब जब आपने नया प्रोजेक्ट सेट अप कर लिया है, तो आपको BigQuery की ऐडवांस सेवा चालू करनी होगी. इसके लिए, संसाधन -> Google की ऐडवांस सेवाएं पर जाएं और BigQuery API के लिए, चालू करें पर क्लिक करें.


  10. सबसे नीचे मौजूद नोट में लिखा है कि "ये सेवाएं "Google Cloud Platform API डैशबोर्ड" में भी चालू होनी चाहिए." इसलिए, उस लिंक पर क्लिक करें. इससे डेवलपर कंसोल या "devconsole" के लिए एक और ब्राउज़र टैब खुलता है.
  11. DevConsole में सबसे ऊपर मौजूद, +एपीआई और सेवाएं चालू करें बटन पर क्लिक करें. इसके बाद, "bigquery" खोजें. BigQuery API (BigQuery Data Transfer API नहीं) को चुनें. इसके बाद, इसे चालू करने के लिए चालू करें पर क्लिक करें. इस ब्राउज़र टैब को खुला रखें.

    ध्यान दें: एपीआई चालू होने के बाद, आपको इस पेज पर एक सूचना दिख सकती है. इसमें लिखा होगा, "इस एपीआई का इस्तेमाल करने के लिए, आपको क्रेडेंशियल बनाने होंगे...". हालांकि, फ़िलहाल इसके बारे में चिंता न करें. Apps Script आपके लिए यह काम कर देगा.


  12. कोड एडिटर के ब्राउज़र टैब में वापस जाएं. यहां आपको अब भी 'Google की ऐडवांस सेवाएं' मेन्यू दिखेगा. इसलिए, कोड एडिटर में बने रहने के लिए, ठीक है पर क्लिक करके डायलॉग बॉक्स बंद करें. सबसे ऊपर मौजूद प्रोजेक्ट के नाम पर क्लिक करें और उसे अपनी पसंद का कोई भी नाम दें. जैसे, "BigQuery डेमो" या इसी तरह का कोई अन्य नाम. हमने अपने प्रोजेक्ट का नाम "फ़ाइनल माइल" रखा है.

अब ऐप्लिकेशन कोड डालने, अनुमति देने की प्रोसेस पूरी करने, और इस ऐप्लिकेशन के पहले वर्शन को चालू करने के लिए तैयार रहें.

ऐप्लिकेशन अपलोड करें और उसे चलाएं

  1. नीचे दिए गए बॉक्स में मौजूद कोड को कॉपी करें और इसे कोड एडिटर में मौजूद सभी कोड की जगह पर चिपकाएं:
// Filename for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud API project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');

/**
 * Runs a BigQuery query; puts results into Sheet. You must enable
 * the BigQuery advanced service before you can run this code.
 * @see http://developers.google.com/apps-script/advanced/bigquery#run_query
 * @see http://github.com/googleworkspace/apps-script-samples/blob/main/advanced/bigquery.gs
 *
 * @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
 * @see http://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 BQ 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 new 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());
}


अब उस फ़ाइल को सेव करें जिसे आपने अभी बनाया है. हालांकि, उसका नाम Code.gs से बदलकर bq-sheets-slides.js कर दें. यह कोड क्या करता है? हमने आपको पहले ही बता दिया था कि यह BigQuery से क्वेरी करता है और नतीजों को नई Google शीट में लिखता है. हालांकि, यह क्वेरी क्या है? इसे runQuery() में सबसे ऊपर देखा जा सकता है:

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


यह क्वेरी, BigQuery के सार्वजनिक डेटा सेट का हिस्सा, शेक्सपियर की रचनाओं में खोज करती है. साथ ही, उनकी सभी रचनाओं में सबसे ज़्यादा बार इस्तेमाल किए गए 10 शब्दों को दिखाती है. इन शब्दों को लोकप्रियता के हिसाब से घटते क्रम में लगाया जाता है. ज़रा सोचिए कि इसे मैन्युअल तरीके से करने में कितना (नहीं) मज़ा आएगा. इससे आपको यह अंदाज़ा लग जाएगा कि BigQuery कितना मददगार है.

  1. हम इस सुविधा को आज़माने के लिए लगभग तैयार हैं, लेकिन अभी कुछ समय लगेगा. इस कोड स्निपेट में सबसे ऊपर, आपको दिख रहा होगा कि एक मान्य प्रोजेक्ट आईडी की ज़रूरत होती है. इसलिए, हमें आपके प्रोजेक्ट आईडी को ऐप्लिकेशन कोड में जोड़ना होगा. इसे पाने के लिए, उस ब्राउज़र विंडो या टैब पर वापस जाएं जिसमें डेवलपर कंसोल पेज है. (हमने आपसे इसे खुला रखने के लिए कहा था, याद है?)
  2. सबसे ऊपर, अपने Google खाते के अवतार के बाईं ओर, पुलडाउन मेन्यू सिलेक्टर () होता है. इस पर क्लिक करें और प्रोजेक्ट की सेटिंग चुनें. आपको प्रोजेक्ट का नाम, आईडी, और नंबर दिखेगा. प्रोजेक्ट आईडी कॉपी करें. इसके बाद, bq-sheets-slides.js के सबसे ऊपर मौजूद PROJECT_ID वैरिएबल को डेवलपर कंसोल से मिली वैल्यू पर सेट करें. ध्यान दें: अगर मेन्यू सिलेक्टर काम नहीं कर रहा है, तो पेज को फिर से लोड करें.
  3. if स्टेटमेंट का इस्तेमाल इसलिए किया जाता है, ताकि ऐप्लिकेशन को प्रोजेक्ट आईडी के बिना आगे बढ़ने से रोका जा सके. अपना ईमेल पता जोड़ने के बाद, फ़ाइल सेव करें. इसके बाद, मेन्यू बार में जाकर चलाएं > फ़ंक्शन चलाएं > runQuery को चुनकर, अपना कोड चलाएं. इसके बाद, अनुमतियों की समीक्षा करें डायलॉग पर क्लिक करें. यह ऐप्लिकेशन पुष्टि नहीं किया गया है. यहां एक ऐनिमेटेड GIF (किसी दूसरे ऐप्लिकेशन के लिए) दिया गया है. इसमें अगले कुछ चरणों के बारे में बताया गया है:
  4. अनुमतियों की समीक्षा करने का अनुरोध करने पर, आपको ऊपर दिखाए गए जैसा नया डायलॉग दिखेगा. वह Google खाता चुनें जिससे स्क्रिप्ट को चलाया जाएगा. इसके बाद, ऐडवांस को चुनें और नीचे की ओर स्क्रोल करें. इसके बाद, OAuth2 ऐप्लिकेशन की अनुमति देने वाली स्क्रीन पर जाने के लिए, "<YOUR PROJECT NAME> (unsafe) पर जाएं" पर क्लिक करें. (पुष्टि करने की प्रोसेस के बारे में ज़्यादा जानें. इससे आपको यह पता चलेगा कि यह स्क्रीन, नीचे दिए गए OAuth2 ऑथराइज़ेशन डायलॉग के बीच में क्यों दिख रही है.)


    ध्यान दें: ऐप्लिकेशन को अनुमति देने के बाद, आपको हर बार इस प्रोसेस को दोहराने की ज़रूरत नहीं होगी. इस ट्यूटोरियल में तीसरे टास्क पर पहुंचने के बाद ही आपको यह डायलॉग स्क्रीन फिर से दिखेगी. इसमें, Google Slides प्रज़ेंटेशन बनाने और मैनेज करने के लिए उपयोगकर्ता से अनुमति मांगी जाएगी.
  5. OAuth2 डायलॉग विंडो में अनुमति दें पर क्लिक करने के बाद, स्क्रिप्ट चलना शुरू हो जाती है... आपको सबसे ऊपर हल्के पीले रंग का डायलॉग दिखेगा. यह प्रोसेस काफ़ी तेज़ी से पूरी होती है. इसलिए, हो सकता है कि आपको पता न चले कि यह प्रोसेस चल रही है या पूरी हो गई है.

  6. यह प्रोसेस पूरी होने के बाद, यह डायलॉग बॉक्स गायब हो जाता है. इसलिए, अगर आपको यह नहीं दिखता है, तो इसका मतलब है कि यह प्रोसेस पूरी हो गई है. अब Google Drive (drive.google.com) पर जाएं और "शेक्सपियर की सभी रचनाओं में इस्तेमाल किए गए सबसे आम शब्द" नाम की नई Google शीट ढूंढें. इसके अलावा, आपने QUERY_NAME वैरिएबल को जो भी नाम दिया था उसे ढूंढें:


  7. स्प्रेडशीट खोलें. आपको शब्दों की 10 लाइनें और उनके कुल काउंट, घटते क्रम में दिखेंगे:

टास्क 1 की खास जानकारी

पहचानें कि अभी क्या हुआ... आपने कुछ ऐसा कोड चलाया है जिसने शेक्सपियर की सभी रचनाओं के बारे में क्वेरी की है. यह बहुत ज़्यादा डेटा नहीं है, लेकिन इसमें इतना टेक्स्ट ज़रूर है जिसे आप खुद आसानी से स्कैन नहीं कर सकते. इसके लिए, आपको हर नाटक के हर शब्द को देखना होगा, ऐसे शब्दों की गिनती करनी होगी, और फिर उन्हें दिखने की संख्या के हिसाब से घटते क्रम में लगाना होगा. आपने BigQuery से यह काम अपने लिए करने के लिए कहा. साथ ही, आपने Google Sheets के लिए Apps Script में मौजूद बिल्ट-इन सेवा का इस्तेमाल करके, इस डेटा को आसानी से इस्तेमाल करने के लिए वहां रखा.

आपने ऊपर bq-sheets-slides.js (चुना गया फ़ाइल नाम) का जो कोड चिपकाया है वह इस कोडलैब की GitHub repo में step1 फ़ोल्डर में भी मिल सकता है. यह repo github.com/googlecodelabs/bigquery-sheets-slides पर मौजूद है. हालांकि, PROJECT_ID में असली प्रोजेक्ट आईडी होना चाहिए. यह कोड, BigQuery की ऐडवांस सेवाओं वाले पेज पर दिए गए मूल उदाहरण से लिया गया है. इसमें थोड़ी अलग क्वेरी का इस्तेमाल किया गया है... शेक्सपियर ने 10 या उससे ज़्यादा वर्णों वाले सबसे ज़्यादा लोकप्रिय शब्दों का इस्तेमाल कौनसी रचनाओं में किया है. उस सैंपल को GitHub repo में भी देखा जा सकता है.

अगर आपको शेक्सपियर की रचनाओं या सार्वजनिक डेटा टेबल के बारे में अन्य क्वेरी करनी हैं, तो इस वेब पेज और इस वेब पेज पर जाएं. Apps Script में क्वेरी चलाने से पहले, BigQuery कंसोल में क्वेरी को टेस्ट किया जा सकता है. इससे कोई फ़र्क़ नहीं पड़ता कि आपने किस क्वेरी का इस्तेमाल किया है. BigQuery का यूज़र इंटरफ़ेस, डेवलपर के लिए bigquery.cloud.google.com पर उपलब्ध है. उदाहरण के लिए, BigQuery यूज़र इंटरफ़ेस का इस्तेमाल करके हमारी क्वेरी इस तरह दिखती है:

ऊपर दिए गए चरणों में, Apps Script के कोड एडिटर का इस्तेमाल किया गया है. हालांकि, कमांड-लाइन के ज़रिए स्थानीय तौर पर भी डेवलपमेंट किया जा सकता है. अगर आपको यह तरीका पसंद नहीं है, तो bq-sheets-slides.js नाम की एक स्क्रिप्ट बनाएं. इसके बाद, ऊपर दिए गए कोड को उसमें चिपकाएं. फिर, clasp push कमांड का इस्तेमाल करके, उसे Google पर अपलोड करें. (अगर आपने इसे पहले नहीं देखा है, तो यहां clasp का लिंक और इसे इस्तेमाल करने का तरीका दिया गया है.)

runQuery() का मकसद, BigQuery से बात करना और उसके नतीजों को किसी शीट में भेजना है. अब हमें इस डेटा से एक चार्ट बनाना है. आइए, इसके लिए createColumnChart() नाम का एक नया फ़ंक्शन बनाते हैं. यह फ़ंक्शन, Sheet के newChart() तरीके को कॉल करता है.

  1. चार्ट बनाएं. नीचे दिए गए createColumnChart() के मुख्य हिस्से को bq-sheets-slides.js में runQuery() के ठीक बाद जोड़ें. यह डेटा वाली शीट को ऐक्सेस करता है और पूरे डेटा के साथ कॉलम वाला चार्ट बनाने का अनुरोध करता है. डेटा रेंज, सेल A2 से शुरू होती है, क्योंकि पहली लाइन में डेटा नहीं, बल्कि कॉलम के हेडर मौजूद हैं.
/**
 * Uses spreadsheet data to create columnar chart.
 * @param {Spreadsheet} Spreadsheet containing results data
 * @returns {EmbeddedChart} visualizing the results
 * @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
 */
function createColumnChart(spreadsheet) {
  // Retrieve the populated (first and only) 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 params.
  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);
}
  1. स्प्रेडशीट वापस पाना. ऊपर, createColumnChart() को स्प्रेडशीट ऑब्जेक्ट की ज़रूरत होती है. इसलिए, हमें runQuery() को अपडेट करना होगा, ताकि वह spreadsheet ऑब्जेक्ट दिखा सके. इससे हम इसे createColumnChart() को पास कर पाएंगे. Google शीट बनाने के बाद, runQuery() के आखिर में spreadsheet ऑब्जेक्ट को वापस करें. यह काम, लॉग लाइन के ठीक बाद करें:
  Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());

  // NEW: Return the spreadsheet object for later use.
  return spreadsheet;
}
  1. ड्राइविंग createBigQueryPresentation() सुविधा. BigQuery और चार्ट बनाने की सुविधा को अलग-अलग करना एक अच्छा विचार है. अब ऐप्लिकेशन को चलाने के लिए, createBigQueryPresentation() फ़ंक्शन बनाते हैं. यह फ़ंक्शन, runQuery() और createColumnChart(), दोनों को कॉल करेगा. जोड़ा गया कोड कुछ ऐसा दिखना चाहिए:
/**
 * Runs a BigQuery query, adds data and a chart in a Sheet.
 */
function createBigQueryPresentation() {
  var spreadsheet = runQuery();
  createColumnChart(spreadsheet);
}
  1. कोड को ज़्यादा बार इस्तेमाल करने लायक बनाएं. आपने ऊपर दिए गए दो ज़रूरी चरण पूरे कर लिए हैं: स्प्रेडशीट ऑब्जेक्ट को वापस लाना और ड्राइविंग फ़ंक्शन बनाना. अगर कोई सहकर्मी runQuery() का फिर से इस्तेमाल करना चाहता है और वह नहीं चाहता कि यूआरएल लॉग हो, तो क्या होगा? runQuery() को सामान्य इस्तेमाल के लिए ज़्यादा आसान बनाने के लिए, हमें उस लॉग लाइन को हटाना होगा. इसे कहां ले जाना चाहिए? अगर आपने createBigQueryPresentation() को चुना है, तो आपका जवाब सही है! लॉग लाइन को दूसरी जगह ले जाने के बाद, वह कुछ ऐसी दिखनी चाहिए:
/**
 * Runs a BigQuery query, adds data and a chart in a Sheet.
 */
function createBigQueryPresentation() {
  var spreadsheet = runQuery();
  Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl()); // MOVED HERE
  createColumnChart(spreadsheet);
}

ऊपर दिए गए इन बदलावों (PROJECT_ID को छोड़कर) के बाद, आपका bq-sheets-slides.js अब इस तरह दिखना चाहिए. यह GitHub रिपॉज़िटरी के step2 फ़ोल्डर में भी मौजूद है:

// Filename for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud API project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');

/**
 * Runs a BigQuery query; puts results into Sheet. You must enable
 * the BigQuery advanced service before you can run this code.
 * @see http://developers.google.com/apps-script/advanced/bigquery#run_query
 * @see http://github.com/googleworkspace/apps-script-samples/blob/main/advanced/bigquery.gs
 *
 * @returns {Sheet} Returns a sheet with results
 * @see http://developers.google.com/apps-script/reference/spreadsheet/sheet
 */
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 BQ 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 new 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 columnar chart.
 * @param {Spreadsheet} Spreadsheet containing results data
 * @returns {EmbeddedChart} visualizing the results
 * @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
 */
function createColumnChart(spreadsheet) {
  // Retrieve the populated (first and only) 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 params.
  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 in a Sheet.
 */
function createBigQueryPresentation() {
  var spreadsheet = runQuery();
  Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
  createColumnChart(spreadsheet);
}

फ़ाइल को सेव करें. इसके बाद, कोड एडिटर में सबसे ऊपर जाएं और runQuery() के बजाय createBigQueryPresentation() पर स्विच करें. इसे चलाने के बाद, आपको एक और Google शीट मिलेगी. हालांकि, इस बार डेटा के बगल में शीट में एक चार्ट दिखेगा:

कोडलैब के आखिरी हिस्से में, एक नई Google Slides प्रज़ेंटेशन बनानी होती है. इसके बाद, टाइटल स्लाइड पर टाइटल और सबटाइटल डालना होता है. इसके बाद, दो नई स्लाइड जोड़नी होती हैं. इनमें से एक स्लाइड में डेटा सेल और दूसरी में चार्ट जोड़ना होता है.

  1. स्लाइड डेक बनाएं. स्लाइड डेक पर किया गया सारा काम createSlidePresentation() में होगा. इसे हम createColumnChart() के ठीक बाद bq-sheets-slides.js में जोड़ेंगे. आइए, सबसे पहले एक नया स्लाइड डेक बनाते हैं. इसके बाद, हमें सभी नए प्रज़ेंटेशन के साथ डिफ़ॉल्ट टाइटल स्लाइड मिलती है. इसमें टाइटल और सबटाइटल जोड़ते हैं.
/**
 * Create presentation with spreadsheet data & chart
 * @param {Spreadsheet} Spreadsheet with results data
 * @param {EmbeddedChart} Sheets chart to embed on slide
 * @returns {Presentation} Slide deck with results
 */
function createSlidePresentation(spreadsheet, chart) {
  // Create the new 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('via GCP and G Suite APIs:\n' +
    'Google Apps Script, BigQuery, Sheets, Slides');
  1. डेटा टेबल जोड़ें. createSlidePresentation() में अगला चरण, Google शीट से सेल का डेटा अपने नए स्लाइड डेक में इंपोर्ट करना है. इस कोड स्निपेट को फ़ंक्शन में जोड़ें:
  // 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 of
  // the dimensions of the data range; fails if Sheet 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]));
    }
  }
  1. चार्ट इंपोर्ट करें. createSlidePresentation() का आखिरी चरण, एक और स्लाइड बनाना है. इसके बाद, हमारी स्प्रेडशीट से चार्ट इंपोर्ट करना है और Presentation ऑब्जेक्ट को वापस लाना है. इस फ़ाइनल स्निपेट को फ़ंक्शन में जोड़ें:
  // 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;
}
  1. रिटर्न चार्ट. अब हमारा फ़ाइनल फ़ंक्शन पूरा हो गया है. इसलिए, इसके सिग्नेचर को फिर से देखें. हां, createSlidePresentation() के लिए स्प्रेडशीट और चार्ट ऑब्जेक्ट, दोनों की ज़रूरत होती है. हमने runQuery() को पहले ही अडजस्ट कर दिया है, ताकि Spreadsheet ऑब्जेक्ट को वापस किया जा सके. हालांकि, अब हमें createColumnChart() में भी इसी तरह का बदलाव करना होगा, ताकि चार्ट (EmbeddedChart) ऑब्जेक्ट को वापस किया जा सके. अपने ऐप्लिकेशन में वापस जाकर, कोड में createColumnChart() के आखिर में एक और लाइन जोड़ें. इसके लिए:
  // NEW: Return chart object for later use
  return chart;
}
  1. अपडेट करें createBigQueryPresentation() पर क्लिक करें. createColumnChart() चार्ट दिखाता है. इसलिए, हमें उस चार्ट को किसी वैरिएबल में सेव करना होगा. इसके बाद, स्प्रेडशीट और चार्ट दोनों को createSlidePresentation() में पास करना होगा. हम नई स्प्रैडशीट का यूआरएल लॉग करते हैं. इसलिए, नई स्लाइड प्रज़ेंटेशन का यूआरएल भी लॉग करते हैं. अपने createBigQueryPresentation() को अपडेट करें, ताकि यह ऐसा दिखे:
/**
 * Runs a BigQuery query, adds data and a chart in a Sheet,
 * 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
}
  1. createBigQueryPresentation() को सेव करें और फिर से चलाएं. हालांकि, इससे पहले आपको यह पता होना चाहिए कि अब आपके ऐप्लिकेशन को, Google Slides प्रज़ेंटेशन देखने और मैनेज करने के लिए, उपयोगकर्ता से अनुमतियों के एक और सेट की ज़रूरत होगी. इस अनुमति को देने के बाद, यह पहले की तरह काम करेगा.
  2. अब आपको बनाई गई शीट के साथ-साथ, तीन स्लाइड (टाइटल, डेटा टेबल, डेटा चार्ट) वाला नया Slides प्रज़ेंटेशन भी मिलेगा. यह प्रज़ेंटेशन नीचे दिखाया गया है:

बधाई हो! आपने अब एक ऐसा ऐप्लिकेशन बना लिया है जो Google Cloud के दोनों हिस्सों का फ़ायदा उठाता है. इसके लिए, यह Google BigQuery अनुरोध करता है, जो इसके सार्वजनिक डेटा सेट में से किसी एक को क्वेरी करता है. साथ ही, नतीजों को सेव करने के लिए एक नई Google शीट बनाता है. इसके बाद, यह अभी-अभी हासिल किए गए डेटा के आधार पर एक चार्ट जोड़ता है. आखिर में, यह Google Slides प्रज़ेंटेशन बनाता है, जिसमें स्प्रेडशीट में मौजूद नतीजों के साथ-साथ चार्ट भी शामिल होता है.

तकनीकी तौर पर, आपने यही किया है. आसान शब्दों में कहें, तो आपने बड़े डेटा का विश्लेषण किया और उसे कोड में बदलकर, स्टेकहोल्डर को दिखाया. यह सब अपने-आप हुआ. हमें उम्मीद है कि इस सैंपल से आपको अपने प्रोजेक्ट के लिए इसे इस्तेमाल करने और अपनी ज़रूरत के हिसाब से बनाने में मदद मिलेगी. इस कोडलैब के आखिर में, हम आपको कुछ सुझाव देंगे. इनकी मदद से, इस सैंपल ऐप्लिकेशन को और बेहतर बनाया जा सकता है.

ऊपर दिए गए बदलावों के साथ, अब आपका bq-sheets-slides.js ऐसा दिखना चाहिए. हालांकि, इसमें PROJECT_ID को छोड़कर बाकी सभी बदलाव शामिल हैं. यह GitHub repo में मौजूद final फ़ोल्डर में भी देखा जा सकता है:

bq-sheets-slides.js

/**
 * 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.
 */

// Filename for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud API project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');

/**
 * Runs a BigQuery query; puts results into Sheet. You must enable
 * the BigQuery advanced service before you can run this code.
 * @see http://developers.google.com/apps-script/advanced/bigquery#run_query
 * @see http://github.com/googleworkspace/apps-script-samples/blob/main/advanced/bigquery.gs
 *
 * @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
 * @see http://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 BQ 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 new 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 columnar chart.
 * @param {Spreadsheet} Spreadsheet containing results data
 * @returns {EmbeddedChart} visualizing the results
 * @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
 */
function createColumnChart(spreadsheet) {
  // Retrieve the populated (first and only) 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 params.
  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 & chart
 * @param {Spreadsheet} Spreadsheet with results data
 * @param {EmbeddedChart} Sheets chart to embed on slide
 * @returns {Presentation} Returns a slide deck with results
 * @see http://developers.google.com/apps-script/reference/slides/presentation
 */
function createSlidePresentation(spreadsheet, chart) {
  // Create the new 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('via GCP and G Suite 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 of
  // the dimensions of the data range; fails if Sheet 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 in a Sheet,
 * 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());
}

इस कोडलैब में "दूसरी फ़ाइल" की कोई भूमिका नहीं है. यह Apps Script मेनिफ़ेस्ट फ़ाइल, appsscript.json है. इसे ऐक्सेस करने के लिए, कोड एडिटर ब्राउज़र टैब पर जाएं. इसके बाद, सबसे ऊपर मौजूद मेन्यू से व्यू > मेनिफ़ेस्ट फ़ाइल दिखाएं चुनें. कॉन्टेंट कुछ ऐसा दिखना चाहिए:

appsscript.json

{
  "timeZone": "America/Los_Angeles",
  "dependencies": {
    "enabledAdvancedServices": [{
      "userSymbol": "BigQuery",
      "serviceId": "bigquery",
      "version": "v2"
    }]
  },
  "exceptionLogging": "STACKDRIVER"
}

मेनिफ़ेस्ट फ़ाइल, सिस्टम-लेवल की कॉन्फ़िगरेशन फ़ाइल होती है. Apps Script इसका इस्तेमाल यह जानने के लिए करता है कि आपके ऐप्लिकेशन के लिए कौनसे एक्ज़ीक्यूशन एनवायरमेंट उपलब्ध कराने हैं. इस कोडलैब में, मेनिफ़ेस्ट फ़ाइल के कॉन्टेंट के बारे में नहीं बताया गया है. हालांकि, आपको यह पता चल सकता है कि यह क्या काम करती है.

इस कोडलैब में शामिल कॉन्टेंट के बारे में ज़्यादा जानने के लिए, यहां कुछ और संसाधन दिए गए हैं. साथ ही, Google के डेवलपर टूल को प्रोग्राम के हिसाब से ऐक्सेस करने के अन्य तरीके भी बताए गए हैं. हमारा मकसद इस कोडलैब को रेपो के साथ सिंक रखना है.

इस ऐप्लिकेशन के लिए संसाधन

दस्तावेज़

अन्य कोडलैब

आसान लेवल

इंटरमीडिएट लेवल

रेफ़रंस ऐप्लिकेशन

यहां "कोड से जुड़ी चुनौतियां" दी गई हैं. इनमें, इस कोडलैब में बनाए गए सैंपल को बेहतर बनाने या बढ़ाने के अलग-अलग तरीके बताए गए हैं. इस सूची में सभी बातें शामिल नहीं हैं. हालांकि, इससे आपको यह समझने में मदद मिलेगी कि आगे क्या किया जा सकता है.

  • ऐप्लिकेशन. क्या आपको JavaScript इस्तेमाल करने या Apps Script की ओर से लगाई गई पाबंदियों से बचना है? इस ऐप्लिकेशन को अपनी पसंदीदा प्रोग्रामिंग लैंग्वेज में पोर्ट करें. यह लैंग्वेज, Google BigQuery, Sheets, और Slides के लिए REST API का इस्तेमाल करती हो.
  • BigQuery. शेक्सपियर के डेटासेट के लिए, किसी दूसरी क्वेरी के साथ एक्सपेरिमेंट करें... शायद आपको कोई ऐसी क्वेरी मिल जाए जिसमें आपकी दिलचस्पी हो. एक और सैंपल क्वेरी, Apps Script BigQuery के ओरिजनल सैंपल ऐप्लिकेशन में देखी जा सकती है.
  • BigQuery. BigQuery के अन्य सार्वजनिक डेटा सेट आज़माएं...शायद आपको कोई ऐसा डेटा सेट मिल जाए जो आपके लिए ज़्यादा काम का हो.
  • BigQuery. हमने पहले, शेक्सपियर की रचनाओं या सार्वजनिक डेटा टेबल के ख़िलाफ़ की जा सकने वाली अन्य क्वेरी के बारे में बताया था. हम इस वेब पेज के साथ-साथ इस वेब पेज को फिर से शेयर करना चाहते हैं.
  • Sheets. अन्य चार्ट टाइप का इस्तेमाल करके देखें.
  • Sheets और BigQuery. टेबल को घुमाएं... ऐसा हो सकता है कि आपके पास किसी स्प्रेडशीट में बड़ा डेटा सेट हो. साल 2016 में, BigQuery टीम ने एक ऐसी सुविधा लॉन्च की थी जिसकी मदद से डेवलपर, शीट को डेटा सोर्स के तौर पर इस्तेमाल कर सकते थे. ज़्यादा जानकारी के लिए, एक और दो ब्लॉग पोस्ट देखें.
  • Slides. जनरेट किए गए प्रज़ेंटेशन में अन्य स्लाइड जोड़ें. जैसे, इमेज या आपके बड़े डेटा के विश्लेषण से जुड़ी अन्य ऐसेट. शुरू करने के लिए, यहां Slides की इन-बिल्ट सेवा के बारे में गाइड दी गई है.
  • G Suite. Apps Script से, G Suite या Google की पहले से मौजूद अन्य सेवाओं का इस्तेमाल करें. जैसे, Gmail, Google Drive, Calendar, Docs, Maps, Analytics, YouTube वगैरह के साथ-साथ अन्य ऐडवांस सेवाएं. ज़्यादा जानकारी के लिए, रेफ़रंस की खास जानकारी देखें. इसमें, बिल्ट-इन और ऐडवांस, दोनों तरह की सेवाओं के बारे में बताया गया है.