উদাহরণস্বরূপ, ধরুন আপনি আপনার বিক্রয় সংস্থার জন্য একটি সমাধান তৈরি করার চেষ্টা করছেন। বিক্রয় সংস্থা একাধিক অঞ্চলে বিভক্ত যেখানে প্রতিটি অঞ্চলের নিজস্ব আঞ্চলিক ব্যবস্থাপক রয়েছে৷ BigQuery-এর বিক্রয় ডেটাসেটে অঞ্চল এবং তারিখ অনুসারে বিক্রয়ের পরিমাণ রয়েছে।
প্রস্তাবিত সমাধানটিতে একটি একক ড্যাশবোর্ড থাকবে যেখানে আঞ্চলিক পরিচালকরা শুধুমাত্র তাদের নিজস্ব অঞ্চলের জন্য বিক্রয় ডেটা দেখতে পারবেন।
প্রয়োজনীয়তা
- ড্যাশবোর্ড দর্শকদের একটি Google অ্যাকাউন্ট দিয়ে সাইন-ইন করা হবে।
- একটি ম্যাপিং ব্যবহারকারীর ইমেল এবং ডেটা/সারির মধ্যে তাদের অ্যাক্সেস আছে।
- BigQuery ডেটা অ্যাক্সেস করতে একটি পরিষেবা অ্যাকাউন্ট ব্যবহার করা হবে। এইভাবে বিলিং ড্যাশবোর্ড প্রদানকারী দ্বারা কেন্দ্রীভূত এবং পরিচালিত হবে।
সীমাবদ্ধতা
- ড্যাশবোর্ডের প্রথম দর্শনে প্রতিটি দর্শকের কাছ থেকে এক-বারের অনুমোদন প্রয়োজন৷
- দর্শকরা ড্যাশবোর্ড সম্পাদনা করতে বা অন্যদের সাথে ভাগ করতে পারবেন না।
- আপনি যদি ওয়ার্কস্পেস গ্রাহক হন এবং আপনার অ্যাডমিনিস্ট্রেটর "লিঙ্ক সহ যে কেউ" এর সাথে ড্রাইভ ফাইলগুলি ভাগ করা অক্ষম করে থাকেন, হয় ভাগ করার সীমাবদ্ধতা সরিয়ে দিন বা Gmail.com অ্যাকাউন্টে সমাধানটি বিকাশ করুন৷
সমাধান
সমাধানটি বাস্তবায়ন করতে নিম্নলিখিত সমস্ত পদক্ষেপগুলি সম্পূর্ণ করুন।
একটি নতুন সম্প্রদায় সংযোগকারী তৈরি করুন৷
কমিউনিটি কানেক্টর কিভাবে কাজ করে তা পর্যালোচনা করুন এবং শুরু করতে কমিউনিটি কানেক্টর কোডল্যাব সম্পূর্ণ করুন। একটি দ্রুত এবং সহজ উন্নয়ন প্রক্রিয়ার জন্য সংযোগকারী তৈরি করতে বিকাশকারী টুল ব্যবহার করুন।
সংযোগকারী কোড লিখুন
-
getAuthType()
NONE
ফেরত দেওয়া উচিত নয়। -
getConfig()
একটি খালি কনফিগারেশন ফেরত দিতে হবে।- ঐচ্ছিক: ড্যাশবোর্ড কনফিগার করার জন্য আপনার যদি নির্দিষ্ট ইনপুট প্রয়োজন হয়, আপনি এখানে ব্যবহারকারীর ইনপুট অনুরোধ করতে পারেন।
-
getSchema()
আপনার প্রশ্নের জন্য স্কিমা ফেরত দিতে হবে।- ঐচ্ছিক: আপনি SQL ক্যোয়ারীতে কাস্টম ক্ষেত্র এবং গণনা যোগ করতে পারেন অথবা স্কিমার অংশ হিসাবে গণনা করা ক্ষেত্র ব্যবহার করতে পারেন।
-
getData()
পরবর্তী ধাপে সম্পন্ন হবে।
ম্যানিফেস্ট আপডেট করুন
ম্যানিফেস্ট রেফারেন্স দেখুন এবং নিম্নলিখিত সহ সমস্ত প্রয়োজনীয় তথ্য সহ ম্যানিফেস্ট সম্পূর্ণ করুন:
-
dataStudio.forceViewersCredentials
true
সেট করুন। -
dataStudio.advancedServices.data
true
সেট করুন। -
oauthScopes
এর জন্যhttps://www.googleapis.com/auth/userinfo.email
এবংhttps://www.googleapis.com/auth/script.external_request
যোগ করুন। আরও তথ্যের জন্য অ্যাপস স্ক্রিপ্টের অনুমোদনের সুযোগ দেখুন।- শর্তসাপেক্ষ: সংযোগকারীতে ব্যবহৃত পরিষেবাগুলির জন্য সমস্ত প্রাসঙ্গিক সুযোগ যোগ করুন।
ম্যানিফেস্টটি এইরকম হওয়া উচিত:
{
...
"dataStudio": {
"forceViewersCredentials": true,
"advancedServices": {
"data": true
},
...
}
"oauthScopes": [
"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/userinfo.email"
],
...
}
একটি পরিষেবা অ্যাকাউন্ট বাস্তবায়ন করুন
- আপনার Google ক্লাউড প্রকল্পে একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন । এটি আপনার বিলিং প্রকল্প হবে।
- ক্লাউড প্রোজেক্টে এই পরিষেবা অ্যাকাউন্টের BigQuery অ্যাক্সেস আছে কিনা তা নিশ্চিত করুন।
- প্রয়োজনীয় আইডেন্টিটি এবং অ্যাক্সেস ম্যানেজমেন্ট (IAM) ভূমিকা:
BigQuery Data Viewer
,BigQuery Job User
- প্রয়োজনীয় আইডেন্টিটি এবং অ্যাক্সেস ম্যানেজমেন্ট (IAM) ভূমিকা:
- পরিষেবা অ্যাকাউন্ট কী পেতে JSON ফাইলটি ডাউনলোড করুন। আপনার সংযোগকারী প্রকল্পের স্ক্রিপ্ট বৈশিষ্ট্যে কীগুলি সংরক্ষণ করুন।
- আপনার Apps স্ক্রিপ্ট প্রকল্পে Apps স্ক্রিপ্ট লাইব্রেরির জন্য OAuth2 অন্তর্ভুক্ত করুন ।
- পরিষেবা অ্যাকাউন্টের জন্য প্রয়োজনীয় OAuth2 কোড প্রয়োগ করুন:
var SERVICE_ACCOUNT_CREDS = 'SERVICE_ACCOUNT_CREDS'; var SERVICE_ACCOUNT_KEY = 'private_key'; var SERVICE_ACCOUNT_EMAIL = 'client_email'; var BILLING_PROJECT_ID = 'project_id'; /** * Copy the entire credentials JSON file from creating a service account in GCP. */ function getServiceAccountCreds() { return JSON.parse(scriptProperties.getProperty(SERVICE_ACCOUNT_CREDS)); } function getOauthService() { var serviceAccountCreds = getServiceAccountCreds(); var serviceAccountKey = serviceAccountCreds[SERVICE_ACCOUNT_KEY]; var serviceAccountEmail = serviceAccountCreds[SERVICE_ACCOUNT_EMAIL]; return OAuth2.createService('RowLevelSecurity') .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth') .setTokenUrl('https://accounts.google.com/o/oauth2/token') .setPrivateKey(serviceAccountKey) .setIssuer(serviceAccountEmail) .setPropertyStore(scriptProperties) .setCache(CacheService.getScriptCache()) .setScope(['https://www.googleapis.com/auth/bigquery.readonly']); }
getData()
প্রয়োগ করুন
- আপনার BigQuery কোয়েরি তৈরি করুন।
- ইমেল ব্যবহার করে, ইমেল এবং ডেটার মধ্যে ম্যাপিং দেখুন।
- ডেটা ফিল্টার করতে JOIN এবং/অথবা WHERE ক্লজ ব্যবহার করুন।
- কার্যকর ব্যবহারকারীর ইমেল পান ( ব্যবহারকারীর পরিচয় রেফারেন্স )।
- getData থেকে ক্যোয়ারী কনফিগারেশন ফেরত দিতে Looker Studio Advanced Services ব্যবহার করুন।
- তৈরি করা প্রশ্ন, বিলিং প্রকল্প এবং পরিষেবা অ্যাকাউন্ট OAuth টোকেন পাস করুন।
- শর্তসাপেক্ষ: আপনি যদি কানেক্টর
getConfig
এর মাধ্যমে ব্যবহারকারীর ইনপুট নিচ্ছেন, তাহলে আপনাকে BigQuery প্যারামিটার হিসেবে ইনপুটটি অন্তর্ভুক্ত করতে হবে।
ড্যাশবোর্ড তৈরি করুন
- সংযোগকারীর জন্য স্থাপনা এবং সংস্করণগুলি কীভাবে কাজ করে তা বুঝুন।
- সংযোগকারীর জন্য একটি উত্পাদন স্থাপনা তৈরি করুন ।
- লুকার স্টুডিওতে একটি ডেটা উত্স এবং একটি নতুন প্রতিবেদন তৈরি করতে উত্পাদন স্থাপনা ব্যবহার করুন৷
- রিপোর্টে সমস্ত টেবিল এবং চার্ট যোগ করুন।
- ড্যাশবোর্ড এখন আপনার ব্যবহারকারীদের সাথে শেয়ার করার জন্য প্রস্তুত।
ড্যাশবোর্ড ব্যবহারকারীদের জন্য উপলব্ধ করুন
- সংযোগকারী স্ক্রিপ্টটি নির্বাচিত ব্যবহারকারীদের সাথে বা "লিঙ্ক সহ যে কেউ" এর সাথে ভাগ করুন ৷
- নির্বাচিত ব্যবহারকারীদের সাথে বা "লিঙ্ক সহ যে কেউ" এর সাথে ড্যাশবোর্ড ভাগ করুন ৷
- ঐচ্ছিক: ড্যাশবোর্ড URL-এর জন্য একটি শর্ট-লিঙ্ক তৈরি করতে একটি URL শর্টনার পরিষেবা ব্যবহার করুন৷ আপনার ব্যবহারকারীদের সাথে সংক্ষিপ্ত URL ভাগ করুন. এটি পরে প্রয়োজন হলে ড্যাশবোর্ড URL প্রতিস্থাপন করতে সাহায্য করে।
- ঐচ্ছিক: আপনার রিপোর্টের জন্য Google Analytics সেট আপ করে ড্যাশবোর্ডের ব্যবহার পরিমাপ করুন ।
উদাহরণ কোড
নিম্নলিখিত সংযোগকারী কোডের একটি সম্পূর্ণ উদাহরণ:
main.js
var cc = DataStudioApp.createCommunityConnector(); var scriptProperties = PropertiesService.getScriptProperties(); function isAdminUser() { return true; } function getAuthType() { var AuthTypes = cc.AuthType; return cc .newAuthTypeResponse() .setAuthType(AuthTypes.NONE) .build(); } function getConfig(request) { var config = cc.getConfig(); config .newInfo() .setId('generalInfo') .setText('This is an example connector to showcase row level security.'); return config.build(); } function getFields() { var fields = cc.getFields(); var types = cc.FieldType; var aggregations = cc.AggregationType; fields .newDimension() .setId('region') .setName('Region') .setType(types.TEXT); fields .newMetric() .setId('sales') .setName('Sales') .setType(types.NUMBER) .setAggregation(aggregations.SUM); fields .newDimension() .setId('date') .setName('Date') .setType(types.YEAR_MONTH_DAY); return fields; } function getSchema(request) { return {schema: getFields().build()}; } var SERVICE_ACCOUNT_CREDS = 'SERVICE_ACCOUNT_CREDS'; var SERVICE_ACCOUNT_KEY = 'private_key'; var SERVICE_ACCOUNT_EMAIL = 'client_email'; var BILLING_PROJECT_ID = 'project_id'; /** * Copy the entire credentials JSON file from creating a service account in GCP. */ function getServiceAccountCreds() { return JSON.parse(scriptProperties.getProperty(SERVICE_ACCOUNT_CREDS)); } function getOauthService() { var serviceAccountCreds = getServiceAccountCreds(); var serviceAccountKey = serviceAccountCreds[SERVICE_ACCOUNT_KEY]; var serviceAccountEmail = serviceAccountCreds[SERVICE_ACCOUNT_EMAIL]; return OAuth2.createService('RowLevelSecurity') .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth') .setTokenUrl('https://accounts.google.com/o/oauth2/token') .setPrivateKey(serviceAccountKey) .setIssuer(serviceAccountEmail) .setPropertyStore(scriptProperties) .setCache(CacheService.getScriptCache()) .setScope(['https://www.googleapis.com/auth/bigquery.readonly']); } var BASE_SQL = 'SELECT d.region, d.sales, d.date ' + 'FROM `datastudio-solutions.row_level_security.data` d ' + 'INNER JOIN `datastudio-solutions.row_level_security.access` a ' + 'ON d.region = a.region ' + 'where a.email=@email'; function getData(request) { var accessToken = getOauthService().getAccessToken(); var serviceAccountCreds = getServiceAccountCreds(); var billingProjectId = serviceAccountCreds[BILLING_PROJECT_ID]; var email = Session.getEffectiveUser().getEmail(); var bqTypes = DataStudioApp.createCommunityConnector().BigQueryParameterType; return cc .newBigQueryConfig() .setAccessToken(accessToken) .setBillingProjectId(billingProjectId) .setUseStandardSql(true) .setQuery(BASE_SQL) .addQueryParameter('email', bqTypes.STRING, email) .build(); }