Google পত্রক এবং স্লাইড ব্যবহার করে আপনার বড় ডেটাকে অন্তর্দৃষ্টিতে পরিণত করুন৷

ডেটা বিজ্ঞানীদের বড় ডেটা বিশ্লেষণ করার জন্য অনেকগুলি সরঞ্জাম রয়েছে, কিন্তু দিনের শেষে, আপনাকে কি এখনও সেই ফলাফলগুলি পরিচালনার জন্য ন্যায্যতা দিতে হবে না? কাগজে বা ডাটাবেসে প্রচুর সংখ্যা মূল স্টেকহোল্ডারদের কাছে খুব কমই উপস্থাপনযোগ্য। এই মধ্যবর্তী Google Apps স্ক্রিপ্ট কোডল্যাবটি আপনাকে সেই চূড়ান্ত মাইলটি সম্পূর্ণ করতে সহায়তা করার জন্য Google এর বিকাশকারী প্ল্যাটফর্ম, G Suite এবং Google Cloud Platform (GCP) এর একটি জোড়া ব্যবহার করে৷

Google ক্লাউডের বিকাশকারী সরঞ্জামগুলি আপনাকে গভীর ডেটা বিশ্লেষণ করতে দেয় তারপর সেই ফলাফলগুলি নিতে, সেগুলিকে একটি স্প্রেডশীটে রাখতে এবং সেই ডেটার সাথে একটি স্লাইড উপস্থাপনা তৈরি করতে দেয়, ফলাফলগুলি পরিচালনায় বিতরণ করার জন্য আরও উপযুক্ত পর্যায় প্রদান করে৷ এই কোডল্যাবটি GCP-এর BigQuery API (একটি Apps Script উন্নত পরিষেবা হিসাবে) এবং Google Sheets এবং Google Slides-এর জন্য অন্তর্নির্মিত Apps স্ক্রিপ্ট পরিষেবাগুলিকে কভার করে৷

অনুপ্রেরণা/পূর্ব শিল্প

এই কোডল্যাবের নমুনা অ্যাপটি এই অন্যান্য কোড নমুনা দ্বারা অনুপ্রাণিত হয়েছিল...

যদিও স্লাইডস এপিআই কোডল্যাব নমুনা অ্যাপটিতে BigQuery এবং স্লাইডের বৈশিষ্ট্য রয়েছে, এটি এই কোডল্যাবের নমুনা অ্যাপ থেকে বিভিন্ন উপায়ে আলাদা:

  • Node.js অ্যাপ বনাম আমাদের অ্যাপস স্ক্রিপ্ট অ্যাপ
  • যখন আমরা Apps স্ক্রিপ্ট পরিষেবাগুলি ব্যবহার করি তখন REST API ব্যবহার করে৷
  • Google ড্রাইভ ব্যবহার করে কিন্তু Google পত্রক নয় যেখানে এই অ্যাপটি শীট ব্যবহার করে কিন্তু ড্রাইভ নয়

এই কোডল্যাবের জন্য, আমরা Google ক্লাউড জুড়ে বৈশিষ্ট্য এবং API গুলিকে এমনভাবে প্রদর্শন করার সময় একটি একক অ্যাপে যতগুলি প্রযুক্তি একত্রিত করতে চেয়েছিলাম তা বাস্তব জীবনের ব্যবহারের ক্ষেত্রে আরও ভালভাবে সাদৃশ্যপূর্ণ। লক্ষ্য হল আপনাকে আপনার কল্পনাশক্তি ব্যবহার করতে অনুপ্রাণিত করা এবং আপনার প্রতিষ্ঠান বা আপনার গ্রাহকদের জন্য চ্যালেঞ্জিং সমস্যা সমাধানের জন্য GCP এবং G Suuite উভয়েরই ব্যবহার বিবেচনা করা।

আপনি কি শিখবেন

  • একাধিক Google (GCP এবং G Suite) পরিষেবাগুলির সাথে Google Apps Script কীভাবে ব্যবহার করবেন
  • একটি বড় ডেটা বিশ্লেষণ করতে Google BigQuery কীভাবে ব্যবহার করবেন
  • কীভাবে একটি গুগল শীট তৈরি করবেন এবং এতে ডেটা জমা করবেন
  • কিভাবে শীটে একটি নতুন চার্ট তৈরি করবেন
  • পত্রক থেকে Google স্লাইড উপস্থাপনায় কীভাবে চার্ট এবং ডেটা স্থানান্তর করা যায়

আপনি কি প্রয়োজন হবে

  • ইন্টারনেট এবং একটি ওয়েব ব্রাউজারে অ্যাক্সেস
  • একটি Google অ্যাকাউন্ট (G Suite অ্যাকাউন্টগুলির জন্য প্রশাসকের অনুমোদনের প্রয়োজন হতে পারে)
  • বেসিক জাভাস্ক্রিপ্ট দক্ষতা
  • অ্যাপস স্ক্রিপ্ট বিকাশের জ্ঞান সহায়ক হতে পারে তবে প্রয়োজন নেই

আপনি কিভাবে এই কোডল্যাব/টিউটোরিয়াল ব্যবহার করবেন?

