🚀 快速安装

复制以下命令并运行,立即安装此 Skill:

npx @anthropic-ai/skills install supercent-io/skills-template/looker-studio-bigquery

💡 提示:需要 Node.js 和 NPM

何时使用此技能

  • 创建分析仪表板:可视化 BigQuery 数据以获取业务洞察
  • 实时报告:构建自动刷新的仪表板
  • 性能优化:优化查询成本和大数据集的加载时间
  • 数据管道:使用定时查询自动化 ETL 流程
  • 团队协作:构建可共享的交互式仪表板

操作指南

步骤 1:准备 GCP BigQuery 环境

项目创建与启用

在 Google Cloud Console 中创建新项目并启用 BigQuery API。

# 使用 gcloud CLI 创建项目
gcloud projects create my-analytics-project
gcloud config set project my-analytics-project
gcloud services enable bigquery.googleapis.com

创建数据集和数据表

-- 创建数据集
CREATE SCHEMA `my-project.analytics_dataset`
  OPTIONS(
    description="分析数据集",
    location="US"
  );

-- 创建示例表 (GA4 数据)
CREATE TABLE `my-project.analytics_dataset.events` (
  event_date DATE,
  event_name STRING,
  user_id INT64,
  event_value FLOAT64,
  event_timestamp TIMESTAMP,
  geo_country STRING,
  device_category STRING
);

IAM 权限配置

授予 IAM 权限以便 Looker Studio 能够访问 BigQuery:

角色 描述
BigQuery Data Viewer 数据表读取权限
BigQuery User 查询执行权限
BigQuery Job User 作业执行权限

步骤 2:在 Looker Studio 中连接 BigQuery

使用原生 BigQuery 连接器(推荐)

  1. 在 Looker Studio 首页,点击 + 创建数据源
  2. 搜索 “BigQuery”,选择 Google BigQuery 连接器
  3. 使用 Google 账号进行身份验证
  4. 选择项目、数据集和表
  5. 点击 连接 创建数据源

自定义 SQL 查询方式

当需要进行复杂的数据转换时,可以直接编写 SQL:

SELECT
  event_date,
  event_name,
  COUNT(DISTINCT user_id) as unique_users,
  SUM(event_value) as total_revenue,
  AVG(event_value) as avg_revenue_per_event
FROM `my-project.analytics_dataset.events`
WHERE event_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
GROUP BY event_date, event_name
ORDER BY event_date DESC

优点:

  • 在 SQL 中处理复杂的数据转换
  • 在 BigQuery 中预先聚合数据以降低查询成本
  • 避免每次加载全部数据,提升性能

多表连接方式

SELECT
  e.event_date,
  e.event_name,
  u.user_country,
  u.user_tier,
  COUNT(DISTINCT e.user_id) as unique_users,
  SUM(e.event_value) as revenue
FROM `my-project.analytics_dataset.events` e
LEFT JOIN `my-project.analytics_dataset.users` u
  ON e.user_id = u.user_id
WHERE e.event_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY)
GROUP BY e.event_date, e.event_name, u.user_country, u.user_tier

步骤 3:使用定时查询优化性能

使用定时查询替代实时查询,定期预计算数据:

-- 每日在 BigQuery 中计算并存储聚合数据
CREATE OR REPLACE TABLE `my-project.analytics_dataset.daily_summary` AS
SELECT
  CURRENT_DATE() as report_date,
  event_name,
  user_country,
  COUNT(DISTINCT user_id) as daily_users,
  SUM(event_value) as daily_revenue,
  AVG(event_value) as avg_event_value,
  MAX(event_timestamp) as last_event_time
FROM `my-project.analytics_dataset.events`
WHERE event_date = CURRENT_DATE() - 1
GROUP BY event_name, user_country

在 BigQuery 界面中将其配置为定时查询

  • 每日自动运行
  • 将结果保存到新表
  • Looker Studio 连接到预计算的表

优点:

  • 减少 Looker Studio 加载时间 (50-80%)
  • 降低 BigQuery 成本(扫描数据量减少)
  • 提升仪表板刷新速度

步骤 4:仪表板布局设计

F 型布局

遵循用户自然阅读流的 F 型布局:

