如何用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}`); } }
关键调整说明
- 修复原代码核心错误:原代码对
metric和dimension重复赋值,导致最终仅保留最后一个维度/指标。改为用数组存储所有需要的维度和指标,且使用GA4 API要求的驼峰式名称(如eventName而非"Event name")。 - 支持多属性拉取:定义
propertyIds数组,通过循环遍历每个属性ID分别拉取数据。 - 合并数据集:初始化带表头的数组,将每个属性的数据添加到同一数组中,新增「属性ID」列区分数据来源。
- Sheet写入与格式化:将合并数据写入当前活跃Sheet,可选择清空旧数据,并自动调整列宽适配内容。
- 异常处理:添加
try-catch捕获错误,对无数据的属性打印日志提示。
使用注意事项
- 需在Google Apps Script编辑器中,通过「资源」→「高级Google服务」开启Analytics Data API。
- 确保脚本拥有访问目标GA4属性的权限。
- 调整日期范围可修改
dateRange的startDate和endDate参数。
内容的提问来源于stack exchange,提问作者shredward
相关产品推荐
相关产品推荐

