Ad esempio, supponiamo che tu stia cercando di creare una soluzione per le tue dell'organizzazione. L'organizzazione delle vendite è divisa in più regioni, dove ogni ha un proprio Regional Manager. Il set di dati sulle vendite in BigQuery contiene per regione e data.
La soluzione proposta avrà un'unica dashboard in cui i responsabili regionali possono visualizzare i dati sulle vendite solo per le proprie regioni.
Requisiti
- I visualizzatori della dashboard accederanno con un Account Google.
- È disponibile una mappatura tra l'email dell'utente e i dati/righe di cui dispone a cui accedono.
- Per accedere ai dati BigQuery verrà utilizzato un account di servizio. Di conseguenza, la fatturazione saranno centralizzate e gestite dal provider della dashboard.
Limitazioni
- La dashboard richiede prima un'autorizzazione una tantum da parte di ogni visualizzatore vista.
- I visualizzatori non possono modificare la dashboard né condividerla con altri.
- Se sei un cliente di Workspace e l'amministratore ha disattivato la condivisione File di Drive in "Chiunque abbia un link", rimuovi la condivisione limitazione o sviluppare la soluzione su un account Gmail.com.
Soluzione
Completa tutti i seguenti passaggi per implementare la soluzione.
Crea un nuovo connettore della community
Consulta Come funzionano i connettori della community e completa il Connettore della community Codelab per iniziare. Utilizza lo Strumento per sviluppatori per creare connettori per un un processo di sviluppo più rapido e semplice.
Scrivi il codice del connettore
getAuthType()
dovrebbe restituireNONE
.getConfig()
deve restituire una configurazione vuota.- (Facoltativo) Se hai bisogno di input specifici per la configurazione della dashboard, può richiedere l'input dell'utente qui.
getSchema()
deve restituire lo schema per la tua query.- (Facoltativo) Puoi aggiungere campi e calcoli personalizzati nel linguaggio SQL query o l'utilizzo di campi calcolati come parte dello schema.
- L'operazione
getData()
verrà completata in un passaggio successivo.
Aggiorna manifest
Visualizza il riferimento del file manifest e completa il file manifest con tutti i requisiti richiesti informazioni, tra cui:
- imposta
dataStudio.forceViewersCredentials
sutrue
. - imposta
dataStudio.advancedServices.data
sutrue
. - Per
oauthScopes
, aggiungihttps://www.googleapis.com/auth/userinfo.email
ehttps://www.googleapis.com/auth/script.external_request
. Vedi Autorizzazione Ambiti di Apps Script per ulteriori informazioni.- .
- Condizionale:aggiungi tutti gli ambiti pertinenti per i servizi utilizzati nel di rete.
Il file manifest dovrebbe avere il seguente aspetto:
{
...
"dataStudio": {
"forceViewersCredentials": true,
"advancedServices": {
"data": true
},
...
}
"oauthScopes": [
"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/userinfo.email"
],
...
}
Implementare un account di servizio
- Crea un account di servizio nel tuo progetto Google Cloud. Questo sarà il tuo progetto di fatturazione.
- Assicurati che questo account di servizio disponga dell'accesso a BigQuery nel progetto cloud.
- Ruoli IAM (Identity and Access Management) richiesti:
BigQuery Data Viewer
,BigQuery Job User
- Ruoli IAM (Identity and Access Management) richiesti:
- Scarica il file JSON per recuperare le chiavi degli account di servizio. Conserva le chiavi le proprietà dello script del progetto connettore.
- Includi la libreria OAuth2 per Apps Script nel tuo progetto Apps Script.
- Implementa il codice OAuth2 richiesto per l'account di servizio:
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']);
}
Implementa getData()
- Creare la tua query in BigQuery.
- Utilizzando l'email, cerca la mappatura tra l'email e i dati.
- Utilizza la clausola JOIN e/o WHERE per filtrare i dati.
- Recupera l'indirizzo email dell'utente effettivo (riferimento sull'identità dell'utente).
- Utilizza i servizi avanzati di Looker Studio per restituire la configurazione della query.
da getData.
- Passa la query creata, il progetto di fatturazione e l'account di servizio Token OAuth.
- Condizionale:se accetti l'input utente tramite il connettore
getConfig
, è necessario incorporare l'input come parametri BigQuery.
Crea la dashboard
- Scopri come funzionano i deployment e le versioni per i connettori.
- Crea un deployment di produzione per il connettore.
- Utilizza il deployment Produzione per creare un'origine dati e un nuovo report in e Looker Studio.
- Aggiungi tutte le tabelle e i grafici al report.
- La dashboard è ora pronta per essere condivisa con i tuoi utenti.
Rendi la dashboard disponibile per gli utenti
- Condividi lo script del connettore con gli utenti selezionati o con "Chiunque con link".
- Condividi la dashboard con utenti selezionati o con "Chiunque abbia ".
- Facoltativo:utilizza un servizio di abbreviazione di URL per creare un link breve per il . Condividi l'URL abbreviato con i tuoi utenti. Ciò consente di sostituire l'URL della dashboard in un secondo momento, se necessario.
- Facoltativo: misura l'utilizzo della dashboard configurando Google Analytics per il tuo report.
Codice di esempio
Di seguito è riportato un esempio completo del codice del connettore:
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();
}