তথ্যগত উদ্দেশ্যে এটির মাধ্যমে পড়ুন, সম্ভবত প্রযুক্তিগত সহকর্মীদের কাছে এটি প্রেরণ করুন আমি যতদূর পারি এটির মধ্য দিয়ে যান এবং যতটা সম্ভব ব্যায়াম করার চেষ্টা করুন নরক বা উচ্চ জল, আমি সম্পূর্ণ কোডল্যাব সম্পূর্ণ করতে যাচ্ছি

G Suite ডেভেলপার টুল এবং API-এর সাথে আপনার অভিজ্ঞতাকে কীভাবে মূল্যায়ন করবে?

নবজাতক মধ্যবর্তী দক্ষ

অ্যাপস স্ক্রিপ্টের সাথে আপনার অভিজ্ঞতাকে বিশেষভাবে কীভাবে মূল্যায়ন করবেন?

নবজাতক মধ্যবর্তী দক্ষ

GCP ডেভেলপার টুল এবং API-এর সাথে আপনার অভিজ্ঞতাকে কীভাবে মূল্যায়ন করবে?

নবজাতক মধ্যবর্তী দক্ষ

এখন আপনি এই কোডল্যাব সম্পর্কে কি জানেন, আপনি ঠিক কি করতে যাচ্ছেন?

  1. একটি বিদ্যমান Apps Script-BigQuery নমুনা নিন এবং এটি কাজ করা শুরু করুন
  2. সেই নমুনা থেকে, কীভাবে BigQuery-এ একটি কোয়েরি পাঠাতে হয় এবং তার ফলাফল পেতে হয় তা শিখুন
  3. একটি Google পত্রক তৈরি করুন এবং এতে BigQuery থেকে ফলাফলগুলি পূরণ করুন৷
  4. প্রত্যাবর্তিত এবং শীটে যোগ করা ডেটা সামান্য পরিবর্তন করতে কোডটি কিছুটা পরিবর্তন করুন
  5. BigQuery থেকে ডেটার জন্য একটি চার্ট তৈরি করতে Apps Script-এ Sheets পরিষেবা ব্যবহার করুন
  6. একটি নতুন স্লাইড উপস্থাপনা তৈরি করতে স্লাইড পরিষেবা ব্যবহার করুন৷
  7. সমস্ত নতুন স্লাইড ডেকের জন্য স্বয়ংক্রিয়ভাবে তৈরি ডিফল্ট শিরোনাম স্লাইডে একটি শিরোনাম এবং উপশিরোনাম যোগ করুন
  8. একটি ডেটা টেবিলের সাথে একটি নতুন স্লাইড তৈরি করুন, তারপর এটিতে পত্রকের ডেটা সেলগুলি আমদানি করুন৷
  9. আরেকটি নতুন স্লাইড যোগ করুন এবং এটিতে স্প্রেডশীট চার্ট যোগ করুন

আসুন Apps Script, BigQuery, Sheets এবং Slides-এ কিছু ব্যাকগ্রাউন্ড তথ্য দিয়ে শুরু করা যাক।

Google Apps স্ক্রিপ্ট এবং BigQuery

Google Apps Script হল একটি G Suite ডেভেলপমেন্ট প্ল্যাটফর্ম যা Google REST API ব্যবহার করার চেয়ে উচ্চ-স্তরের হিসাবে কাজ করে। এটি একটি সার্ভারবিহীন বিকাশ এবং অ্যাপ্লিকেশন হোস্টিং পরিবেশ যা বিকাশকারী দক্ষতা স্তরের একটি বড় পরিসরে অ্যাক্সেসযোগ্য। এক বাক্যে, "অ্যাপস স্ক্রিপ্ট হল জি স্যুট অটোমেশন, এক্সটেনশন এবং ইন্টিগ্রেশনের জন্য একটি সার্ভারবিহীন জাভাস্ক্রিপ্ট রানটাইম।"

এটি সার্ভার-সাইড জাভাস্ক্রিপ্ট, Node.js-এর মতো, কিন্তু দ্রুত অ্যাসিঙ্ক্রোনাস ইভেন্ট-চালিত অ্যাপ্লিকেশন হোস্টিংয়ের পরিবর্তে G Suite এবং অন্যান্য Google পরিষেবাগুলির সাথে শক্ত ইন্টিগ্রেশনের উপর ফোকাস করে। এটিতে একটি উন্নয়ন পরিবেশও রয়েছে যা আপনি যা ব্যবহার করছেন তার থেকে সম্পূর্ণ ভিন্ন হতে পারে। Apps স্ক্রিপ্ট সহ, আপনি:

  • একটি ব্রাউজার-ভিত্তিক কোড এডিটরে বিকাশ করুন কিন্তু Apps স্ক্রিপ্টের জন্য কমান্ড-লাইন স্থাপনার টুল clasp ব্যবহার করলে স্থানীয়ভাবে বিকাশ করা বেছে নিতে পারেন
  • G Suite, এবং অন্যান্য Google বা বহিরাগত পরিষেবাগুলি (Apps Script URLfetch বা Jdbc পরিষেবার মাধ্যমে) অ্যাক্সেস করার জন্য কাস্টমাইজ করা জাভাস্ক্রিপ্টের একটি বিশেষ সংস্করণে কোড
  • অনুমোদন কোড লেখা এড়াতে পারে কারণ অ্যাপস স্ক্রিপ্ট আপনার জন্য এটি পরিচালনা করে
  • আপনার অ্যাপ হোস্ট করতে হবে না—এটি ক্লাউডে Google সার্ভারে চলে এবং চলে

