埋め込みダッシュボードを使用して、行単位でフィルタする

たとえば、あるデベロッパーがクライアントにウェブアプリを提供しているとします。 クライアントは自身の認証情報を使用してアプリにログインし、さまざまな店舗の売上データを閲覧します。クライアントがアクセスできる店舗のリストは、一人ひとり異なります。デベロッパーはアプリにデータポータル ダッシュボードを埋め込んで、ログインするクライアントに各自がアクセス可能な店舗の販売データのみを表示します。このプロセスは、クライアントが Google アカウントにログインしていなくても機能します。

下記の解決方法では、デベロッパーはコミュニティ コネクタを作成し、埋め込み URL を介してトークンを渡し、そのトークンに基づいてデータをフィルタします。

要件

  • ダッシュボードの閲覧者は、サードパーティ製アプリにログインする必要があります。
  • アプリは、埋め込み URL を介して、データポータルのダッシュボードに一意のトークンを渡します。トークンを使用してフィルタ情報を取得することも、トークンに暗号化されたフィルタ情報を格納することもできます。
  • コミュニティ コネクタは、トークンをフィルタ値に変換できなければなりません。

制限事項

  • G Suite をご利用のお客様は、管理者がドライブ ファイルの共有で「リンクを知っている全員」を無効にしている場合、組織外のユーザーとレポートを共有することはできません。

解決方法

この解決方法を実装するには、以下のすべての手順を行ってください。

ウェブアプリでユーザー トークンを生成する

ウェブアプリで、ログインしている各ユーザーに一意のトークンを生成します。このトークンを後のステップで埋め込みダッシュボードに渡します。

トークンは、関連データのフィルタリングに使用されます。次のようなオプションがあります。

  • API エンドポイントを作成し、トークンに対してフィルタされたデータまたはユーザー情報を返します。
  • トークンに格納されているユーザー情報を暗号化し、後でコネクタで復号化します。

新しいコミュニティ コネクタを作成する

コミュニティ コネクタの仕組みを視聴し、コミュニティ コネクタのコードラボを完了します。コネクタ作成用のローカル開発ツールを使うと、開発作業をより効率的に進めることができます。

コネクタコードを記述する

  1. 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();
        }
        
  2. 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;
        }
        

ダッシュボードを作成する

  1. コネクタのデプロイとバージョンの仕組みを理解します。
  2. コネクタの本番環境デプロイを作成します。
  3. 本番環境デプロイのリンクを使用して、データポータルでデータソースとレポートを作成します。
  4. token 設定パラメータで、レポートの閲覧者がパラメータ値を変更できるようにします。
  5. 選択したユーザーまたは「リンクを知っている全員」とダッシュボードを共有します。
  6. レポートの埋め込みを有効にします。

ダッシュボードをプラットフォームに埋め込む

  1. レポートの URL パラメータの仕組みを確認します。
  2. URL パラメータを使用して、埋め込みデータポータル レポートに、動的に生成されたトークン値を渡します。
    埋め込み URL は次のようになります。:
    <pre class="prettyprint">https://datastudio.google.com/embed/reporting/REPORT_ID/page/PAGE_ID?config=%7B%22ds0%22%3A%7B%22token%22%3A%22TOKEN_VALUE%22%7D%7D

おすすめの方法

  • トークンの有効期間は短くしてください。
  • トークンが無効な場合、ダッシュボードには情報が一切表示されないようにしてください。