You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Google Sheet脚本汇总多个GA4属性的数据?

问题描述

我正在使用Google Analytics Data API的脚本,将GA4数据拉取到Google Sheet中,现有代码如下:

function runReport() {
 
  const propertyId = '111222333';

  try {
    const metric = AnalyticsData.newMetric();
    metric.name = 'Event count';
    metric.name = 'Total users';
    metric.name = 'Sessions';
   
    const dimension = AnalyticsData.newDimension();
    dimension.name = 'Event name';
    dimension.name = 'Link URL';
    dimension.name = 'Date';
    dimension.name = 'Stream name';

    const dateRange = AnalyticsData.newDateRange();
    dateRange.startDate = '2022-05-01';
    dateRange.endDate = 'today';

    const request = AnalyticsData.newRunReportRequest();
    request.dimensions = [dimension];
    request.metrics = [metric];
    request.dateRanges = dateRange;

    const report = AnalyticsData.Properties.runReport(request,
        'properties/' + propertyId);
    if (!report.rows) {
      Logger.log('No rows returned.');
      return;
    }
}

补充说明:我希望脚本输出包含「属性ID、事件名称、链接URL、日期、数据流名称、事件数、总用户数、会话数」的表格格式,并且需要拉取以下多个GA4属性ID的数据并合并成一个数据集:

  • 111222333
  • 222333444
  • 444555666
  • 777888999

解决方案

可以实现,下面是调整后的完整脚本,解决了原代码的问题并支持多属性拉取合并:

function runMultiPropertyReport() {
  // 要拉取的多个GA4属性ID列表
  const propertyIds = ['111222333', '222333444', '444555666', '777888999'];
  // 日期范围
  const dateRange = AnalyticsData.newDateRange();
  dateRange.startDate = '2022-05-01';
  dateRange.endDate = 'today';

  // 定义需要的维度(修复原代码重复赋值问题,使用GA4 API要求的驼峰式名称)
  const dimensions = [
    AnalyticsData.newDimension().setName('eventName'),
    AnalyticsData.newDimension().setName('pageReferrer'),
    AnalyticsData.newDimension().setName('date'),
    AnalyticsData.newDimension().setName('streamName')
  ];

  // 定义需要的指标(修复原代码重复赋值问题,使用GA4 API要求的驼峰式名称)
  const metrics = [
    AnalyticsData.newMetric().setName('eventCount'),
    AnalyticsData.newMetric().setName('totalUsers'),
    AnalyticsData.newMetric().setName('sessions')
  ];

  // 初始化合并后的数据集,先添加表头
  const mergedData = [
    ['属性ID', '事件名称', '链接URL', '日期', '数据流名称', '事件数', '总用户数', '会话数']
  ];

  try {
    // 循环遍历每个属性ID拉取数据
    propertyIds.forEach(propertyId => {
      const request = AnalyticsData.newRunReportRequest();
      request.dimensions = dimensions;
      request.metrics = metrics;
      request.dateRanges = [dateRange]; // 修正为数组格式

      // 发送请求获取报告
      const report = AnalyticsData.Properties.runReport(request, `properties/${propertyId}`);
      
      if (!report.rows) {
        Logger.log(`属性ID ${propertyId} 无数据返回`);
        return;
      }

      // 解析报告行数据,添加到合并数据集
      report.rows.forEach(row => {
        const dimValues = row.dimensionValues.map(val => val.value);
        const metricValues = row.metricValues.map(val => parseInt(val.value) || val.value);
        mergedData.push([propertyId, ...dimValues, ...metricValues]);
      });
    });

    // 将合并后的数据写入Google Sheet
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    sheet.clearContents(); // 清空现有数据(可选)
    sheet.getRange(1, 1, mergedData.length, mergedData[0].length).setValues(mergedData);
    sheet.autoResizeColumns(1, mergedData[0].length); // 自动调整列宽
    Logger.log('数据拉取并合并完成,已写入表格');

  } catch (error) {
    Logger.log(`拉取数据时出错: ${error.message}`);
  }
}

关键调整说明

  1. 修复原代码核心错误:原代码对metric和dimension重复赋值,导致最终仅保留最后一个维度/指标。改为用数组存储所有需要的维度和指标,且使用GA4 API要求的驼峰式名称(如eventName而非"Event name")。
  2. 支持多属性拉取:定义propertyIds数组,通过循环遍历每个属性ID分别拉取数据。
  3. 合并数据集:初始化带表头的数组,将每个属性的数据添加到同一数组中,新增「属性ID」列区分数据来源。
  4. Sheet写入与格式化:将合并数据写入当前活跃Sheet,可选择清空旧数据,并自动调整列宽适配内容。
  5. 异常处理:添加try-catch捕获错误,对无数据的属性打印日志提示。

使用注意事项

  • 需在Google Apps Script编辑器中,通过「资源」→「高级Google服务」开启Analytics Data API。
  • 确保脚本拥有访问目标GA4属性的权限。
  • 调整日期范围可修改dateRange的startDate和endDate参数。

内容的提问来源于stack exchange,提问作者shredward

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:39:17