দ্রষ্টব্য : এটি, বেশিরভাগ অংশে, আপনাকে Apps স্ক্রিপ্ট শেখানোর জন্য এই কোডল্যাবের সুযোগের বাইরে। এটিতে আপনাকে সাহায্য করার জন্য প্রচুর অনলাইন সংস্থান রয়েছে। অফিসিয়াল ডকুমেন্টেশনে কুইকস্টার্ট, টিউটোরিয়াল এবং ভিডিওগুলির সাথে একটি ওভারভিউও রয়েছে। এবং পরিশেষে, অ্যাপস স্ক্রিপ্টের পরিচিতি কোডল্যাব সম্পর্কে ভুলবেন না, যা এটি শুরু করার আগে সম্পূর্ণ করা উচিত।

অ্যাপস স্ক্রিপ্ট দুটি ভিন্ন উপায়ে অন্যান্য Google প্রযুক্তির সাথে ইন্টারফেস করে:

  • অন্তর্নির্মিত/নেটিভ পরিষেবা
  • উন্নত সেবা

একটি অন্তর্নির্মিত পরিষেবা উচ্চ-স্তরের পদ্ধতিগুলি সরবরাহ করে যা আপনি G Suite বা Google পণ্য ডেটা বা অন্যান্য দরকারী ইউটিলিটি পদ্ধতিতে অ্যাক্সেস করতে ব্যবহার করতে পারেন। একটি উন্নত পরিষেবা শুধুমাত্র একটি G Suite বা Google REST API এর চারপাশে একটি পাতলা মোড়ক। উন্নত পরিষেবাগুলি REST API-এর সম্পূর্ণ কভারেজ সরবরাহ করে এবং প্রায়শই অন্তর্নির্মিত পরিষেবাগুলির চেয়ে আরও বেশি কিছু করতে পারে, তবে আরও কোড জটিলতার প্রয়োজন হয় (যদিও REST API থেকে ব্যবহার করা সহজ)। উন্নত পরিষেবাগুলি ব্যবহার করার আগে একটি স্ক্রিপ্ট প্রকল্পের জন্য সক্রিয় করা আবশ্যক।

যখন সম্ভব, বিকাশকারীদের একটি অন্তর্নির্মিত পরিষেবা পছন্দ করা উচিত কারণ তারা ব্যবহার করা সহজ এবং উন্নত পরিষেবাগুলির চেয়ে বেশি ভারী-উত্তোলন করতে পারে৷ যাইহোক, কিছু Google API-এর বিল্ট-ইন পরিষেবা নেই, তাই একটি উন্নত পরিষেবাই একমাত্র বিকল্প হতে পারে। Google BigQuery এর একটি উদাহরণ... কোনো অন্তর্নির্মিত পরিষেবা উপলব্ধ নেই, তবে একটি BigQuery উন্নত পরিষেবা বিদ্যমান রয়েছে৷ ( কোনও পরিষেবার চেয়ে ভাল, তাই না?) আপনি যদি BigQuery-এ নতুন হয়ে থাকেন তবে এটি একটি GCP পরিষেবা যা আপনাকে খুব বড় ডেটা কর্পাসগুলিতে সহজ (বা জটিল) প্রশ্ন করতে দেয়, একাধিক টেরাবাইটের ক্রম অনুসারে, তবুও ফলাফল প্রদান করতে পারে সেকেন্ডের ভিতর.

অ্যাপস স্ক্রিপ্ট থেকে Google পত্রক এবং স্লাইড অ্যাক্সেস করা

BigQuery এর বিপরীতে, Google Sheets এবং Slides উভয়েরই অন্তর্নির্মিত পরিষেবা রয়েছে (পাশাপাশি উন্নত পরিষেবাগুলি, যা আপনি শুধুমাত্র API-তে পাওয়া বৈশিষ্ট্যগুলি অ্যাক্সেস করতে ব্যবহার করবেন)৷ কোডে প্রবেশ করার আগে বিল্ট-ইন শীট এবং স্লাইড উভয় পরিষেবার জন্য ডক্স দেখুন। অবশ্যই উন্নত পরিষেবার জন্য ডক্স আছে; এখানে তারা যথাক্রমে পত্রক এবং স্লাইডের জন্য।

ভূমিকা

আমরা এই প্রথম কাজটি দিয়ে এই কোডল্যাব থেকে একটি বড় কামড় নিতে যাচ্ছি। আসলে, একবার আপনি এখানে সম্পন্ন হলে, আপনি সম্পূর্ণ কোডল্যাবের সাথে প্রায় অর্ধেক হয়ে যাবেন। বেশ কয়েকটি উপধারায় বিভক্ত, আপনি এই সমস্ত জিনিসগুলি করবেন:

  • একটি নতুন Google Apps স্ক্রিপ্ট প্রকল্প শুরু করুন৷
  • BigQuery উন্নত পরিষেবাতে অ্যাক্সেস সক্ষম করুন
  • ডেভেলপমেন্ট এডিটরে যান এবং অ্যাপ্লিকেশন সোর্স কোড লিখুন
  • অ্যাপ অনুমোদন প্রক্রিয়ার মধ্য দিয়ে যান (OAuth2)
  • যে অ্যাপ্লিকেশনটি BigQuery-এ একটি অনুরোধ পাঠায় সেটি চালান
  • BigQuery থেকে ফলাফলের সাথে তৈরি করা একটি একেবারে নতুন Google পত্রক দেখুন

