function runReport() {
const propertyId = '359325548'; // Your GA4 property ID
try {
// Metrics
const sessionsMetric = AnalyticsData.newMetric();
sessionsMetric.name = 'sessions';
const transactionsMetric = AnalyticsData.newMetric();
transactionsMetric.name = 'transactions';
const revenueMetric = AnalyticsData.newMetric();
revenueMetric.name = 'purchaseRevenue';
const engagementRateMetric = AnalyticsData.newMetric();
engagementRateMetric.name = 'engagementRate';
const bounceRateMetric = AnalyticsData.newMetric();
bounceRateMetric.name = 'bounceRate';
const totalUsersMetric = AnalyticsData.newMetric();
totalUsersMetric.name = 'totalUsers';
const engagedSessionsMetric = AnalyticsData.newMetric();
engagedSessionsMetric.name = 'engagedSessions';
const averagePurchaseRevenueMetric = AnalyticsData.newMetric();
averagePurchaseRevenueMetric.name = 'averagePurchaseRevenue';
// Dimension
const deviceCategoryDimension = AnalyticsData.newDimension();
deviceCategoryDimension.name = 'deviceCategory';
// Date range
const dateRange = AnalyticsData.newDateRange();
dateRange.startDate = '2023-03-31';
dateRange.endDate = 'today';
// Country dimension filter
const countryDimensionFilter = AnalyticsData.newFilter();
Logger.log(countryDimensionFilter);
countryDimensionFilter.fieldName = 'country';
countryDimensionFilter.stringFilter = AnalyticsData.newStringFilter();
countryDimensionFilter.stringFilter.value = 'Australia';
Logger.log(countryDimensionFilter);
const request = AnalyticsData.newRunReportRequest();
request.dimensions = [deviceCategoryDimension];
request.metrics = [sessionsMetric, transactionsMetric, revenueMetric, engagementRateMetric, bounceRateMetric, totalUsersMetric, engagedSessionsMetric, averagePurchaseRevenueMetric];
request.dateRanges = [dateRange];
request.dimensionFilter = countryDimensionFilter; // Adjusted to use dimensionFilter
const report = AnalyticsData.Properties.runReport(request, 'properties/' + propertyId);
if (!report.rows) {
console.log('No rows returned.');
return;
}
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
let sheet = spreadsheet.getSheetByName("device");
// If the sheet doesn't exist, create a new one
if (!sheet) {
sheet = spreadsheet.insertSheet("device");
} else {
// Clear existing data if the "device" sheet already exists
sheet.clear();
}
// Append the headers
const headers = report.dimensionHeaders.concat(report.metricHeaders).map(header => header.name);
sheet.appendRow(headers);
// Append the results
const rows = report.rows.map(row => {
const dimensionValues = row.dimensionValues.map(value => value.value);
const metricValues = row.metricValues.map(value => value.value);
return dimensionValues.concat(metricValues);
});
sheet.getRange(2, 1, rows.length, headers.length).setValues(rows);
console.log('Data saved to "device" tab.');
} catch (e) {
console.log('Error:', e);
}
}
我正在运行此代码,但它给出了下面的错误.请帮我修一下好吗?
错误:{[GoogleJsonResponseException:对analyticsdata.Properties.runReport的API调用失败,错误为:收到无效的JSON负载.名为"fieldName"的未知名称:找不到字段. 收到无效的JSON负载."DIMENSION_FILTER"处的未知名称"StringFilter":找不到字段.] 详细信息: {消息:‘接收到无效的JSON有效负载.’DIMENSION_FILTER‘处的未知名称"fieldName":找不到字段.收到无效的JSON有效负载.DIMENSION_FILTER‘处的未知名称"StringFilter":找不到字段.’, 代码:400}, 名称:‘GoogleJsonResponseException’}