如何基于用户/邮箱过滤Google Data Studio仪表盘实现权限控制
Google Data Studio 基于登录账号实现主管维度行级访问控制的实现方案
方案一:原生无代码配置(推荐优先使用)
不需要额外写代码,利用Looker Studio(原Google Data Studio)自带的行级权限能力即可实现:
- 配置数据源凭据
打开已绑定的Google Sheets数据源编辑页,右上角访问凭据设置选择查看者凭据,禁止使用所有者凭据,否则过滤规则无法对不同访问用户生效。 - 调用系统内置用户参数
在数据源字段面板点击「添加参数」,选择系统预置的@USER_EMAIL参数,该参数会自动拉取当前登录查看报告的Google账号邮箱,无需手动传值。 - 配置全局过滤规则
新建报告级过滤器,匹配规则设置为:数据表的Email字段 等于@USER_EMAIL。匹配你提到的示例场景:只要数据表中归属主管Natalie管辖的所有行,
Email字段值和Natalie的Google登录邮箱完全一致,过滤器生效后她就只能看到名下3条团队记录,自动聚合出的平均得分、记录数都会基于过滤后的数据集计算,不会展示其他主管的团队数据。 - 效果校验
配置完成后使用报告右上角的「预览为用户」功能,输入Natalie的邮箱测试,确认统计结果符合预期(3条记录、平均得分6)即可。
方案二:Google Apps Script 自定义管控(适配Google Sites部署场景)
如果需要更灵活的权限逻辑(如临时授权、跨团队权限继承),可以结合GAS做数据源层面的权限过滤,避免前端过滤被绕过:
- 第一步:在存储数据的Google Sheets中绑定脚本
打开对应数据表,点击「扩展程序 > Apps Script」,编写权限过滤逻辑:function getUserPermittedData() { const SHEET_NAME = '替换为你实际存储数据的工作表名称'; const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME); const allData = sheet.getDataRange().getValues(); // 获取当前访问用户的登录邮箱 const currentEmail = Session.getActiveUser().getEmail(); // 过滤当前用户管辖范围内的数据,跳过表头行 const permittedRows = allData.slice(1).filter(row => row[3].trim().toLowerCase() === currentEmail.trim().toLowerCase()); // 预计算聚合值,降低前端渲染压力 const recordCount = permittedRows.length; const avgScore = recordCount ? permittedRows.reduce((sum, row) => sum + Number(row[1] || 0), 0) / recordCount : 0; return { detail: permittedRows, stat: { totalCount: recordCount, averageScore: Math.round(avgScore * 100) / 100 } } } - 第二步:部署Web应用
将脚本部署为Web应用,执行身份选择「以访问用户身份运行」,访问权限限定为组织内成员。 - 第三步:嵌入Google Sites
可以直接在Google Sites中插入Apps Script组件展示自定义渲染的统计面板,也可以将GAS返回的过滤后数据作为自定义数据源接入Data Studio,从数据源层就只返回当前用户有权限查看的内容,安全性更高。
配置注意事项
- 不要给报告查看者开放数据源、过滤器的编辑权限,否则用户可以自行删除过滤规则查看全量数据
- 邮箱匹配为精确匹配,建议提前在Sheets中用
TRIM()、LOWER()函数清洗Email字段,避免空格、大小写差异导致匹配失败 - 如果你的组织开启了Google Workspace管理员限制,需要确认
@USER_EMAIL、Session.getActiveUser()接口的调用权限已经对报告/脚本开放
内容的提问来源于stack exchange,提问作者Abhijeet
相关产品推荐
相关产品推荐