সেটআপ

  1. ক) script.google.com এ গিয়ে একটি নতুন অ্যাপস স্ক্রিপ্ট প্রজেক্ট তৈরি করুন। বিভিন্ন G Suite প্রোডাক্ট লাইন রয়েছে এবং আপনি কোন সংস্করণ ব্যবহার করছেন তার উপর নির্ভর করে আপনি কীভাবে একটি নতুন প্রকল্প তৈরি করবেন তা ভিন্ন হতে পারে। আপনি যদি শুধু আপনার জিমেইল একাউন্ট ব্যবহার করেন এবং প্রজেক্ট ডেভেলপ করতে নতুন হন, তাহলে আপনি আপনার প্রথম প্রজেক্ট তৈরি করার জন্য একটি বোতাম সহ একটি ফাঁকা স্ক্রীন দেখতে পাবেন:


খ) অন্যথায় আপনি আপনার সমস্ত প্রকল্প এবং উপরের-বাম দিকে একটি বড় +নতুন বোতাম দেখতে পাবেন, তাই এটিতে ক্লিক করুন৷



গ) উপরের কোনটিই না হলে, আপনার স্ক্রীন নিচের মত দেখতে হতে পারে। যদি তাই হয়, উপরের-বাম কোণে একটি হ্যামবার্গার মেনু আইকন খুঁজুন এবং +নতুন স্ক্রিপ্ট নির্বাচন করুন।



ঘ) আপনারা যারা কমান্ড লাইন পছন্দ করেন তাদের জন্য। আপনার টুল হল clasp , বিশেষ করে, আপনি clasp create কমান্ডটি চালাবেন।

