为什么我的过滤器在我下面编写的 google Analytics 4 应用程序脚本代码中不起作用?我该如何解决它?

问题描述 投票:0回答:1

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负载。 “dimension_filter”处的未知名称“fieldName”:找不到字段。 收到无效的 JSON 负载。 “dimension_filter”处的未知名称“stringFilter”:找不到字段。] 细节: { message: '收到无效的 JSON 负载。 “dimension_filter”处的未知名称“fieldName”:找不到字段。收到的 JSON 有效负载无效。 “dimension_filter”处的未知名称“stringFilter”:找不到字段。”, 代码:400}, 名称:'GoogleJsonResponseException'}

node.js google-analytics google-analytics-api google-analytics-4 google-api-nodejs-client
1个回答
0
投票

尝试适应这样的事情:

const dimensionfilter = AnalyticsData.newFilterExpression()
dimensionfilter.filter = AnalyticsData.newFilter()
dimensionfilter.filter.fieldName = 'country'
dimensionfilter.filter.stringFilter = AnalyticsData.newStringFilter()
dimensionfilter.filter.stringFilter.value = 'Italy'
© www.soinside.com 2019 - 2024. All rights reserved.