┌─────────────────────────────────────┐
│ 页眉:Logo | 筛选器/日期选择器      │  ← 用户首先看到这里
├─────────────────────────────────────┤
│ KPI 1  │ KPI 2  │ KPI 3  │ KPI 4   │  ← 核心指标 (3-4个)
├─────────────────────────────────────┤
│                                     │
│ 主图表(时间序列/对比图表)         │  ← 深度洞察
│                                     │
├─────────────────────────────────────┤
│ 详细数据表                          │  ← 详细分析
│(支持下钻功能)                     │
├─────────────────────────────────────┤
│ 附加洞察 / 地图 / 热力图             │
└─────────────────────────────────────┘

仪表板组件

元素 目的 示例
页眉 显示仪表板标题、Logo、放置筛选器 “2026 Q1 销售分析”
KPI 卡片 快速展示核心指标 总收入、月环比增长率、活跃用户数
趋势图 展示随时间的变化 折线图显示每日/每周收入趋势
对比图 跨类别比较 条形图比较各区域/产品的销售额
分布图 可视化数据分布 热力图、散点图、气泡图
明细表 提供精确数值 使用条件格式高亮阈值
地图 展示地理数据 按国家/地区的收入分布

实际示例:电商仪表板

┌──────────────────────────────────────────────────┐
│ 📊 2026年1月销售分析 | 🔽 国家 | 📅 日期         │
├──────────────────────────────────────────────────┤
│ 总收入:$125,000  │ 订单数:3,200   │ 转化率:3.5% │
├──────────────────────────────────────────────────┤
│         每日收入趋势(折线图)                    │
│    ↗ 上升趋势:较上月 +15%                        │
├──────────────────────────────────────────────────┤
│ 按品类销售额  │  前10名产品                        │
│ (条形图)      │  (表格,可排序)                   │
├──────────────────────────────────────────────────┤
│             区域收入分布(地图)                   │
└──────────────────────────────────────────────────┘

步骤 5:交互式筛选器和控件

筛选器类型

1. 日期范围筛选器(必需)

  • 通过日历选择特定时间段
  • 预定义选项如”过去7天”、”本月”
  • 连接到数据集,自动应用于所有图表

2. 下拉筛选器

示例:国家选择筛选器
- 所有国家
- 韩国
- 日本
- 美国
仅显示所选国家的数据

3. 高级筛选器(基于 SQL)

-- 仅显示收入 ≥ $10,000 的客户
WHERE customer_revenue >= 10000

筛选器实现示例

-- 1. 日期筛选器
event_date >= DATE_SUB(CURRENT_DATE(), INTERVAL @date_range_days DAY)

-- 2. 下拉筛选器(用户输入)
WHERE country = @selected_country

-- 3. 复合筛选器
WHERE event_date >= @start_date
  AND event_date <= @end_date
  AND country IN (@country_list)
  AND revenue >= @min_revenue

步骤 6:查询性能优化

1. 使用分区键

-- ❌ 低效查询
SELECT * FROM events
WHERE DATE(event_timestamp) >= '2026-01-01'

-- ✅ 优化查询(使用分区)
SELECT * FROM events
WHERE event_date >= '2026-01-01'  -- 直接使用分区键

2. 数据提取

每晚将数据提取到 Looker Studio 专用表:

-- 每天午夜运行的定时查询
CREATE OR REPLACE TABLE `my-project.looker_studio_data.dashboard_snapshot` AS
SELECT
  event_date,
  event_name,
  country,
  device_category,
  COUNT(DISTINCT user_id) as users,
  SUM(event_value) as revenue,
  COUNT(*) as events
FROM `my-project.analytics_dataset.events`
WHERE event_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY)
GROUP BY event_date, event_name, country, device_category;

3. 缓存策略

  • Looker Studio 默认缓存:自动缓存 3 小时
  • BigQuery 缓存:相同的查询会复用之前的结果(6 小时)
  • 利用定时查询:夜间预计算

4. 仪表板复杂度管理

  • 每个仪表板最多使用 20-25 个图表
  • 如果图表较多,可以分布在多个标签页(页面)上
  • 不要将不相关的指标放在一起

步骤 7:社区连接器开发(高级)

为满足更复杂的需求,可以开发社区连接器:

// 社区连接器示例 (Apps Script)
function getConfig() {
  return {
    configParams: [
      {
        name: 'project_id',
        displayName: 'BigQuery 项目 ID',
        helpText: '您的 GCP 项目 ID',
        placeholder: 'my-project-id'
      },
      {
        name: 'dataset_id',
        displayName: '数据集 ID'
      }
    ]
  };
}

function getData(request) {
  const projectId = request.configParams.project_id;
  const datasetId = request.configParams.dataset_id;

  // 从 BigQuery 加载数据
  const bq = BigQuery.newDataset(projectId, datasetId);
  // ... 数据处理逻辑

  return { rows: data };
}