e) একটি নতুন স্ক্রিপ্ট প্রকল্প তৈরি করার চূড়ান্ত উপায় হল শর্টকাট লিঙ্কে যাওয়া: https://script.google.com/create

  1. আপনি একটি নতুন প্রকল্প শুরু করার জন্য যে কৌশলটি ব্যবহার করেছেন তা নির্বিশেষে, নীচের লাইনটি হল আপনাকে অ্যাপস স্ক্রিপ্ট কোড এডিটরে নামিয়ে দেওয়া উচিত, একটি স্ক্রীন যা দেখতে এইরকম:


  2. ফাইল > সংরক্ষণ করুন ক্লিক করুন এবং আপনার প্রকল্পের একটি নাম দিন।
  3. এরপর BigQuery কোয়েরি চালানোর জন্য আপনাকে একটি Google ক্লাউড কনসোল প্রকল্প তৈরি করতে হবে।
  1. একটি নতুন প্রকল্প তৈরি করুন , এটির একটি নাম দিন, একটি বিলিং অ্যাকাউন্ট নির্বাচন করুন এবং তৈরি করুন ক্লিক করুন।
  1. প্রজেক্ট তৈরি সম্পূর্ণ হলে পৃষ্ঠার উপরের ডানদিকে একটি বিজ্ঞপ্তি প্রদর্শিত হবে। প্রজেক্টটি খুলতে Create Project: <Project Name> এন্ট্রিতে ক্লিক করুন।
  2. মেনু আইকনে ক্লিক করুন উপরের বাম দিকে এবং APIs এবং পরিষেবাগুলি > শংসাপত্রগুলিতে নেভিগেট করুন। OAuth সম্মতি স্ক্রীন ট্যাবে ক্লিক করুন ( সরাসরি লিঙ্ক )।
  3. ক্ষেত্রে অ্যাপ্লিকেশনের নাম লিখুন "বিগ ডেটা কোডল্যাব" এবং নীচে সংরক্ষণ বোতামে ক্লিক করুন৷
  4. তিনটি বিন্দু আইকনে ক্লিক করুন উপরের ডানদিকে মেনুটি প্রসারিত করতে এবং প্রজেক্ট সেটিংস নির্বাচন করুন ( সরাসরি লিঙ্ক )।
  5. প্রকল্প নম্বরের অধীনে তালিকাভুক্ত মানটি অনুলিপি করুন। (একটি পৃথক ক্ষেত্র পণ্য আইডি রয়েছে যা আমরা পরে কোডল্যাবে ব্যবহার করব।)
  6. অ্যাপ স্ক্রিপ্ট এডিটরে ফিরে, সম্পদ > ক্লাউড প্ল্যাটফর্ম প্রকল্পে ক্লিক করুন।
  7. টেক্সট বক্সে প্রজেক্ট নম্বর লিখুন এবং সেট প্রজেক্টে ক্লিক করুন। অনুরোধ করা হলে, নিশ্চিত করুন ক্লিক করুন।
  8. সম্পূর্ণ হলে, ডায়ালগ খারিজ করতে বন্ধ বোতামে ক্লিক করুন।
  9. এখন আপনার কাছে একটি নতুন প্রজেক্ট সেটআপ আছে, আপনাকে BigQuery উন্নত পরিষেবা সক্ষম করতে হবে, তাই সম্পদ -> উন্নত Google পরিষেবাগুলি নামিয়ে নিন এবং BigQuery API-এর জন্য বিটটি ফ্লিপ করুন


  10. নীচের একটি নোটে বলা হয়েছে, "এই পরিষেবাগুলিকে অবশ্যই "গুগল ক্লাউড প্ল্যাটফর্ম API ড্যাশবোর্ড" এ সক্ষম করতে হবে, তাই সেই লিঙ্কটিতে ক্লিক করুন যা বিকাশকারী কনসোলে অন্য একটি ব্রাউজার ট্যাব খোলে বা সংক্ষেপে "devconsole"।
  11. devconsole-এ, উপরের দিকে +Enable APIs এবং Services বোতামে ক্লিক করুন, "bigquery" অনুসন্ধান করুন, BigQuery API নির্বাচন করুন ( BigQuery ডেটা ট্রান্সফার API নয় ) এবং এটি চালু করতে সক্ষম ক্লিক করুন৷ এই ব্রাউজার ট্যাবটি খোলা রেখে দিন।

    দ্রষ্টব্য : API সক্রিয় হওয়ার পরে, আপনি এই পৃষ্ঠায় একটি নোট দেখতে পাবেন যা বলছে, "এই API ব্যবহার করার জন্য, আপনাকে শংসাপত্র তৈরি করতে হবে..." তবে আপাতত এটি নিয়ে চিন্তা করবেন না—Apps স্ক্রিপ্ট আপনার জন্য এই পদক্ষেপের যত্ন নিন।


  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 Sheet-এ লিখে, কিন্তু এই প্রশ্নটি কী? আপনি 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 স্টেটমেন্টটি একটি প্রজেক্ট আইডি ব্যতীত অ্যাপ্লিকেশনটিকে আর যেতে না দেওয়ার জন্য রয়েছে। একবার আপনি আপনারটি যোগ করলে, ফাইলটি সংরক্ষণ করুন এবং মেনুবারে গিয়ে আপনার কোড চালান এবং Run > Run function > runQuery নির্বাচন করুন, অনুমতি ডায়ালগ পর্যালোচনাতে ক্লিক করুন, এই অ্যাপটি যাচাই করা হয়নি, এবং নীচে একটি অ্যানিমেটেড GIF (অন্য অ্যাপের জন্য) ) পরবর্তী কয়েকটি ধাপের চিত্র তুলে ধরা হচ্ছে:
  4. একবার আপনি অনুমতিগুলি পর্যালোচনা করার অনুরোধ করলে, উপরে দেখানো হিসাবে আপনাকে একটি নতুন ডায়ালগ উপস্থাপন করা হবে। সঠিক Google অ্যাকাউন্ট বেছে নিন যিনি স্ক্রিপ্টটি চালাবেন, উন্নত নির্বাচন করুন, নিচে স্ক্রোল করুন, তারপর OAuth2 অ্যাপ্লিকেশন অনুমোদনের স্ক্রিনে পৌঁছতে "<Your PROJECT NAME> (অনিরাপদ)" এ ক্লিক করুন। (নিচের OAuth2 অনুমোদন ডায়ালগের মধ্যে কেন এই স্ক্রীনটি বসে আছে তা জানতে যাচাইকরণ প্রক্রিয়া সম্পর্কে আরও পড়ুন।)


    দ্রষ্টব্য: একবার আপনি অ্যাপটিকে অনুমোদন করলে, একবার প্রতিটি সম্পাদনের সাথে আপনাকে এই প্রক্রিয়াটি পুনরাবৃত্তি করতে হবে না। এই টিউটোরিয়ালে আপনি টাস্ক 3 এ না পৌঁছানো পর্যন্ত আপনি এই ডায়ালগ স্ক্রীনটি আবার দেখতে পাবেন, Google স্লাইড উপস্থাপনাগুলি তৈরি এবং পরিচালনা করার জন্য ব্যবহারকারীর অনুমতি চেয়েছেন৷
  5. একবার আপনি OAuth2 ডায়ালগ উইন্ডোতে Allow এ ক্লিক করলে, স্ক্রিপ্টটি চলতে শুরু করবে... আপনি উপরে একটি প্যাস্টেল হলুদ ডায়ালগ দেখতে পাবেন। এটি মোটামুটি দ্রুত চলে, তাই আপনি হয়তো লক্ষ্য করবেন না যে এটি চলছে বা এক্সিকিউশন সম্পন্ন হয়েছে।

  6. এই ডায়ালগটি একবার হয়ে গেলে অদৃশ্য হয়ে যায়, তাই আপনি যদি এটি দেখতে না পান তবে সম্ভবত এটি শেষ হয়ে গেছে, তাই আপনার Google ড্রাইভে ( drive.google.com ) যান এবং "শেক্সপিয়ারের সমস্ত রচনায় সর্বাধিক সাধারণ শব্দ" নামে একটি নতুন Google শীট সন্ধান করুন " অথবা যা কিছু আপনি QUERY_NAME ভেরিয়েবলে বরাদ্দ করেছেন:


  7. স্প্রেডশীটটি খুলুন, এবং আপনি 10টি শব্দের সারি দেখতে পাবেন এবং তাদের মোট সংখ্যাগুলি নিচের ক্রমে সাজানো আছে:

