예를 들어 영업 조직을 위한 솔루션을 만들려고 한다고 가정해 보겠습니다. 영업 조직은 여러 리전으로 나뉘며 각 리전에는 자체 리전 관리자가 있습니다. BigQuery의 영업 데이터 세트에는 리전별 및 날짜별 영업 금액이 있습니다.
제안된 솔루션에는 리전 관리자가 자신의 리전의 영업 데이터만 볼 수 있는 단일 대시보드가 있습니다.
요구사항
- 대시보드 뷰어는 Google 계정으로 로그인합니다.
- 사용자의 이메일과 액세스 권한이 있는 데이터/행 간의 매핑을 사용할 수 있습니다.
- 서비스 계정은 BigQuery 데이터에 액세스하는 데 사용됩니다. 따라서 결제는 대시보드 제공업체에서 중앙 집중식으로 관리합니다.
제한사항
- 대시보드에는 첫 번째 뷰에서 각 뷰어의 일회성 승인이 필요합니다.
- 뷰어는 대시보드를 수정하거나 다른 사용자와 공유할 수 없습니다.
- Workspace 고객이고 관리자가 '링크가 있는 모든 사용자'에게 Drive 파일 공유를 사용 중지한 경우 공유 제한을 삭제하거나 Gmail.com 계정에서 솔루션을 개발합니다.
솔루션
솔루션을 구현하려면 다음 단계를 모두 완료하세요.
새 커뮤니티 커넥터 만들기
커뮤니티 커넥터 작동 방식을 검토하고 커뮤니티 커넥터 Codelab을 완료하여 시작하세요. 개발자 도구를 사용하여 커넥터를 만들면 개발 프로세스를 더 빠르고 쉽게 진행할 수 있습니다.
커넥터 코드 작성
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를 추가합니다. 자세한 내용은 Authorization Scopes for Apps Script를 참고하세요.- 조건부: 커넥터에 사용된 서비스와 관련된 모든 범위를 추가합니다.
매니페스트는 다음과 같아야 합니다.
{
...
"dataStudio": {
"forceViewersCredentials": true,
"advancedServices": {
"data": true
},
...
}
"oauthScopes": [
"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/userinfo.email"
],
...
}
서비스 계정 구현
- 서비스 계정을 만듭니다. Google Cloud 프로젝트에서 이 프로젝트가 결제 프로젝트가 됩니다.
- 이 서비스 계정에 클라우드 프로젝트의 BigQuery 액세스 권한이 있는지 확인합니다.
- 필수 Identity and Access Management (IAM) 역할:
BigQuery Data Viewer,BigQuery Job User
- 필수 Identity and Access Management (IAM) 역할:
- JSON 파일을 다운로드하여 서비스 계정 키를 가져옵니다. 커넥터 프로젝트의 스크립트 속성에 키를 저장합니다.
- 포함합니다. Apps Script용 OAuth2 라이브러리를 Apps Script 프로젝트에
- 서비스 계정에 필요한 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 절을 사용하여 데이터를 필터링합니다.
- 유효한 사용자의 이메일 (사용자 ID 참조)을 가져옵니다.
- [데이터 스튜디오 고급 서비스] 를 사용하여 getData에서 쿼리 구성을 반환합니다.
- 구성된 쿼리, 결제 프로젝트, 서비스 계정 OAuth 토큰을 전달합니다.
- 조건부: 커넥터
getConfig를 통해 사용자 입력을 받는 경우 입력을 BigQuery 매개변수로 통합해야 합니다.
대시보드 만들기
- 커넥터의 배포 및 버전 작동 방식을 이해합니다.
- 커넥터의 프로덕션 배포를 만듭니다.
- 프로덕션 배포를 사용하여 데이터 스튜디오에서 데이터 소스와 새 보고서를 만듭니다.
- 보고서에 모든 표와 차트를 추가합니다.
- 이제 대시보드를 사용자와 공유할 수 있습니다.
사용자가 대시보드를 사용할 수 있도록 설정
- 선택한 사용자 또는 ' 링크가 있는 모든 사용자'와 커넥터 스크립트를 공유합니다.
- 대시보드 공유를 선택한 사용자 또는 '링크가 있는 모든 사용자'와 공유합니다.
- 선택사항: URL 단축기 서비스를 사용하여 대시보드 URL의 짧은 링크를 만듭니다. 단축된 URL을 사용자와 공유합니다. 이렇게 하면 나중에 필요한 경우 대시보드 URL을 대체하는 데 도움이 됩니다.
- 선택사항: 대시보드 사용량 측정을 위해 Google 애널리틱스를 설정하여 보고서에 연결합니다.