社区连接器的优势:

  • 集中计费(使用服务账号)
  • 自定义缓存逻辑
  • 预定义的查询模板
  • 参数化的用户设置

步骤 8:安全与访问控制

BigQuery 级别的安全

-- 仅授予特定用户表访问权限
GRANT `roles/bigquery.dataViewer`
ON TABLE `my-project.analytics_dataset.events`
TO "user@example.com";

-- 行级安全策略
CREATE OR REPLACE ROW ACCESS POLICY rls_by_country
ON `my-project.analytics_dataset.events`
GRANT ('editor@company.com') TO ('KR'),
      ('viewer@company.com') TO ('US', 'JP');

Looker Studio 级别的安全

  • 共享仪表板时设置查看者权限(查看者/编辑者)
  • 仅与特定用户/群组共享
  • 每个数据源单独管理权限

输出格式

仪表板设置检查清单

## 仪表板设置检查清单

### 数据源配置
- [ ] BigQuery 项目/数据集已准备好
- [ ] IAM 权限已配置
- [ ] 定时查询已配置(性能优化)
- [ ] 数据源连接测试通过

### 仪表板设计
- [ ] 应用 F 型布局
- [ ] 放置 KPI 卡片 (3-4个)
- [ ] 添加主图表(趋势/对比)
- [ ] 包含详细数据表
- [ ] 添加交互式筛选器

### 性能优化
- [ ] 验证是否使用了分区键
- [ ] 查询成本已优化
- [ ] 应用了缓存策略
- [ ] 图表数量已确认(不超过 20-25 个)

### 共享与安全
- [ ] 访问权限已配置
- [ ] 数据安全已审查
- [ ] 共享链接已创建

约束条件

强制性规则 (必须遵守)

  1. 日期筛选器必需:所有仪表板必须包含日期范围筛选器
  2. 使用分区:在 BigQuery 查询中直接使用分区键
  3. 权限分离:每个数据源必须清晰配置访问权限

禁止事项 (绝不能做)

  1. 图表过多:单个仪表板上不要放置超过 25 个图表
  2. **SELECT ***:只选择必要的列,而不是所有列
  3. 过度使用实时查询:避免直接连接到大表进行实时查询

最佳实践

项目 推荐做法
数据刷新 使用定时查询,在夜间运行
仪表板大小 最多 25 个图表,必要时分到多个页面
筛选器配置 日期筛选器必需,额外筛选器限制在 3-5 个
颜色搭配 仅使用 3-4 种公司品牌颜色
标题/标签 使用清晰描述,确保直观易懂
图表选择 按顺序:KPI → 趋势 → 对比 → 明细
响应速度 目标平均加载时间在 2-3 秒内
成本管理 保持每月 BigQuery 扫描数据量在 5TB 以内

参考链接

元数据

版本信息

  • 当前版本:1.0.0
  • 最后更新:2026-01-14
  • 兼容平台:Claude, ChatGPT, Gemini

相关技能

标签

#Looker-Studio #BigQuery #仪表板 #数据分析 #数据可视化 #GCP

使用示例

示例 1:创建基础仪表板

-- 1. 创建每日汇总表
CREATE OR REPLACE TABLE `my-project.looker_data.daily_metrics` AS
SELECT
  event_date,
  COUNT(DISTINCT user_id) as dau,
  SUM(revenue) as total_revenue,
  COUNT(*) as total_events
FROM `my-project.analytics.events`
WHERE event_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
GROUP BY event_date;

-- 2. 在 Looker Studio 中连接到这个表
-- 3. 添加 KPI 卡片:DAU、总收入
-- 4. 用折线图可视化每日趋势

示例 2:高级分析仪表板

-- 为同期群分析准备数据
CREATE OR REPLACE TABLE `my-project.looker_data.cohort_analysis` AS
WITH user_cohort AS (
  SELECT
    user_id,
    DATE_TRUNC(MIN(event_date), WEEK) as cohort_week
  FROM `my-project.analytics.events`
  GROUP BY user_id
)
SELECT
  uc.cohort_week,
  DATE_DIFF(e.event_date, uc.cohort_week, WEEK) as week_number,
  COUNT(DISTINCT e.user_id) as active_users
FROM `my-project.analytics.events` e
JOIN user_cohort uc ON e.user_id = uc.user_id
GROUP BY cohort_week, week_number
ORDER BY cohort_week, week_number;