টাস্ক 1 সারাংশ

এইমাত্র কি ঘটেছে তা চিনুন... আপনি কিছু কোড চালিয়েছেন যা শেক্সপিয়রের সমস্ত কাজকে জিজ্ঞাসা করেছে (বিশাল পরিমাণে ডেটা নয়, তবে অবশ্যই তার চেয়ে বেশি পাঠ্য আপনি সহজেই প্রতিটি নাটকের প্রতিটি শব্দ দেখে নিজেরাই স্ক্যান করতে পারবেন, এরকম একটি গণনা পরিচালনা করে শব্দ, তারপর সেগুলি উপস্থিতির ক্রমানুসারে সাজানো। আপনি শুধুমাত্র BigQuery-কে আপনার পক্ষ থেকে এটি করতে বলেননি, আপনি Google Sheets-এর জন্য Apps Script-এর অন্তর্নির্মিত পরিষেবা ব্যবহার করতে সক্ষম হয়েছেন যাতে এই ডেটা সহজে ব্যবহার করা যায়। .

আপনি উপরে পেস্ট করেছেন bq-sheets-slides.js (আমাদের নির্বাচিত ফাইলের নাম) এর জন্য কোডটি ( PROJECT_ID বাদে যার একটি বাস্তব প্রজেক্ট আইডি থাকা উচিত) এছাড়াও github.com/googlecodelabs- এ এই কোডল্যাবের গিটহাব রেপোতে step1 ফোল্ডারে পাওয়া যাবে /bigquery-শীট-স্লাইড । কোডটি BigQuery অ্যাডভান্স সার্ভিস পৃষ্ঠার মূল উদাহরণ থেকে অনুপ্রাণিত হয়েছিল যা একটি সামান্য ভিন্ন কোয়েরি চালায়... শেক্সপিয়ার 10 বা তার বেশি অক্ষর সহ সবচেয়ে জনপ্রিয় শব্দগুলি কী কী। আপনি তার GitHub রেপোতে সেই নমুনাটিও দেখতে পারেন।

আপনি যদি অন্যান্য প্রশ্নে আগ্রহী হন তবে আপনি শেক্সপিয়রের কাজ বা অন্যান্য পাবলিক ডেটা টেবিলের বিরুদ্ধে চেষ্টা করতে পারেন, এই ওয়েব পৃষ্ঠাটির পাশাপাশি এটিও দেখুন ৷ আপনি যে ক্যোয়ারী ব্যবহার করুন না কেন, Apps স্ক্রিপ্টে চালানোর আগে আপনি সবসময় BigQuery কনসোলে ক্যোয়ারীটি পরীক্ষা করতে পারেন। BigQuery এর ব্যবহারকারী ইন্টারফেস bigquery.cloud.google.com- এ বিকাশকারীদের জন্য উপলব্ধ। উদাহরণ স্বরূপ, BigQuery UI ব্যবহার করে আমাদের ক্যোয়ারী কেমন দেখায় তা এখানে:

উপরের ধাপগুলি অ্যাপস স্ক্রিপ্টের কোড এডিটরকে লিভারেজ করার সময়, আপনি কমান্ড-লাইনের মাধ্যমে স্থানীয়ভাবে বিকাশ করতেও বেছে নিতে পারেন। আপনি যদি পছন্দ করেন, bq-sheets-slides.js নামে একটি স্ক্রিপ্ট তৈরি করুন, এতে উপরের কোডটি পেস্ট করুন, তারপর clasp clasp push কমান্ড দিয়ে Google-এ আপলোড করুন। (যদি আপনি এটি আগে মিস করেন, তাহলে এখানে আবার clasp করার লিঙ্ক এবং এটি কীভাবে ব্যবহার করবেন।)

runQuery() এর উদ্দেশ্য হল BigQuery-এর সাথে কথা বলা এবং এর ফলাফল একটি শীটে পাঠানো। এখন আমাদের ডেটা দিয়ে একটি চার্ট তৈরি করতে হবে। createColumnChart() নামে একটি নতুন ফাংশন তৈরি করা যাক যা এটি করার জন্য শীটের newChart() পদ্ধতিকে কল করে।

  1. চার্ট তৈরি করুন । runQuery() এর ঠিক পরে bq-sheets-slides.js এ নীচে বৈশিষ্ট্যযুক্ত createColumnChart() 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() -এর স্প্রেডশীট অবজেক্টের প্রয়োজন, তাই spreadsheet অবজেক্ট রিটার্ন করতে আমাদের runQuery() আপডেট করতে হবে যাতে আমরা এটি createColumnChart() এ পাস করতে পারি। গুগল শীট সফলভাবে তৈরি করার পরে লগ লাইনের ঠিক পরে, 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. কোড আরও পুনঃব্যবহারযোগ্য করুন । আপনি উপরে 2টি গুরুত্বপূর্ণ পদক্ষেপ নিয়েছেন: স্প্রেডশীট অবজেক্ট ফিরিয়ে দেওয়া এবং একটি ড্রাইভিং ফাংশন তৈরি করা। যদি একজন সহকর্মী runQuery() পুনঃব্যবহার করতে চায় এবং URL লগ করা না চায় তাহলে কি হবে? 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 repo-এর 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);
}

