使用嵌入式信息中心进行行级过滤

例如,假设开发者 X 为其客户提供了一款 Web 应用。客户使用自己的凭据登录该应用,且可以查看不同商店的销售数据。每个客户都可以访问一系列不同的商店。该开发者希望在其应用中嵌入一个数据洞察信息中心,以便客户登录时,仅能看到他们有权访问的商店的销售数据。此过程的执行应无需客户登录其 Google 帐号。

所提解决方案需要开发者创建一个社区连接器,通过嵌入网址传递一个令牌,然后基于该令牌过滤数据。

要求

  • 信息中心查看者将登录第三方应用。
  • 应用应通过嵌入网址向数据洞察信息中心传递一个唯一的令牌。该令牌可以用于查询过滤器信息,或让过滤器信息在其中加密。
  • 社区连接器应该能够将该令牌转换为过滤器值。

限制

  • 如果您是 G Suite 客户,并且您的管理员已禁止与“知道链接的任何人”共享云端硬盘文件,您将无法与贵组织以外的用户共享报告。

解决方案

要实现该解决方案,请完成以下步骤。

在 Web 应用中生成用户令牌

为您的 Web 应用中的每位登录用户生成唯一的令牌。您将在后续步骤中向嵌入式信息中心传递该令牌。

您应该使用该令牌过滤相关数据。选项包括:

  • 创建一个 API 端点,该端点会针对特定令牌返回过滤后的数据或用户信息。
  • 在该令牌中加密用户信息,以便稍后可以在连接器中将其解密。

创建新的社区连接器

查看社区连接器的工作原理并完成社区连接器 Codelab 以开始使用。使用用于创建连接器的本地开发工具,以实现更快捷、更轻松的开发流程。

编写连接器代码

  1. getConfig() 应返回至少一个配置项。它将用于从嵌入网址的参数中捕获令牌。

    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. 了解报告网址参数的工作原理。
  2. 使用网址参数将动态生成的令牌值传递至嵌入式数据洞察报告。
    您的嵌入网址类似于以下内容:
    <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

建议

  • 您应该创建一个短期令牌。
  • 确保信息中心不会向使用无效令牌查看的用户泄露任何信息。