たとえば、デベロッパー X がクライアント用のウェブ アプリケーションを提供しているとします。 クライアントは自身の認証情報を使用してアプリにログインし、さまざまな店舗の売上データを表示できます。クライアントがアクセスできる店舗のリストは、一人ひとり異なります。デベロッパーは、Looker Studio ダッシュボードをアプリケーションに埋め込んで、クライアントがログインしたときに、アクセス権のある店舗の販売データのみが表示されるようにしたいと考えています。このプロセスは、クライアントが Google アカウントにログインしていなくても機能します。
下記の解決方法では、デベロッパーはコミュニティ コネクタを作成し、埋め込み URL を介してトークンを渡し、そのトークンに基づいてデータをフィルタします。
要件
- ダッシュボードの閲覧者は、サードパーティ製アプリにログインする必要があります。
- アプリケーションは、埋め込み URL を介して一意のトークンを Looker Studio ダッシュボードに渡す必要があります。トークンは、フィルタ情報のルックアップに使用することも、フィルタ情報を暗号化することもできます。
- コミュニティ コネクタは、トークンをフィルタ値に変換できなければなりません。
制限事項
- G Suite のお客様で、管理者が [リンクを知っている全員] によるドライブ ファイルの共有を無効にしている場合、組織外のユーザーとレポートを共有することはできません。
解決策
この解決方法を実装するには、以下のすべての手順を行ってください。
ウェブアプリでユーザー トークンを生成する
ウェブ アプリケーションのログイン ユーザーごとに一意のトークンを生成します。このトークンは、後のステップで埋め込みダッシュボードに渡します。
トークンは、関連データのフィルタリングに使用されます。指定できるオプションは次のとおりです。
- 特定のトークンのフィルタされたデータまたはユーザー情報を返す API エンドポイントを作成します。
- 後でコネクタで復号できるように、トークン内のユーザー情報を暗号化します。
新しいコミュニティ コネクタを作成する
コミュニティ コネクタの仕組みを確認し、コミュニティ コネクタ Codelab を完了します。コネクタを作成するためのローカル開発ツールを使用して、開発プロセスをより迅速かつ簡単にします。
コネクタコードを記述する
getConfig()
は、少なくとも 1 つの設定項目を返します。このメソッドを使用して、埋め込み URL のパラメータからトークンを取得します。function getConfig(request) { var cc = DataStudioApp.createCommunityConnector(); var config = cc.getConfig(); config .newTextInput() .setId('token') .setName('Enter user token'); // TODO: Add additional config values if applicable for your connector config.setDateRangeRequired(false); config.setIsSteppedConfig(false); return config.build(); }
getData()
は、request.configParams
オブジェクトを介してトークンにアクセスできます。トークンを使用して、フィルタされたデータを取得するか、取得された既存のデータをフィルタします。
上記の例の場合、トークンはrequest.configParams.token
になります。getData()
では、トークンが REST API エンドポイントに渡され、店舗 ID のリストが取得されます。次に、これらの店舗 ID を使用して、販売データを取得する SQL クエリを作成します。var STORE_ID_API = 'https://www.example.com/api/storeid'; var QUERY_STRING_PREFIX = "SELECT StoreName, Sales from stores" function getData(request) { var token = request.configParams.token; var storeIds = getStoreIdList(token); var queryString = constructQueryString(storeIds); var fetchedData = fetchData(queryString); // rest of getData() implementation } function getStoreIdList(token) { var url = STORE_ID_API; var response = UrlFetchApp.fetch(url); var parsedResponse = JSON.parse(response); return parsedResponse.storeIds; } function constructQueryString(storeIds) { var storeIdString = storeIds.join(','); var queryString = QUERY_STRING_PREFIX + ' WHERE storeId in (' + storeIdString + ')'; return queryString; }
ダッシュボードを作成する
- コネクタのデプロイとバージョンの仕組みを理解します。
- コネクタの本番環境デプロイを作成します。
- 本番環境のデプロイリンクを使用して、Looker Studio でデータソースとレポートを作成します。
token
構成パラメータで、レポート閲覧者がパラメータ値を変更できるようにします。- 選択したユーザーまたは「リンクを知っている全員」にダッシュボードを共有します。
- レポートの埋め込みを有効にします。
ダッシュボードをプラットフォームに埋め込む
- レポートの URL パラメータの仕組みを確認します。
- URL パラメータを使用して、動的に生成されたトークン値を埋め込み Looker Studio レポートに渡します。
埋め込み URL は次のようになります。
`https://lookerstudio.google.com/embed/reporting/REPORT_ID/page/PAGE_ID?config=%7B%22ds0%22%3A%7B%22token%22%3A%22TOKEN_VALUE%22%7D%7D
推奨事項
- トークンの有効期間は短くしてください。
- 無効なトークンを使用して表示された情報がダッシュボードから漏洩していないことを確認します。