ফাইলটি সংরক্ষণ করুন, তারপর কোড এডিটরের শীর্ষে যান এবং createBigQueryPresentation() runQuery() করতে স্যুইচ করুন। এটি চালানোর পরে, আপনি অন্য একটি Google পত্রক পাবেন, কিন্তু এই সময়, একটি চার্ট ডেটার পাশে শীটে প্রদর্শিত হবে:

কোডল্যাবের চূড়ান্ত অংশে একটি নতুন Google স্লাইড উপস্থাপনা তৈরি করা, শিরোনাম স্লাইডে শিরোনাম এবং সাবটাইটেল পূরণ করা, তারপর 2টি নতুন স্লাইড যোগ করা, প্রতিটি ডেটা সেলের জন্য একটি এবং চার্টের জন্য আরেকটি।

  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() জন্য একটি স্প্রেডশীট এবং একটি চার্ট অবজেক্ট উভয়ই প্রয়োজন। আমরা ইতিমধ্যেই Spreadsheet অবজেক্ট ফেরত দিতে runQuery() সামঞ্জস্য করেছি কিন্তু এখন চার্ট ( EmbeddedChart ) অবজেক্ট ফেরত দিতে createColumnChart() এ একই রকম পরিবর্তন করতে হবে। এটি করতে createColumnChart() এর শেষে একটি শেষ লাইন যোগ করতে কোডে আপনার অ্যাপ্লিকেশনটিতে ফিরে যান:
  // NEW: Return chart object for later use
  return chart;
}
  1. createBigQueryPresentation() আপডেট করুন। যেহেতু createColumnChart() চার্টটি ফেরত দেয়, তাই আমাদের সেই চার্টটিকে একটি ভেরিয়েবলে সংরক্ষণ করতে হবে তারপর স্প্রেডশিট এবং চার্ট উভয়ই পাস করতে হবে createSlidePresentation() করতে। যেহেতু আমরা নতুন তৈরি স্প্রেডশীটের URL লগ করি, তাই আসুন নতুন স্লাইড উপস্থাপনার URLটিও লগ করি। আপনার 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 স্লাইড উপস্থাপনাগুলি দেখতে এবং পরিচালনা করার জন্য আপনার ব্যবহারকারীর কাছ থেকে আরও একটি সেট অনুমতি প্রয়োজন। একবার আপনি এই অনুমতি দিলে, এটি আগের মতই চলবে।
  2. এখন যে শীটটি তৈরি করা হয়েছে তার পাশাপাশি, আপনাকে 3টি স্লাইড (শিরোনাম, ডেটা টেবিল, ডেটা চার্ট) সহ একটি নতুন স্লাইড উপস্থাপনাও পেতে হবে, যা নীচে দেখানো হয়েছে:

অভিনন্দন! আপনি এখন একটি অ্যাপ্লিকেশন তৈরি করেছেন যা একটি Google BigQuery অনুরোধ সম্পাদন করে Google ক্লাউডের উভয় দিকের সুবিধা দেয় যা তার সর্বজনীন ডেটা সেটগুলির মধ্যে একটিকে জিজ্ঞাসা করে, ফলাফলগুলি সঞ্চয় করার জন্য একটি নতুন Google পত্রক তৈরি করে, এইমাত্র পুনরুদ্ধার করা ডেটার উপর ভিত্তি করে একটি চার্ট যোগ করে , এবং অবশেষে স্প্রেডশীটে ফলাফলের পাশাপাশি চার্ট সমন্বিত একটি Google স্লাইড উপস্থাপনা তৈরি করে।

আপনি টেকনিক্যালি সেটাই করেছেন। বিস্তৃতভাবে বলতে গেলে, আপনি একটি বড় ডেটা বিশ্লেষণ থেকে এমন কিছুতে গিয়েছিলেন যা আপনি স্টেকহোল্ডারদের কাছে উপস্থাপন করতে পারেন, সমস্তই কোডে, সমস্ত স্বয়ংক্রিয়৷ আমরা আশা করি এই নমুনা আপনাকে এটি নিতে এবং আপনার নিজের প্রকল্পের জন্য কাস্টমাইজ করতে অনুপ্রাণিত করবে। এই কোডল্যাবের উপসংহারে, আপনি কীভাবে এই নমুনা অ্যাপটিকে আরও উন্নত করতে পারেন সে সম্পর্কে আমরা কিছু পরামর্শ দেব।

চূড়ান্ত টাস্ক থেকে উপরের পরিবর্তনের সাথে (আবার PROJECT_ID ছাড়া), আপনার bq-sheets-slides.js এখন নিচের মত হওয়া উচিত (এবং GitHub রেপোর 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());
}

এই কোডল্যাবে কোন ভূমিকা নেই এই কোডল্যাবের "দ্বিতীয় ফাইল", যা অ্যাপস স্ক্রিপ্ট ম্যানিফেস্ট ফাইল, appsscript.json । আপনি কোড এডিটর ব্রাউজার ট্যাবে গিয়ে এবং উপরের মেনু থেকে দেখুন > ম্যানিফেস্ট ফাইল দেখান নির্বাচন করে এটি অ্যাক্সেস করতে পারেন। বিষয়বস্তু এই মত কিছু দেখতে হবে:

appsscript.json

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

ম্যানিফেস্ট ফাইল হল একটি সিস্টেম-স্তরের কনফিগারেশন ফাইল যা অ্যাপস স্ক্রিপ্ট আপনার অ্যাপ্লিকেশনের জন্য কী এক্সিকিউশন এনভায়রনমেন্ট উপলব্ধ থাকবে তা জানতে ব্যবহার করে। একটি ম্যানিফেস্ট ফাইলের বিষয়বস্তু কভার করা এই কোডল্যাবের সুযোগের বাইরে, তবে এটি কী করে সে সম্পর্কে আপনি ধারণা পেতে পারেন।

নীচে অতিরিক্ত সংস্থানগুলি রয়েছে যা আপনাকে এই কোডল্যাবে আচ্ছাদিত উপাদানের গভীরে খনন করতে সাহায্য করার পাশাপাশি প্রোগ্রামগতভাবে Google বিকাশকারী সরঞ্জামগুলি অ্যাক্সেস করার অন্যান্য উপায়গুলি অন্বেষণ করতে সহায়তা করে৷ আমরা এই কোডল্যাবটিকে রেপোর সাথে ইন-সিঙ্ক রাখার লক্ষ্য রাখি।

এই অ্যাপ্লিকেশনের জন্য সম্পদ

ডকুমেন্টেশন

অন্যান্য কোডল্যাব

পরিচিতিমূলক

মধ্যবর্তী

রেফারেন্স অ্যাপস

নীচে বিভিন্ন "কোড চ্যালেঞ্জ" দেওয়া হল, বিভিন্ন উপায়ে আপনি এই কোডল্যাবে যে নমুনা তৈরি করেছেন তা আপনি উন্নত বা বৃদ্ধি করতে পারেন৷ এই তালিকাটি অবশ্যই সম্পূর্ণ নয় তবে আপনি পরবর্তী পদক্ষেপটি কোথায় নিতে পারেন তার কিছু অনুপ্রেরণামূলক ধারণা প্রদান করা উচিত।

  • আবেদন । জাভাস্ক্রিপ্ট বা অ্যাপস স্ক্রিপ্ট দ্বারা আরোপিত বিধিনিষেধ ব্যবহার করে সীমাবদ্ধ হতে চান না? এই অ্যাপ্লিকেশনটিকে আপনার প্রিয় প্রোগ্রামিং ভাষায় পোর্ট করুন যা Google BigQuery, Sheets এবং Slides-এর জন্য REST API ব্যবহার করে।
  • BigQuery শেক্সপিয়ার ডেটাসেটের জন্য একটি ভিন্ন ক্যোয়ারী নিয়ে পরীক্ষা করুন... সম্ভবত আপনার আগ্রহের একটি ক্যোয়ারী খুঁজুন। অন্য একটি নমুনা ক্যোয়ারী মূল Apps Script BigQuery নমুনা অ্যাপে পাওয়া যাবে।
  • BigQuery BigQuery-এর অন্যান্য পাবলিক ডেটা সেটগুলির কিছু নিয়ে পরীক্ষা করুন... সম্ভবত এমন একটি ডেটা সেট খুঁজুন যা আপনার জন্য আরও অর্থবহ হতে পারে৷
  • BigQuery এর আগে, আমরা শেক্সপিয়ারের কাজ বা অন্যান্য পাবলিক ডেটা টেবিলের বিরুদ্ধে আপনি চেষ্টা করতে পারেন এমন অন্যান্য প্রশ্নের উল্লেখ করেছি, এবং এই ওয়েব পৃষ্ঠাটির পাশাপাশি এটি আবার শেয়ার করতে চেয়েছিলাম।
  • শীট অন্যান্য চার্ট ধরনের সঙ্গে পরীক্ষা.
  • পত্রক এবং BigQuery। টেবিলগুলো ঘুরিয়ে দাও... সম্ভবত আপনার কাছে একটি স্প্রেডশীটে একটি বড় ডেটা সেট আছে। 2016 সালে, BigQuery টিম বৈশিষ্ট্যটি চালু করেছে যা ডেভেলপারদের ডেটা উৎস হিসাবে একটি পত্রক ব্যবহার করার অনুমতি দেয় (আরো তথ্যের জন্য ব্লগ পোস্ট এক এবং দুটি দেখুন)।
  • স্লাইড জেনারেট করা প্রেজেন্টেশনে অন্যান্য স্লাইড যোগ করুন, যেমন ছবি বা আপনার বড় ডেটা বিশ্লেষণের সাথে সংযুক্ত অন্যান্য সম্পদ। আপনাকে শুরু করতে এখানে স্লাইডের অন্তর্নির্মিত পরিষেবার একটি নির্দেশিকা রয়েছে
  • জি স্যুট । অ্যাপস স্ক্রিপ্ট, যেমন, Gmail, Google ড্রাইভ, ক্যালেন্ডার, ডক্স, ম্যাপ, অ্যানালিটিক্স, ইউটিউব, ইত্যাদির পাশাপাশি অন্যান্য উন্নত পরিষেবাগুলি থেকে অন্যান্য G Suite বা Google বিল্ট-ইন পরিষেবাগুলির জন্য ব্যবহার খুঁজুন৷ আরও তথ্যের জন্য অন্তর্নির্মিত এবং উন্নত উভয় পরিষেবার জন্য রেফারেন্স ওভারভিউ দেখুন।