创建报告

本指南介绍了如何使用 Google Analytics Data API v1 为 Google Analytics 数据创建基本报告。Data API v1 中的报告类似于您可以在 Google Analytics 界面报告部分生成的报告。

本指南介绍了核心报告,即 Data API 的常规报告功能。Data API v1 还提供专门的实时报告漏斗报告

runReport 是推荐的查询方法,本指南中的所有示例均采用此方法。如需简要了解其他核心报告方法,请参阅高级功能。您可以使用查询浏览器测试查询。

报告概述

报告Google Analytics 媒体资源的事件数据表格。每个报告表格都包含您在查询中请求的维度和指标,并且数据位于各行中。

使用过滤条件可仅返回与特定条件匹配的行,使用分页可浏览结果。

下面的示例报告表格显示了一个维度 (Country) 和一个指标 (activeUsers):

国家/地区 活跃用户数
日本 2541
法国 12

指定数据源

您必须为每个 runReport 请求指定 Google Analytics 媒体资源 ID。您指定的 Google Analytics 媒体资源将用作该查询的数据集。示例如下:

POST https://analyticsdata.googleapis.com/v1beta/properties/GA_PROPERTY_ID:runReport 

此请求的响应仅包含您指定为 GA_PROPERTY_ID 的 Google Analytics 媒体资源中的数据。

如果您使用 Data API 客户端库,请在 property 参数中以 properties/GA_PROPERTY_ID 的形式指定数据源。如需查看有关如何使用客户端库的示例,请参阅快速入门指南

如果您想在报告中包含 Measurement Protocol 事件,请参阅向 Google Analytics 发送 Measurement Protocol 事件

生成报告

如需生成报告,请构造 RunReportRequest 对象。我们建议您先从以下参数着手:

  • dateRanges 字段中的有效条目。
  • dimensions 字段中至少有一个有效条目。
  • metrics 字段中至少有一个有效条目。

以下是包含建议字段的示例请求:

HTTP

POST https://analyticsdata.googleapis.com/v1beta/properties/GA_PROPERTY_ID:runReport   {     "dateRanges": [{ "startDate": "2023-09-01"", "endDate": "2023-09-15" }],     "dimensions": [{ "name": "country" }],     "metrics": [{ "name": "activeUsers" }]   } 

Java

import com.google.analytics.data.v1beta.BetaAnalyticsDataClient; import com.google.analytics.data.v1beta.DateRange; import com.google.analytics.data.v1beta.Dimension; import com.google.analytics.data.v1beta.DimensionHeader; import com.google.analytics.data.v1beta.Metric; import com.google.analytics.data.v1beta.MetricHeader; import com.google.analytics.data.v1beta.Row; import com.google.analytics.data.v1beta.RunReportRequest; import com.google.analytics.data.v1beta.RunReportResponse;  /**  * Google Analytics Data API sample application demonstrating the creation of a basic report.  *  * <p>See  * https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport  * for more information.  *  * <p>Before you start the application, please review the comments starting with "TODO(developer)"  * and update the code to use correct values.  *  * <p>To run this sample using Maven:  *  * <pre>{@code  * cd google-analytics-data  * mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportSample"  * }</pre>  */ public class RunReportSample {    public static void main(String... args) throws Exception {     /**      * TODO(developer): Replace this variable with your Google Analytics 4 property ID before      * running the sample.      */     String propertyId = "YOUR-GA4-PROPERTY-ID";     sampleRunReport(propertyId);   }    // Runs a report of active users grouped by country.   static void sampleRunReport(String propertyId) throws Exception {      // Using a default constructor instructs the client to use the credentials     // specified in GOOGLE_APPLICATION_CREDENTIALS environment variable.     try (BetaAnalyticsDataClient analyticsData = BetaAnalyticsDataClient.create()) {       RunReportRequest request =           RunReportRequest.newBuilder()               .setProperty("properties/" + propertyId)               .addDimensions(Dimension.newBuilder().setName("country"))               .addMetrics(Metric.newBuilder().setName("activeUsers"))               .addDateRanges(                   DateRange.newBuilder().setStartDate("2020-09-01").setEndDate("2020-09-15"))               .build();        // Make the request.       RunReportResponse response = analyticsData.runReport(request);       printRunResponseResponse(response);     }   }    // Prints results of a runReport call.   static void printRunResponseResponse(RunReportResponse response) {     System.out.printf("%s rows received%n", response.getRowsList().size());      for (DimensionHeader header : response.getDimensionHeadersList()) {       System.out.printf("Dimension header name: %s%n", header.getName());     }      for (MetricHeader header : response.getMetricHeadersList()) {       System.out.printf("Metric header name: %s (%s)%n", header.getName(), header.getType());     }      System.out.println("Report result:");     for (Row row : response.getRowsList()) {       System.out.printf(           "%s, %s%n", row.getDimensionValues(0).getValue(), row.getMetricValues(0).getValue());     }   } }

PHP

use Google\Analytics\Data\V1beta\Client\BetaAnalyticsDataClient; use Google\Analytics\Data\V1beta\DateRange; use Google\Analytics\Data\V1beta\Dimension; use Google\Analytics\Data\V1beta\Metric; use Google\Analytics\Data\V1beta\MetricType; use Google\Analytics\Data\V1beta\RunReportRequest; use Google\Analytics\Data\V1beta\RunReportResponse;  /**  * @param string $propertyId Your GA-4 Property ID  */ function run_report(string $propertyId) {     // Create an instance of the Google Analytics Data API client library.     $client = new BetaAnalyticsDataClient();      // Make an API call.     $request = (new RunReportRequest())         ->setProperty('properties/' . $propertyId)         ->setDateRanges([             new DateRange([                 'start_date' => '2020-09-01',                 'end_date' => '2020-09-15',             ]),         ])         ->setDimensions([             new Dimension([                 'name' => 'country',             ]),         ])         ->setMetrics([             new Metric([                 'name' => 'activeUsers',             ]),         ]);     $response = $client->runReport($request);      printRunReportResponse($response); }  /**  * Print results of a runReport call.  * @param RunReportResponse $response  */ function printRunReportResponse(RunReportResponse $response) {     printf('%s rows received%s', $response->getRowCount(), PHP_EOL);     foreach ($response->getDimensionHeaders() as $dimensionHeader) {         printf('Dimension header name: %s%s', $dimensionHeader->getName(), PHP_EOL);     }     foreach ($response->getMetricHeaders() as $metricHeader) {         printf(             'Metric header name: %s (%s)%s',             $metricHeader->getName(),             MetricType::name($metricHeader->getType()),             PHP_EOL         );     }      print 'Report result: ' . PHP_EOL;      foreach ($response->getRows() as $row) {         print $row->getDimensionValues()[0]->getValue()         . ' ' . $row->getMetricValues()[0]->getValue() . PHP_EOL;     } }

Python

from google.analytics.data_v1beta import BetaAnalyticsDataClient from google.analytics.data_v1beta.types import (     DateRange,     Dimension,     Metric,     MetricType,     RunReportRequest, )   def run_sample():     """Runs the sample."""     # TODO(developer): Replace this variable with your Google Analytics 4     #  property ID before running the sample.     property_id = "YOUR-GA4-PROPERTY-ID"     run_report(property_id)   def run_report(property_id="YOUR-GA4-PROPERTY-ID"):     """Runs a report of active users grouped by country."""     client = BetaAnalyticsDataClient()      request = RunReportRequest(         property=f"properties/{property_id}",         dimensions=[Dimension(name="country")],         metrics=[Metric(name="activeUsers")],         date_ranges=[DateRange(start_date="2020-09-01", end_date="2020-09-15")],     )     response = client.run_report(request)     print_run_report_response(response)   def print_run_report_response(response):     """Prints results of a runReport call."""     print(f"{response.row_count} rows received")     for dimensionHeader in response.dimension_headers:         print(f"Dimension header name: {dimensionHeader.name}")     for metricHeader in response.metric_headers:         metric_type = MetricType(metricHeader.type_).name         print(f"Metric header name: {metricHeader.name} ({metric_type})")      print("Report result:")     for rowIdx, row in enumerate(response.rows):         print(f"\nRow {rowIdx}")         for i, dimension_value in enumerate(row.dimension_values):             dimension_name = response.dimension_headers[i].name             print(f"{dimension_name}: {dimension_value.value}")          for i, metric_value in enumerate(row.metric_values):             metric_name = response.metric_headers[i].name             print(f"{metric_name}: {metric_value.value}")  

Node.js

  // TODO(developer): Uncomment this variable and replace with your   // Google Analytics 4 property ID before running the sample.   // propertyId = 'YOUR-GA4-PROPERTY-ID';    // Imports the Google Analytics Data API client library.   const {BetaAnalyticsDataClient} = require('@google-analytics/data');    // Initialize client that will be used to send requests. This client only   // needs to be created once, and can be reused for multiple requests.   const analyticsDataClient = new BetaAnalyticsDataClient();    // Runs a report of active users grouped by country.   async function runReport() {     const [response] = await analyticsDataClient.runReport({       property: `properties/${propertyId}`,       dimensions: [         {           name: 'country',         },       ],       metrics: [         {           name: 'activeUsers',         },       ],       dateRanges: [         {           startDate: '2020-09-01',           endDate: '2020-09-15',         },       ],     });     printRunReportResponse(response);   }    // Prints results of a runReport call.   function printRunReportResponse(response) {     console.log(`${response.rowCount} rows received`);     response.dimensionHeaders.forEach(dimensionHeader => {       console.log(`Dimension header name: ${dimensionHeader.name}`);     });     response.metricHeaders.forEach(metricHeader => {       console.log(         `Metric header name: ${metricHeader.name} (${metricHeader.type})`       );     });      console.log('Report result:');     response.rows.forEach(row => {       console.log(         `${row.dimensionValues[0].value}, ${row.metricValues[0].value}`       );     });   }    runReport();

查询指标

Metrics 是事件数据的量化衡量标准。您必须在 runReport 请求中至少指定一个指标。

如需查看您可以查询的指标的完整列表,请参阅 API 指标

以下示例请求显示了三个指标,按维度 date 分组

HTTP

POST https://analyticsdata.googleapis.com/v1beta/properties/GA_PROPERTY_ID:runReport   {     "dateRanges": [{ "startDate": "7daysAgo", "endDate": "yesterday" }],     "dimensions": [{ "name": "date" }],     "metrics": [       {         "name": "activeUsers"       },       {         "name": "newUsers"       },       {         "name": "totalRevenue"       }     ],   } 

Java

import com.google.analytics.data.v1beta.BetaAnalyticsDataClient; import com.google.analytics.data.v1beta.DateRange; import com.google.analytics.data.v1beta.Dimension; import com.google.analytics.data.v1beta.Metric; import com.google.analytics.data.v1beta.RunReportRequest; import com.google.analytics.data.v1beta.RunReportResponse;  /**  * Google Analytics Data API sample application demonstrating the creation of a basic report.  *  * <p>See  * https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport  * for more information.  *  * <p>Before you start the application, please review the comments starting with "TODO(developer)"  * and update the code to use correct values.  *  * <p>To run this sample using Maven:  *  * <pre>{@code  * cd google-analytics-data  * mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportWithMultipleMetricsSample"  * }</pre>  */ public class RunReportWithMultipleMetricsSample {    public static void main(String... args) throws Exception {     // TODO(developer): Replace with your Google Analytics 4 property ID before running the sample.     String propertyId = "YOUR-GA4-PROPERTY-ID";     sampleRunReportWithMultipleMetrics(propertyId);   }    // Runs a report of active users, new users and total revenue grouped by date dimension.   static void sampleRunReportWithMultipleMetrics(String propertyId) throws Exception {     // Initialize client that will be used to send requests. This client only needs to be created     // once, and can be reused for multiple requests. After completing all of your requests, call     // the "close" method on the client to safely clean up any remaining background resources.     try (BetaAnalyticsDataClient analyticsData = BetaAnalyticsDataClient.create()) {       RunReportRequest request =           RunReportRequest.newBuilder()               .setProperty("properties/" + propertyId)               .addDimensions(Dimension.newBuilder().setName("date"))               .addMetrics(Metric.newBuilder().setName("activeUsers"))               .addMetrics(Metric.newBuilder().setName("newUsers"))               .addMetrics(Metric.newBuilder().setName("totalRevenue"))               .addDateRanges(DateRange.newBuilder().setStartDate("7daysAgo").setEndDate("today"))               .build();        // Make the request.       RunReportResponse response = analyticsData.runReport(request);       // Prints the response using a method in RunReportSample.java       RunReportSample.printRunResponseResponse(response);     }   } }

PHP

use Google\Analytics\Data\V1beta\Client\BetaAnalyticsDataClient; use Google\Analytics\Data\V1beta\DateRange; use Google\Analytics\Data\V1beta\Dimension; use Google\Analytics\Data\V1beta\Metric; use Google\Analytics\Data\V1beta\MetricType; use Google\Analytics\Data\V1beta\RunReportRequest; use Google\Analytics\Data\V1beta\RunReportResponse;  /**  * @param string $propertyID Your GA-4 Property ID  * Runs a report of active users grouped by three metrics.  */ function run_report_with_multiple_metrics(string $propertyId) {     // Create an instance of the Google Analytics Data API client library.     $client = new BetaAnalyticsDataClient();      // Make an API call.     $request = (new RunReportRequest())         ->setProperty('properties/' . $propertyId)         ->setDimensions([new Dimension(['name' => 'date'])])         ->setMetrics([             new Metric(['name' => 'activeUsers']),             new Metric(['name' => 'newUsers']),             new Metric(['name' => 'totalRevenue'])         ])         ->setDateRanges([             new DateRange([                 'start_date' => '7daysAgo',                 'end_date' => 'today',             ])         ]);     $response = $client->runReport($request);      printRunReportResponseWithMultipleMetrics($response); }  /**  * Print results of a runReport call.  * @param RunReportResponse $response  */ function printRunReportResponseWithMultipleMetrics(RunReportResponse $response) {     printf('%s rows received%s', $response->getRowCount(), PHP_EOL);     foreach ($response->getDimensionHeaders() as $dimensionHeader) {         printf('Dimension header name: %s%s', $dimensionHeader->getName(), PHP_EOL);     }     foreach ($response->getMetricHeaders() as $metricHeader) {         printf(             'Metric header name: %s (%s)' . PHP_EOL,             $metricHeader->getName(),             MetricType::name($metricHeader->getType())         );     }      print 'Report result: ' . PHP_EOL;      foreach ($response->getRows() as $row) {         printf(             '%s %s' . PHP_EOL,             $row->getDimensionValues()[0]->getValue(),             $row->getMetricValues()[0]->getValue()         );     } }

Python

from google.analytics.data_v1beta import BetaAnalyticsDataClient from google.analytics.data_v1beta.types import (     DateRange,     Dimension,     Metric,     RunReportRequest, )  from run_report import print_run_report_response   def run_sample():     """Runs the sample."""     # TODO(developer): Replace this variable with your Google Analytics 4     #  property ID before running the sample.     property_id = "YOUR-GA4-PROPERTY-ID"     run_report_with_multiple_metrics(property_id)   def run_report_with_multiple_metrics(property_id="YOUR-GA4-PROPERTY-ID"):     """Runs a report of active users, new users and total revenue grouped by     date dimension."""     client = BetaAnalyticsDataClient()      # Runs a report of active users grouped by three dimensions.     request = RunReportRequest(         property=f"properties/{property_id}",         dimensions=[Dimension(name="date")],         metrics=[             Metric(name="activeUsers"),             Metric(name="newUsers"),             Metric(name="totalRevenue"),         ],         date_ranges=[DateRange(start_date="7daysAgo", end_date="today")],     )     response = client.run_report(request)     print_run_report_response(response)  

Node.js

  // TODO(developer): Uncomment this variable and replace with your   // Google Analytics 4 property ID before running the sample.   // propertyId = 'YOUR-GA4-PROPERTY-ID';    // Imports the Google Analytics Data API client library.   const {BetaAnalyticsDataClient} = require('@google-analytics/data');    // Initialize client that will be used to send requests. This client only   // needs to be created once, and can be reused for multiple requests.   const analyticsDataClient = new BetaAnalyticsDataClient();    // Runs a report of active users grouped by three metrics.   async function runReportWithMultipleMetrics() {     const [response] = await analyticsDataClient.runReport({       property: `properties/${propertyId}`,       dimensions: [         {           name: 'date',         },       ],       metrics: [         {           name: 'activeUsers',         },         {           name: 'newUsers',         },         {           name: 'totalRevenue',         },       ],       dateRanges: [         {           startDate: '7daysAgo',           endDate: 'today',         },       ],     });     printRunReportResponse(response);   }    runReportWithMultipleMetrics();    // Prints results of a runReport call.   function printRunReportResponse(response) {     console.log(`${response.rowCount} rows received`);     response.dimensionHeaders.forEach(dimensionHeader => {       console.log(`Dimension header name: ${dimensionHeader.name}`);     });     response.metricHeaders.forEach(metricHeader => {       console.log(         `Metric header name: ${metricHeader.name} (${metricHeader.type})`       );     });      console.log('Report result:');     response.rows.forEach(row => {       console.log(         `${row.dimensionValues[0].value}, ${row.metricValues[0].value}`       );     });   }

以下示例响应显示了 20231025(2023 年 10 月 25 日)的活跃用户数为 1135 人、新用户数为 512 人,以及总收入为 73.0841(以 Google Analytics 媒体资源所用货币为单位)。

"rows": [ ... {   "dimensionValues": [     {       "value": "20231025"     }   ],   "metricValues": [     {       "value": "1135"     },     {       "value": "512"     },     {       "value": "73.0841"     }   ] }, ... ], 

读出回答

报告响应包含标题和多行数据。标题由 DimensionHeadersMetricHeaders 组成,其中列出了报告中的列。每行都由 DimensionValuesMetricValues 组成。请求、标头和行中的列顺序保持一致。

以下是上一个示例请求的示例响应:

{   "dimensionHeaders": [     {       "name": "country"     }   ],   "metricHeaders": [     {       "name": "activeUsers",       "type": "TYPE_INTEGER"     }   ],   "rows": [     {       "dimensionValues": [         {           "value": "Japan"         }       ],       "metricValues": [         {           "value": "2541"         }       ]     },     {       "dimensionValues": [         {           "value": "France"         }       ],       "metricValues": [         {           "value": "12"         }       ]     }   ],   "metadata": {},   "rowCount": 2 } 

对数据进行分组和过滤

维度是定性属性,可用于对数据进行分组和过滤。例如,“city”维度表示每个事件的发源城市,例如 ParisNew YorkrunReport 请求中的维度为可选项,每个请求最多可使用 9 个维度。

如需查看可用于对数据进行分组和过滤的维度的完整列表,请参阅 API 维度

群组

以下示例请求会将活跃用户按三个维度进行分组:

HTTP

POST https://analyticsdata.googleapis.com/v1beta/properties/GA_PROPERTY_ID:runReport   {     "dateRanges": [{ "startDate": "7daysAgo", "endDate": "yesterday" }],     "dimensions": [       {         "name": "country"       },       {         "name": "region"       },       {         "name": "city"       }     ],     "metrics": [{ "name": "activeUsers" }]   }   ``` 

Java

import com.google.analytics.data.v1beta.BetaAnalyticsDataClient; import com.google.analytics.data.v1beta.DateRange; import com.google.analytics.data.v1beta.Dimension; import com.google.analytics.data.v1beta.Metric; import com.google.analytics.data.v1beta.RunReportRequest; import com.google.analytics.data.v1beta.RunReportResponse;  /**  * Google Analytics Data API sample application demonstrating the creation of a basic report.  *  * <p>See  * https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport  * for more information.  *  * <p>Before you start the application, please review the comments starting with "TODO(developer)"  * and update the code to use correct values.  *  * <p>To run this sample using Maven:  *  * <pre>{@code  * cd google-analytics-data  * mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportWithMultipleDimensionsSample"  * }</pre>  */ public class RunReportWithMultipleDimensionsSample {    public static void main(String... args) throws Exception {     // TODO(developer): Replace with your Google Analytics 4 property ID before running the sample.     String propertyId = "YOUR-GA4-PROPERTY-ID";     sampleRunReportWithMultipleDimensions(propertyId);   }    // Runs a report of active users grouped by three dimensions.   static void sampleRunReportWithMultipleDimensions(String propertyId) throws Exception {     // Initialize client that will be used to send requests. This client only needs to be created     // once, and can be reused for multiple requests. After completing all of your requests, call     // the "close" method on the client to safely clean up any remaining background resources.     try (BetaAnalyticsDataClient analyticsData = BetaAnalyticsDataClient.create()) {       RunReportRequest request =           RunReportRequest.newBuilder()               .setProperty("properties/" + propertyId)               .addDimensions(Dimension.newBuilder().setName("country"))               .addDimensions(Dimension.newBuilder().setName("region"))               .addDimensions(Dimension.newBuilder().setName("city"))               .addMetrics(Metric.newBuilder().setName("activeUsers"))               .addDateRanges(DateRange.newBuilder().setStartDate("7daysAgo").setEndDate("today"))               .build();        // Make the request.       RunReportResponse response = analyticsData.runReport(request);       // Prints the response using a method in RunReportSample.java       RunReportSample.printRunResponseResponse(response);     }   } }

PHP

use Google\Analytics\Data\V1beta\Client\BetaAnalyticsDataClient; use Google\Analytics\Data\V1beta\DateRange; use Google\Analytics\Data\V1beta\Dimension; use Google\Analytics\Data\V1beta\Metric; use Google\Analytics\Data\V1beta\MetricType; use Google\Analytics\Data\V1beta\RunReportRequest; use Google\Analytics\Data\V1beta\RunReportResponse;  /**  * @param string $propertyID Your GA-4 Property ID  * Runs a report of active users grouped by three dimensions.  */ function run_report_with_multiple_dimensions(string $propertyId) {     // Create an instance of the Google Analytics Data API client library.     $client = new BetaAnalyticsDataClient();      // Make an API call.     $request = (new RunReportRequest())         ->setProperty('properties/' . $propertyId)         ->setDimensions([             new Dimension(['name' => 'country']),             new Dimension(['name' => 'region']),             new Dimension(['name' => 'city']),         ])         ->setMetrics([new Metric(['name' => 'activeUsers'])])         ->setDateRanges([             new DateRange([                 'start_date' => '7daysAgo',                 'end_date' => 'today',             ])         ]);     $response = $client->runReport($request);      printRunReportResponseWithMultipleDimensions($response); }  /**  * Print results of a runReport call.  * @param RunReportResponse $response  */ function printRunReportResponseWithMultipleDimensions(RunReportResponse $response) {     printf('%s rows received%s', $response->getRowCount(), PHP_EOL);     foreach ($response->getDimensionHeaders() as $dimensionHeader) {         printf('Dimension header name: %s%s', $dimensionHeader->getName(), PHP_EOL);     }     foreach ($response->getMetricHeaders() as $metricHeader) {         printf(             'Metric header name: %s (%s)' . PHP_EOL,             $metricHeader->getName(),             MetricType::name($metricHeader->getType())         );     }      print 'Report result: ' . PHP_EOL;      foreach ($response->getRows() as $row) {         printf(             '%s %s' . PHP_EOL,             $row->getDimensionValues()[0]->getValue(),             $row->getMetricValues()[0]->getValue()         );     } }

Python

from google.analytics.data_v1beta import BetaAnalyticsDataClient from google.analytics.data_v1beta.types import (     DateRange,     Dimension,     Metric,     RunReportRequest, )  from run_report import print_run_report_response   def run_sample():     """Runs the sample."""     # TODO(developer): Replace this variable with your Google Analytics 4     #  property ID before running the sample.     property_id = "YOUR-GA4-PROPERTY-ID"     run_report_with_multiple_dimensions(property_id)   def run_report_with_multiple_dimensions(property_id="YOUR-GA4-PROPERTY-ID"):     """Runs a report of active users grouped by three dimensions."""     client = BetaAnalyticsDataClient()      request = RunReportRequest(         property=f"properties/{property_id}",         dimensions=[             Dimension(name="country"),             Dimension(name="region"),             Dimension(name="city"),         ],         metrics=[Metric(name="activeUsers")],         date_ranges=[DateRange(start_date="7daysAgo", end_date="today")],     )     response = client.run_report(request)     print_run_report_response(response)  

Node.js

  // TODO(developer): Uncomment this variable and replace with your   // Google Analytics 4 property ID before running the sample.   // propertyId = 'YOUR-GA4-PROPERTY-ID';    // Imports the Google Analytics Data API client library.   const {BetaAnalyticsDataClient} = require('@google-analytics/data');    // Initialize client that will be used to send requests. This client only   // needs to be created once, and can be reused for multiple requests.   const analyticsDataClient = new BetaAnalyticsDataClient();    // Runs a report of active users grouped by three dimensions.   async function runReportWithMultipleDimensions() {     const [response] = await analyticsDataClient.runReport({       property: `properties/${propertyId}`,       dimensions: [         {           name: 'country',         },         {           name: 'region',         },         {           name: 'city',         },       ],       metrics: [         {           name: 'activeUsers',         },       ],       dateRanges: [         {           startDate: '7daysAgo',           endDate: 'today',         },       ],     });     printRunReportResponse(response);   }    runReportWithMultipleDimensions();    // Prints results of a runReport call.   function printRunReportResponse(response) {     console.log(`${response.rowCount} rows received`);     response.dimensionHeaders.forEach(dimensionHeader => {       console.log(`Dimension header name: ${dimensionHeader.name}`);     });     response.metricHeaders.forEach(metricHeader => {       console.log(         `Metric header name: ${metricHeader.name} (${metricHeader.type})`       );     });      console.log('Report result:');     response.rows.forEach(row => {       console.log(         `${row.dimensionValues[0].value}, ${row.metricValues[0].value}`       );     });   }

以下是上一个请求的示例报告行。此行显示,在指定日期范围内,有 47 位活跃用户的事件来自南非开普敦。

"rows": [ ... {   "dimensionValues": [     {       "value": "South Africa"     },     {       "value": "Western Cape"     },     {       "value": "Cape Town"     }   ],   "metricValues": [     {       "value": "47"     }   ] }, ... ], 

过滤

您生成的报告中仅包含特定维度值的数据。如需过滤维度,请在 dimensionFilter 字段中指定 FilterExpression

以下示例展示了在每个 dateeventNamefirst_open 时,返回 eventCount 的时间序列报告:

HTTP

POST https://analyticsdata.googleapis.com/v1beta/properties/GA_PROPERTY_ID:runReport   {     "dateRanges": [{ "startDate": "7daysAgo", "endDate": "yesterday" }],     "dimensions": [{ "name": "date" }],     "metrics": [{ "name": "eventCount" }],     "dimensionFilter": {       "filter": {         "fieldName": "eventName",         "stringFilter": {           "value": "first_open"         }       }     },   } 

Java

import com.google.analytics.data.v1beta.BetaAnalyticsDataClient; import com.google.analytics.data.v1beta.DateRange; import com.google.analytics.data.v1beta.Dimension; import com.google.analytics.data.v1beta.Filter; import com.google.analytics.data.v1beta.FilterExpression; import com.google.analytics.data.v1beta.Metric; import com.google.analytics.data.v1beta.RunReportRequest; import com.google.analytics.data.v1beta.RunReportResponse;  /**  * Google Analytics Data API sample application demonstrating the usage of dimension and metric  * filters in a report.  *  * <p>See  * https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport#body.request_body.FIELDS.dimension_filter  * for more information.  *  * <p>Before you start the application, please review the comments starting with "TODO(developer)"  * and update the code to use correct values.  *  * <p>To run this sample using Maven:  *  * <pre>{@code  * cd google-analytics-data  * mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportWithDimensionFilterSample"  * }</pre>  */ public class RunReportWithDimensionFilterSample {    public static void main(String... args) throws Exception {     // TODO(developer): Replace with your Google Analytics 4 property ID before running the sample.     String propertyId = "YOUR-GA4-PROPERTY-ID";     sampleRunReportWithDimensionFilter(propertyId);   }    // Runs a report using a dimension filter. The call returns a time series report of `eventCount`   // when `eventName` is `first_open` for each date.   // This sample uses relative date range values.   // See https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange   // for more information.   static void sampleRunReportWithDimensionFilter(String propertyId) throws Exception {     // Initialize client that will be used to send requests. This client only needs to be created     // once, and can be reused for multiple requests. After completing all of your requests, call     // the "close" method on the client to safely clean up any remaining background resources.     try (BetaAnalyticsDataClient analyticsData = BetaAnalyticsDataClient.create()) {       RunReportRequest request =           RunReportRequest.newBuilder()               .setProperty("properties/" + propertyId)               .addDimensions(Dimension.newBuilder().setName("date"))               .addMetrics(Metric.newBuilder().setName("eventCount"))               .addDateRanges(                   DateRange.newBuilder().setStartDate("7daysAgo").setEndDate("yesterday"))               .setDimensionFilter(                   FilterExpression.newBuilder()                       .setFilter(                           Filter.newBuilder()                               .setFieldName("eventName")                               .setStringFilter(                                   Filter.StringFilter.newBuilder().setValue("first_open"))))               .build();        // Make the request.       RunReportResponse response = analyticsData.runReport(request);       // Prints the response using a method in RunReportSample.java       RunReportSample.printRunResponseResponse(response);     }   } }

PHP

use Google\Analytics\Data\V1beta\Client\BetaAnalyticsDataClient; use Google\Analytics\Data\V1beta\DateRange; use Google\Analytics\Data\V1beta\Dimension; use Google\Analytics\Data\V1beta\Filter; use Google\Analytics\Data\V1beta\Filter\StringFilter; use Google\Analytics\Data\V1beta\FilterExpression; use Google\Analytics\Data\V1beta\Metric; use Google\Analytics\Data\V1beta\MetricType; use Google\Analytics\Data\V1beta\RunReportRequest; use Google\Analytics\Data\V1beta\RunReportResponse;  /**  * @param string $propertyId Your GA-4 Property ID  * Runs a report using a dimension filter. The call returns a time series  * report of `eventCount` when `eventName` is `first_open` for each date.  * This sample uses relative date range values. See  * https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange  * for more information.  */ function run_report_with_dimension_filter(string $propertyId) {     // Create an instance of the Google Analytics Data API client library.     $client = new BetaAnalyticsDataClient();      // Make an API call.     $request = (new RunReportRequest())         ->setProperty('properties/' . $propertyId)         ->setDimensions([new Dimension(['name' => 'date'])])         ->setMetrics([new Metric(['name' => 'eventCount'])])         ->setDateRanges([             new DateRange([                 'start_date' => '7daysAgo',                 'end_date' => 'yesterday',             ])         ])         ->setDimensionFilter(new FilterExpression([             'filter' => new Filter([                 'field_name' => 'eventName',                 'string_filter' => new StringFilter([                     'value' => 'first_open'                 ]),             ]),         ]));     $response = $client->runReport($request);      printRunReportResponseWithDimensionFilter($response); }  /**  * Print results of a runReport call.  * @param RunReportResponse $response  */ function printRunReportResponseWithDimensionFilter(RunReportResponse $response) {     printf('%s rows received%s', $response->getRowCount(), PHP_EOL);     foreach ($response->getDimensionHeaders() as $dimensionHeader) {         printf('Dimension header name: %s%s', $dimensionHeader->getName(), PHP_EOL);     }     foreach ($response->getMetricHeaders() as $metricHeader) {         printf(             'Metric header name: %s (%s)' . PHP_EOL,             $metricHeader->getName(),             MetricType::name($metricHeader->getType())         );     }      print 'Report result: ' . PHP_EOL;      foreach ($response->getRows() as $row) {         printf(             '%s %s' . PHP_EOL,             $row->getDimensionValues()[0]->getValue(),             $row->getMetricValues()[0]->getValue()         );     } }

Python

from google.analytics.data_v1beta import BetaAnalyticsDataClient from google.analytics.data_v1beta.types import (     DateRange,     Dimension,     Filter,     FilterExpression,     Metric,     RunReportRequest, )  from run_report import print_run_report_response   def run_sample():     """Runs the sample."""     # TODO(developer): Replace this variable with your Google Analytics 4     #  property ID before running the sample.     property_id = "YOUR-GA4-PROPERTY-ID"     run_report_with_dimension_filter(property_id)   def run_report_with_dimension_filter(property_id="YOUR-GA4-PROPERTY-ID"):     """Runs a report using a dimension filter. The call returns a time series     report of `eventCount` when `eventName` is `first_open` for each date.      This sample uses relative date range values. See https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange     for more information.     """      client = BetaAnalyticsDataClient()      request = RunReportRequest(         property=f"properties/{property_id}",         dimensions=[Dimension(name="date")],         metrics=[Metric(name="eventCount")],         date_ranges=[DateRange(start_date="7daysAgo", end_date="yesterday")],         dimension_filter=FilterExpression(             filter=Filter(                 field_name="eventName",                 string_filter=Filter.StringFilter(value="first_open"),             )         ),     )     response = client.run_report(request)     print_run_report_response(response)  

Node.js

  // TODO(developer): Uncomment this variable and replace with your   // Google Analytics 4 property ID before running the sample.   // propertyId = 'YOUR-GA4-PROPERTY-ID';    // Imports the Google Analytics Data API client library.   const {BetaAnalyticsDataClient} = require('@google-analytics/data');    // Initialize client that will be used to send requests. This client only   // needs to be created once, and can be reused for multiple requests.   const analyticsDataClient = new BetaAnalyticsDataClient();    // Runs a report using a dimension filter. The call returns a time series   // report of `eventCount` when `eventName` is `first_open` for each date.    // This sample uses relative date range values. See   // https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange   // for more information.   async function runReportWithDimensionFilter() {     const [response] = await analyticsDataClient.runReport({       property: `properties/${propertyId}`,       dimensions: [         {           name: 'date',         },       ],       metrics: [         {           name: 'eventCount',         },       ],       dateRanges: [         {           startDate: '7daysAgo',           endDate: 'yesterday',         },       ],       dimensionFilter: {         filter: {           fieldName: 'eventName',           stringFilter: {             value: 'first_open',           },         },       },     });     printRunReportResponse(response);   }    runReportWithDimensionFilter();    // Prints results of a runReport call.   function printRunReportResponse(response) {     console.log(`${response.rowCount} rows received`);     response.dimensionHeaders.forEach(dimensionHeader => {       console.log(`Dimension header name: ${dimensionHeader.name}`);     });     response.metricHeaders.forEach(metricHeader => {       console.log(         `Metric header name: ${metricHeader.name} (${metricHeader.type})`       );     });      console.log('Report result:');     response.rows.forEach(row => {       console.log(         `${row.dimensionValues[0].value}, ${row.metricValues[0].value}`       );     });   }

以下是另一个 FilterExpression 示例,其中 andGroup 仅包含符合表达式列表中所有条件的数据。此 dimensionFilter 会选择当 browserChromecountryIdUS 时:

HTTP

... "dimensionFilter": {   "andGroup": {     "expressions": [       {         "filter": {           "fieldName": "browser",           "stringFilter": {             "value": "Chrome"           }         }       },       {         "filter": {           "fieldName": "countryId",           "stringFilter": {             "value": "US"           }         }       }     ]   } }, ... 

Java

import com.google.analytics.data.v1beta.BetaAnalyticsDataClient; import com.google.analytics.data.v1beta.DateRange; import com.google.analytics.data.v1beta.Dimension; import com.google.analytics.data.v1beta.Filter; import com.google.analytics.data.v1beta.FilterExpression; import com.google.analytics.data.v1beta.FilterExpressionList; import com.google.analytics.data.v1beta.Metric; import com.google.analytics.data.v1beta.RunReportRequest; import com.google.analytics.data.v1beta.RunReportResponse;  /**  * Google Analytics Data API sample application demonstrating the usage of dimension and metric  * filters in a report.  *  * <p>See  * https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport#body.request_body.FIELDS.dimension_filter  * for more information.  *  * <p>Before you start the application, please review the comments starting with "TODO(developer)"  * and update the code to use correct values.  *  * <p>To run this sample using Maven:  *  * <pre>{@code  * cd google-analytics-data  * mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportWithMultipleDimensionFiltersSample"  * }</pre>  */ public class RunReportWithMultipleDimensionFiltersSample {    public static void main(String... args) throws Exception {     // TODO(developer): Replace with your Google Analytics 4 property ID before running the sample.     String propertyId = "YOUR-GA4-PROPERTY-ID";     sampleRunReportWithMultipleDimensionFilters(propertyId);   }    // Runs a report using multiple dimension filters joined as `and_group` expression. The filter   // selects for when both `browser` is `Chrome` and `countryId` is `US`.   // This sample uses relative date range values.   // See https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange   // for more information.   static void sampleRunReportWithMultipleDimensionFilters(String propertyId) throws Exception {     // Initialize client that will be used to send requests. This client only needs to be created     // once, and can be reused for multiple requests. After completing all of your requests, call     // the "close" method on the client to safely clean up any remaining background resources.     try (BetaAnalyticsDataClient analyticsData = BetaAnalyticsDataClient.create()) {       RunReportRequest request =           RunReportRequest.newBuilder()               .setProperty("properties/" + propertyId)               .addDimensions(Dimension.newBuilder().setName("browser"))               .addMetrics(Metric.newBuilder().setName("activeUsers"))               .addDateRanges(                   DateRange.newBuilder().setStartDate("7daysAgo").setEndDate("yesterday"))               .setDimensionFilter(                   FilterExpression.newBuilder()                       .setAndGroup(                           FilterExpressionList.newBuilder()                               .addExpressions(                                   FilterExpression.newBuilder()                                       .setFilter(                                           Filter.newBuilder()                                               .setFieldName("browser")                                               .setStringFilter(                                                   Filter.StringFilter.newBuilder()                                                       .setValue("Chrome"))))                               .addExpressions(                                   FilterExpression.newBuilder()                                       .setFilter(                                           Filter.newBuilder()                                               .setFieldName("countryId")                                               .setStringFilter(                                                   Filter.StringFilter.newBuilder()                                                       .setValue("US"))))))               .build();        // Make the request.       RunReportResponse response = analyticsData.runReport(request);       // Prints the response using a method in RunReportSample.java       RunReportSample.printRunResponseResponse(response);     }   } }

PHP

use Google\Analytics\Data\V1beta\Client\BetaAnalyticsDataClient; use Google\Analytics\Data\V1beta\DateRange; use Google\Analytics\Data\V1beta\Dimension; use Google\Analytics\Data\V1beta\Filter; use Google\Analytics\Data\V1beta\Filter\StringFilter; use Google\Analytics\Data\V1beta\FilterExpression; use Google\Analytics\Data\V1beta\FilterExpressionList; use Google\Analytics\Data\V1beta\Metric; use Google\Analytics\Data\V1beta\MetricType; use Google\Analytics\Data\V1beta\RunReportRequest; use Google\Analytics\Data\V1beta\RunReportResponse;  /**  * @param string $propertyId Your GA-4 Property ID  * Runs a report using multiple dimension filters joined as `and_group`  * expression. The filter selects for when both `browser` is `Chrome` and  * `countryId` is `US`.  * This sample uses relative date range values. See  * https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange  * for more information.  */ function run_report_with_multiple_dimension_filters(string $propertyId) {     // Create an instance of the Google Analytics Data API client library.     $client = new BetaAnalyticsDataClient();      // Make an API call.     $request = (new RunReportRequest())         ->setProperty('properties/' . $propertyId)         ->setDimensions([new Dimension(['name' => 'browser'])])         ->setMetrics([new Metric(['name' => 'activeUsers'])])         ->setDateRanges([             new DateRange([                 'start_date' => '7daysAgo',                 'end_date' => 'yesterday',             ]),         ])         ->setDimensionFilter(new FilterExpression([             'and_group' => new FilterExpressionList([                 'expressions' => [                     new FilterExpression([                         'filter' => new Filter([                             'field_name' => 'browser',                             'string_filter' => new StringFilter([                                 'value' => 'Chrome',                             ])                         ]),                     ]),                     new FilterExpression([                         'filter' => new Filter([                             'field_name' => 'countryId',                             'string_filter' => new StringFilter([                                  'value' => 'US',                             ])                          ]),                     ]),                 ],             ]),         ]));     $response = $client->runReport($request);      printRunReportResponseWithMultipleDimensionFilters($response); }  /**  * Print results of a runReport call.  * @param RunReportResponse $response  */ function printRunReportResponseWithMultipleDimensionFilters(RunReportResponse $response) {     printf('%s rows received%s', $response->getRowCount(), PHP_EOL);     foreach ($response->getDimensionHeaders() as $dimensionHeader) {         printf('Dimension header name: %s%s', $dimensionHeader->getName(), PHP_EOL);     }     foreach ($response->getMetricHeaders() as $metricHeader) {         printf(             'Metric header name: %s (%s)' . PHP_EOL,             $metricHeader->getName(),             MetricType::name($metricHeader->getType())         );     }      print 'Report result: ' . PHP_EOL;      foreach ($response->getRows() as $row) {         printf(             '%s %s' . PHP_EOL,             $row->getDimensionValues()[0]->getValue(),             $row->getMetricValues()[0]->getValue()         );     } }

Python

from google.analytics.data_v1beta import BetaAnalyticsDataClient from google.analytics.data_v1beta.types import (     DateRange,     Dimension,     Filter,     FilterExpression,     FilterExpressionList,     Metric,     RunReportRequest, )  from run_report import print_run_report_response   def run_sample():     """Runs the sample."""     # TODO(developer): Replace this variable with your Google Analytics 4     #  property ID before running the sample.     property_id = "YOUR-GA4-PROPERTY-ID"     run_report_with_multiple_dimension_filters(property_id)   def run_report_with_multiple_dimension_filters(property_id="YOUR-GA4-PROPERTY-ID"):     """Runs a report using multiple dimension filters joined as `and_group`     expression. The filter selects for when both `browser` is `Chrome` and     `countryId` is `US`.      This sample uses relative date range values. See https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange     for more information.     """     client = BetaAnalyticsDataClient()      request = RunReportRequest(         property=f"properties/{property_id}",         dimensions=[Dimension(name="browser")],         metrics=[Metric(name="activeUsers")],         date_ranges=[DateRange(start_date="7daysAgo", end_date="yesterday")],         dimension_filter=FilterExpression(             and_group=FilterExpressionList(                 expressions=[                     FilterExpression(                         filter=Filter(                             field_name="browser",                             string_filter=Filter.StringFilter(value="Chrome"),                         )                     ),                     FilterExpression(                         filter=Filter(                             field_name="countryId",                             string_filter=Filter.StringFilter(value="US"),                         )                     ),                 ]             )         ),     )     response = client.run_report(request)     print_run_report_response(response)  

Node.js

  // TODO(developer): Uncomment this variable and replace with your   // Google Analytics 4 property ID before running the sample.   // propertyId = 'YOUR-GA4-PROPERTY-ID';    // Imports the Google Analytics Data API client library.   const {BetaAnalyticsDataClient} = require('@google-analytics/data');    // Initialize client that will be used to send requests. This client only   // needs to be created once, and can be reused for multiple requests.   const analyticsDataClient = new BetaAnalyticsDataClient();    // Runs a report using multiple dimension filters joined as `and_group`   // expression. The filter selects for when both `browser` is `Chrome` and   // `countryId` is `US`.   // This sample uses relative date range values. See   // https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange   // for more information.   async function runReportWithMultipleDimensionFilters() {     const [response] = await analyticsDataClient.runReport({       property: `properties/${propertyId}`,       dimensions: [         {           name: 'browser',         },       ],       metrics: [         {           name: 'activeUsers',         },       ],       dateRanges: [         {           startDate: '7daysAgo',           endDate: 'yesterday',         },       ],       dimensionFilter: {         andGroup: {           expressions: [             {               filter: {                 fieldName: 'browser',                 stringFilter: {                   value: 'Chrome',                 },               },             },             {               filter: {                 fieldName: 'countryId',                 stringFilter: {                   value: 'US',                 },               },             },           ],         },       },     });     printRunReportResponse(response);   }    runReportWithMultipleDimensionFilters();    // Prints results of a runReport call.   function printRunReportResponse(response) {     console.log(`${response.rowCount} rows received`);     response.dimensionHeaders.forEach(dimensionHeader => {       console.log(`Dimension header name: ${dimensionHeader.name}`);     });     response.metricHeaders.forEach(metricHeader => {       console.log(         `Metric header name: ${metricHeader.name} (${metricHeader.type})`       );     });      console.log('Report result:');     response.rows.forEach(row => {       console.log(         `${row.dimensionValues[0].value}, ${row.metricValues[0].value}`       );     });   }

orGroup 包含满足表达式列表中的任一条件的数据。

notExpression 会排除与其内部表达式匹配的数据。下面的 dimensionFilter 仅在 pageTitle 不为 My Homepage 时返回数据。该报告会显示除 My Homepage 之外的每个 pageTitle 的事件数据:

HTTP

... "dimensionFilter": {   "notExpression": {     "filter": {       "fieldName": "pageTitle",       "stringFilter": {         "value": "My Homepage"       }     }   } }, ... 

Java

import com.google.analytics.data.v1beta.BetaAnalyticsDataClient; import com.google.analytics.data.v1beta.DateRange; import com.google.analytics.data.v1beta.Dimension; import com.google.analytics.data.v1beta.Filter; import com.google.analytics.data.v1beta.FilterExpression; import com.google.analytics.data.v1beta.Metric; import com.google.analytics.data.v1beta.RunReportRequest; import com.google.analytics.data.v1beta.RunReportResponse;  /**  * Google Analytics Data API sample application demonstrating the usage of dimension and metric  * filters in a report.  *  * <p>See  * https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport#body.request_body.FIELDS.dimension_filter  * for more information.  *  * <p>Before you start the application, please review the comments starting with "TODO(developer)"  * and update the code to use correct values.  *  * <p>To run this sample using Maven:  *  * <pre>{@code  * cd google-analytics-data  * mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportWithDimensionExcludeFilterSample"  * }</pre>  */ public class RunReportWithDimensionExcludeFilterSample {    public static void main(String... args) throws Exception {     // TODO(developer): Replace with your Google Analytics 4 property ID before running the sample.     String propertyId = "YOUR-GA4-PROPERTY-ID";     sampleRunReportWithDimensionExcludeFilter(propertyId);   }    // Runs a report using a filter with `not_expression`. The dimension filter selects for when   // `pageTitle` is not `My Homepage`.   // This sample uses relative date range values.   // See https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange   // for more information.   static void sampleRunReportWithDimensionExcludeFilter(String propertyId) throws Exception {     // Initialize client that will be used to send requests. This client only needs to be created     // once, and can be reused for multiple requests. After completing all of your requests, call     // the "close" method on the client to safely clean up any remaining background resources.     try (BetaAnalyticsDataClient analyticsData = BetaAnalyticsDataClient.create()) {       RunReportRequest request =           RunReportRequest.newBuilder()               .setProperty("properties/" + propertyId)               .addDimensions(Dimension.newBuilder().setName("pageTitle"))               .addMetrics(Metric.newBuilder().setName("sessions"))               .addDateRanges(                   DateRange.newBuilder().setStartDate("7daysAgo").setEndDate("yesterday"))               .setDimensionFilter(                   FilterExpression.newBuilder()                       .setNotExpression(                           FilterExpression.newBuilder()                               .setFilter(                                   Filter.newBuilder()                                       .setFieldName("pageTitle")                                       .setStringFilter(                                           Filter.StringFilter.newBuilder()                                               .setValue("My Homepage")))))               .build();        // Make the request.       RunReportResponse response = analyticsData.runReport(request);       // Prints the response using a method in RunReportSample.java       RunReportSample.printRunResponseResponse(response);     }   } }

PHP

use Google\Analytics\Data\V1beta\Client\BetaAnalyticsDataClient; use Google\Analytics\Data\V1beta\DateRange; use Google\Analytics\Data\V1beta\Dimension; use Google\Analytics\Data\V1beta\Filter; use Google\Analytics\Data\V1beta\Filter\StringFilter; use Google\Analytics\Data\V1beta\FilterExpression; use Google\Analytics\Data\V1beta\Metric; use Google\Analytics\Data\V1beta\MetricType; use Google\Analytics\Data\V1beta\RunReportRequest; use Google\Analytics\Data\V1beta\RunReportResponse;  /**  * Runs a report using a filter with `not_expression`. The dimension filter  * selects for when `pageTitle` is not `My Homepage`.  * This sample uses relative date range values. See  * https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange  * for more information.  * @param string $propertyId Your GA-4 Property ID  */ function run_report_with_dimension_exclude_filter(string $propertyId) {     // Create an instance of the Google Analytics Data API client library.     $client = new BetaAnalyticsDataClient();      // Make an API call.     $request = (new RunReportRequest())         ->setProperty('properties/' . $propertyId)         ->setDimensions([new Dimension(['name' => 'pageTitle'])])         ->setMetrics([new Metric(['name' => 'sessions'])])         ->setDateRanges([new DateRange([                 'start_date' => '7daysAgo',                 'end_date' => 'yesterday',             ])         ])         ->setDimensionFilter(new FilterExpression([             'not_expression' => new FilterExpression([                 'filter' => new Filter([                     'field_name' => 'pageTitle',                     'string_filter' => new StringFilter([                         'value' => 'My Homepage',                     ]),                 ]),             ]),         ]));     $response = $client->runReport($request);      printRunReportResponseWithDimensionExcludeFilter($response); }  /**  * Print results of a runReport call.  * @param RunReportResponse $response  */ function printRunReportResponseWithDimensionExcludeFilter(RunReportResponse $response) {     printf('%s rows received%s', $response->getRowCount(), PHP_EOL);     foreach ($response->getDimensionHeaders() as $dimensionHeader) {         printf('Dimension header name: %s%s', $dimensionHeader->getName(), PHP_EOL);     }     foreach ($response->getMetricHeaders() as $metricHeader) {         printf(             'Metric header name: %s (%s)' . PHP_EOL,             $metricHeader->getName(),             MetricType::name($metricHeader->getType())         );     }      print 'Report result: ' . PHP_EOL;      foreach ($response->getRows() as $row) {         printf(             '%s %s' . PHP_EOL,             $row->getDimensionValues()[0]->getValue(),             $row->getMetricValues()[0]->getValue()         );     } }

Python

from google.analytics.data_v1beta import BetaAnalyticsDataClient from google.analytics.data_v1beta.types import (     DateRange,     Dimension,     Filter,     FilterExpression,     Metric,     RunReportRequest, )  from run_report import print_run_report_response   def run_sample():     """Runs the sample."""     # TODO(developer): Replace this variable with your Google Analytics 4     #  property ID before running the sample.     property_id = "YOUR-GA4-PROPERTY-ID"     run_report_with_dimension_exclude_filter(property_id)   def run_report_with_dimension_exclude_filter(property_id="YOUR-GA4-PROPERTY-ID"):     """Runs a report using a filter with `not_expression`. The dimension filter     selects for when `pageTitle` is not `My Homepage`.      This sample uses relative date range values. See https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange     for more information.     """     client = BetaAnalyticsDataClient()      request = RunReportRequest(         property=f"properties/{property_id}",         dimensions=[Dimension(name="pageTitle")],         metrics=[Metric(name="sessions")],         date_ranges=[DateRange(start_date="7daysAgo", end_date="yesterday")],         dimension_filter=FilterExpression(             not_expression=FilterExpression(                 filter=Filter(                     field_name="pageTitle",                     string_filter=Filter.StringFilter(value="My Homepage"),                 )             )         ),     )     response = client.run_report(request)     print_run_report_response(response)  

Node.js

  // TODO(developer): Uncomment this variable and replace with your   // Google Analytics 4 property ID before running the sample.   // propertyId = 'YOUR-GA4-PROPERTY-ID';    // Imports the Google Analytics Data API client library.   const {BetaAnalyticsDataClient} = require('@google-analytics/data');    // Initialize client that will be used to send requests. This client only   // needs to be created once, and can be reused for multiple requests.   const analyticsDataClient = new BetaAnalyticsDataClient();    // Runs a report using a filter with `not_expression`. The dimension filter   // selects for when `pageTitle` is not `My Homepage`.   // This sample uses relative date range values. See   // https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange   // for more information.   async function runReportWithDimensionExcludeFilter() {     const [response] = await analyticsDataClient.runReport({       property: `properties/${propertyId}`,       dimensions: [         {           name: 'pageTitle',         },       ],       metrics: [         {           name: 'sessions',         },       ],       dateRanges: [         {           startDate: '7daysAgo',           endDate: 'yesterday',         },       ],       dimensionFilter: {         notExpression: {           filter: {             fieldName: 'pageTitle',             stringFilter: {               value: 'My Homepage',             },           },         },       },     });     printRunReportResponse(response);   }    runReportWithDimensionExcludeFilter();    // Prints results of a runReport call.   function printRunReportResponse(response) {     console.log(`${response.rowCount} rows received`);     response.dimensionHeaders.forEach(dimensionHeader => {       console.log(`Dimension header name: ${dimensionHeader.name}`);     });     response.metricHeaders.forEach(metricHeader => {       console.log(         `Metric header name: ${metricHeader.name} (${metricHeader.type})`       );     });      console.log('Report result:');     response.rows.forEach(row => {       console.log(         `${row.dimensionValues[0].value}, ${row.metricValues[0].value}`       );     });   }

inListFilter 会与列表中的任意值的数据匹配。下面的 dimensionFilter 会返回事件数据,其中 eventName 可以是 purchasein_app_purchaseapp_store_subscription_renew 中的任意一种:

HTTP

... "dimensionFilter": {     "filter": {       "fieldName": "eventName",       "inListFilter": {         "values": ["purchase",         "in_app_purchase",         "app_store_subscription_renew"]       }     }   }, ... 

Java

import com.google.analytics.data.v1beta.BetaAnalyticsDataClient; import com.google.analytics.data.v1beta.DateRange; import com.google.analytics.data.v1beta.Dimension; import com.google.analytics.data.v1beta.Filter; import com.google.analytics.data.v1beta.FilterExpression; import com.google.analytics.data.v1beta.Metric; import com.google.analytics.data.v1beta.RunReportRequest; import com.google.analytics.data.v1beta.RunReportResponse; import java.util.ArrayList;  /**  * Google Analytics Data API sample application demonstrating the usage of dimension and metric  * filters in a report.  *  * <p>See  * https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport#body.request_body.FIELDS.dimension_filter  * for more information.  *  * <p>Before you start the application, please review the comments starting with "TODO(developer)"  * and update the code to use correct values.  *  * <p>To run this sample using Maven:  *  * <pre>{@code  * cd google-analytics-data  * mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportWithDimensionInListFilterSample"  * }</pre>  */ public class RunReportWithDimensionInListFilterSample {    public static void main(String... args) throws Exception {     // TODO(developer): Replace with your Google Analytics 4 property ID before running the sample.     String propertyId = "YOUR-GA4-PROPERTY-ID";     sampleRunReportWithDimensionInListFilter(propertyId);   }    // Runs a report using a dimension filter with `in_list_filter` expression. The filter selects for   // when `eventName` is set to one of three event names specified in the query.   // This sample uses relative date range values.   // See https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange   // for more information.   static void sampleRunReportWithDimensionInListFilter(String propertyId) throws Exception {     // Initialize client that will be used to send requests. This client only needs to be created     // once, and can be reused for multiple requests. After completing all of your requests, call     // the "close" method on the client to safely clean up any remaining background resources.     try (BetaAnalyticsDataClient analyticsData = BetaAnalyticsDataClient.create()) {       RunReportRequest request =           RunReportRequest.newBuilder()               .setProperty("properties/" + propertyId)               .addDimensions(Dimension.newBuilder().setName("eventName"))               .addMetrics(Metric.newBuilder().setName("sessions"))               .addDateRanges(                   DateRange.newBuilder().setStartDate("7daysAgo").setEndDate("yesterday"))               .setDimensionFilter(                   FilterExpression.newBuilder()                       .setFilter(                           Filter.newBuilder()                               .setFieldName("eventName")                               .setInListFilter(                                   Filter.InListFilter.newBuilder()                                       .addAllValues(                                           new ArrayList<String>() {                                             {                                               add("purchase");                                               add("in_app_purchase");                                               add("app_store_subscription_renew");                                             }                                           })                                       .build())))               .build();        // Make the request.       RunReportResponse response = analyticsData.runReport(request);       // Prints the response using a method in RunReportSample.java       RunReportSample.printRunResponseResponse(response);     }   } }

PHP

use Google\Analytics\Data\V1beta\Client\BetaAnalyticsDataClient; use Google\Analytics\Data\V1beta\DateRange; use Google\Analytics\Data\V1beta\Dimension; use Google\Analytics\Data\V1beta\Filter; use Google\Analytics\Data\V1beta\Filter\InListFilter; use Google\Analytics\Data\V1beta\FilterExpression; use Google\Analytics\Data\V1beta\Metric; use Google\Analytics\Data\V1beta\MetricType; use Google\Analytics\Data\V1beta\RunReportRequest; use Google\Analytics\Data\V1beta\RunReportResponse;  /**  * Runs a report using a dimension filter with `in_list_filter` expression.  * The filter selects for when `eventName` is set to one of three event names  * specified in the query.  * This sample uses relative date range values. See  * https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange  * for more information.  * @param string $propertyId Your GA-4 Property ID  */ function run_report_with_dimension_in_list_filter(string $propertyId) {     // Create an instance of the Google Analytics Data API client library.     $client = new BetaAnalyticsDataClient();      // Make an API call.     $request = (new RunReportRequest())         ->setProperty('properties/' . $propertyId)         ->setDimensions([new Dimension(['name' => 'eventName'])])         ->setMetrics([new Metric(['name' => 'sessions'])])         ->setDateRanges([new DateRange([                 'start_date' => '7daysAgo',                 'end_date' => 'yesterday',             ])         ])         ->setDimensionFilter(new FilterExpression([             'filter' => new Filter([                 'field_name' => 'eventName',                 'in_list_filter' => new InListFilter([                     'values' => [                         'purchase',                         'in_app_purchase',                         'app_store_subscription_renew',                     ],                 ]),             ]),         ]));     $response = $client->runReport($request);      printRunReportResponseWithDimensionInListFilter($response); }  /**  * Print results of a runReport call.  * @param RunReportResponse $response  */ function printRunReportResponseWithDimensionInListFilter(RunReportResponse $response) {     printf('%s rows received%s', $response->getRowCount(), PHP_EOL);     foreach ($response->getDimensionHeaders() as $dimensionHeader) {         printf('Dimension header name: %s%s', $dimensionHeader->getName(), PHP_EOL);     }     foreach ($response->getMetricHeaders() as $metricHeader) {         printf(             'Metric header name: %s (%s)' . PHP_EOL,             $metricHeader->getName(),             MetricType::name($metricHeader->getType())         );     }      print 'Report result: ' . PHP_EOL;      foreach ($response->getRows() as $row) {         printf(             '%s %s' . PHP_EOL,             $row->getDimensionValues()[0]->getValue(),             $row->getMetricValues()[0]->getValue()         );     } }

Python

from google.analytics.data_v1beta import BetaAnalyticsDataClient from google.analytics.data_v1beta.types import (     DateRange,     Dimension,     Filter,     FilterExpression,     Metric,     RunReportRequest, )  from run_report import print_run_report_response   def run_sample():     """Runs the sample."""     # TODO(developer): Replace this variable with your Google Analytics 4     #  property ID before running the sample.     property_id = "YOUR-GA4-PROPERTY-ID"     run_report_with_dimension_in_list_filter(property_id)   def run_report_with_dimension_in_list_filter(property_id="YOUR-GA4-PROPERTY-ID"):     """Runs a report using a dimension filter with `in_list_filter` expression.     The filter selects for when `eventName` is set to one of three event names     specified in the query.      This sample uses relative date range values. See https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange     for more information.     """     client = BetaAnalyticsDataClient()      request = RunReportRequest(         property=f"properties/{property_id}",         dimensions=[Dimension(name="eventName")],         metrics=[Metric(name="sessions")],         date_ranges=[DateRange(start_date="7daysAgo", end_date="yesterday")],         dimension_filter=FilterExpression(             filter=Filter(                 field_name="eventName",                 in_list_filter=Filter.InListFilter(                     values=[                         "purchase",                         "in_app_purchase",                         "app_store_subscription_renew",                     ]                 ),             )         ),     )     response = client.run_report(request)     print_run_report_response(response)  

Node.js

  // TODO(developer): Uncomment this variable and replace with your   // Google Analytics 4 property ID before running the sample.   // propertyId = 'YOUR-GA4-PROPERTY-ID';    // Imports the Google Analytics Data API client library.   const {BetaAnalyticsDataClient} = require('@google-analytics/data');    // Initialize client that will be used to send requests. This client only   // needs to be created once, and can be reused for multiple requests.   const analyticsDataClient = new BetaAnalyticsDataClient();    // Runs a report using a dimension filter with `in_list_filter` expression.   // The filter selects for when `eventName` is set to one of three event names   // specified in the query.   // This sample uses relative date range values. See   // https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/DateRange   // for more information.   async function runReportWithDimensionInListFilter() {     const [response] = await analyticsDataClient.runReport({       property: `properties/${propertyId}`,       dimensions: [         {           name: 'eventName',         },       ],       metrics: [         {           name: 'sessions',         },       ],       dateRanges: [         {           startDate: '7daysAgo',           endDate: 'yesterday',         },       ],       dimensionFilter: {         filter: {           fieldName: 'eventName',           inListFilter: {             values: [               'purchase',               'in_app_purchase',               'app_store_subscription_renew',             ],           },         },       },     });     printRunReportResponse(response);   }    runReportWithDimensionInListFilter();    // Prints results of a runReport call.   function printRunReportResponse(response) {     console.log(`${response.rowCount} rows received`);     response.dimensionHeaders.forEach(dimensionHeader => {       console.log(`Dimension header name: ${dimensionHeader.name}`);     });     response.metricHeaders.forEach(metricHeader => {       console.log(         `Metric header name: ${metricHeader.name} (${metricHeader.type})`       );     });      console.log('Report result:');     response.rows.forEach(row => {       console.log(         `${row.dimensionValues[0].value}, ${row.metricValues[0].value}`       );     });   }

浏览长篇报告

默认情况下,该报告仅包含前 10,000 行事件数据。如需在报告中查看最多 25 万行,您可以在 RunReportRequest 中添加 "limit": 250000

对于行数超过 25 万的报告,您必须发送一系列请求,然后按页浏览结果。例如,下面是请求前 25 万行的请求:

HTTP

POST https://analyticsdata.googleapis.com/v1beta/properties/GA_PROPERTY_ID:runReport   {     ...     "limit": 250000,     "offset": 0   } 

Java

import com.google.analytics.data.v1beta.BetaAnalyticsDataClient; import com.google.analytics.data.v1beta.DateRange; import com.google.analytics.data.v1beta.Dimension; import com.google.analytics.data.v1beta.Metric; import com.google.analytics.data.v1beta.RunReportRequest; import com.google.analytics.data.v1beta.RunReportResponse;  /**  * Google Analytics Data API sample application demonstrating the use of pagination to retrieve  * large result sets.  *  * <p>See  * https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport#body.request_body.FIELDS.offset  * for more information.  *  * <p>Before you start the application, please review the comments starting with "TODO(developer)"  * and update the code to use correct values.  *  * <p>To run this sample using Maven:  *  * <pre>{@code  * cd google-analytics-data  * mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportWithPaginationSample"  * }</pre>  */ public class RunReportWithPaginationSample {    public static void main(String... args) throws Exception {     // TODO(developer): Replace with your Google Analytics 4 property ID before running the sample.     String propertyId = "YOUR-GA4-PROPERTY-ID";     sampleRunReportWithPagination(propertyId);   }    // Runs a report several times, each time retrieving a portion of result using pagination.   static void sampleRunReportWithPagination(String propertyId) throws Exception {     // Initialize client that will be used to send requests. This client only needs to be created     // once, and can be reused for multiple requests. After completing all of your requests, call     // the "close" method on the client to safely clean up any remaining background resources.     try (BetaAnalyticsDataClient analyticsData = BetaAnalyticsDataClient.create()) {       RunReportRequest request =           RunReportRequest.newBuilder()               .setProperty("properties/" + propertyId)               .addDateRanges(                   DateRange.newBuilder().setStartDate("365daysAgo").setEndDate("yesterday"))               .addDimensions(Dimension.newBuilder().setName("firstUserSource"))               .addDimensions(Dimension.newBuilder().setName("firstUserMedium"))               .addDimensions(Dimension.newBuilder().setName("firstUserCampaignName"))               .addMetrics(Metric.newBuilder().setName("sessions"))               .addMetrics(Metric.newBuilder().setName("keyEvents"))               .addMetrics(Metric.newBuilder().setName("totalRevenue"))               .setLimit(100000)               .setOffset(0)               .build();        // Make the request.       RunReportResponse response = analyticsData.runReport(request);       RunReportSample.printRunResponseResponse(response);        // Run the same report with a different offset value to retrieve the second page of a       // response.       request =           RunReportRequest.newBuilder()               .setProperty("properties/" + propertyId)               .addDateRanges(                   DateRange.newBuilder().setStartDate("365daysAgo").setEndDate("yesterday"))               .addDimensions(Dimension.newBuilder().setName("firstUserSource"))               .addDimensions(Dimension.newBuilder().setName("firstUserMedium"))               .addDimensions(Dimension.newBuilder().setName("firstUserCampaignName"))               .addMetrics(Metric.newBuilder().setName("sessions"))               .addMetrics(Metric.newBuilder().setName("keyEvents"))               .addMetrics(Metric.newBuilder().setName("totalRevenue"))               .setLimit(100000)               .setOffset(100000)               .build();        // Make the request.       response = analyticsData.runReport(request);       // Prints the response using a method in RunReportSample.java       RunReportSample.printRunResponseResponse(response);     }   } }

PHP

    // Make an API call.     $request = (new RunReportRequest())         ->setProperty('properties/' . $propertyId)         ->setDateRanges([             new DateRange([                 'start_date' => '350daysAgo',                 'end_date' => 'yesterday',             ])         ])         ->setDimensions([             new Dimension(['name' => 'firstUserSource']),             new Dimension(['name' => 'firstUserMedium']),             new Dimension(['name' => 'firstUserCampaignName']),         ])         ->setMetrics([             new Metric(['name' => 'sessions']),             new Metric(['name' => 'keyEvents']),             new Metric(['name' => 'totalRevenue']),         ])         ->setLimit(100000)         ->setOffset(0);      $requestCount = 1;     printf('Sending request #%d' . PHP_EOL, $requestCount);      $response = $client->runReport($request);

Python

    request = RunReportRequest(         property=f"properties/{property_id}",         date_ranges=[DateRange(start_date="365daysAgo", end_date="yesterday")],         dimensions=[             Dimension(name="firstUserSource"),             Dimension(name="firstUserMedium"),             Dimension(name="firstUserCampaignName"),         ],         metrics=[             Metric(name="sessions"),             Metric(name="keyEvents"),             Metric(name="totalRevenue"),         ],         limit=100000,         offset=0,     )     response = client.run_report(request)

Node.js

    const [response] = await analyticsDataClient.runReport({       property: `properties/${propertyId}`,       dateRanges: [         {           startDate: '350daysAgo',           endDate: 'yesterday',         },       ],       dimensions: [         {           name: 'firstUserSource',         },         {           name: 'firstUserMedium',         },         {           name: 'firstUserCampaignName',         },       ],       metrics: [         {           name: 'sessions',         },         {           name: 'keyEvents',         },         {           name: 'totalRevenue',         },       ],       limit: 100000,       offset: 0,     });

响应中的 rowCount 参数表示行总数,与请求中的 limitoffset 值无关。例如,如果响应显示 "rowCount": 572345,则需要发出三个请求:

offset 限制 返回的行索引范围
0 250000 [ 0, 249999]
250000 250000 [250000, 499999]
500000 250000 [500000, 572345]

以下是获取接下来 25 万行的示例请求。所有其他参数(例如 dateRangedimensionsmetrics)应与第一个请求相同。

HTTP

POST https://analyticsdata.googleapis.com/v1beta/properties/GA_PROPERTY_ID:runReport   {     ...     "limit": 250000,     "offset": 250000   } 

Java

      request =           RunReportRequest.newBuilder()               .setProperty("properties/" + propertyId)               .addDateRanges(                   DateRange.newBuilder().setStartDate("365daysAgo").setEndDate("yesterday"))               .addDimensions(Dimension.newBuilder().setName("firstUserSource"))               .addDimensions(Dimension.newBuilder().setName("firstUserMedium"))               .addDimensions(Dimension.newBuilder().setName("firstUserCampaignName"))               .addMetrics(Metric.newBuilder().setName("sessions"))               .addMetrics(Metric.newBuilder().setName("keyEvents"))               .addMetrics(Metric.newBuilder().setName("totalRevenue"))               .setLimit(100000)               .setOffset(100000)               .build();        // Make the request.       response = analyticsData.runReport(request);       // Prints the response using a method in RunReportSample.java       RunReportSample.printRunResponseResponse(response);

PHP

    $rowsReceived = count($response->getRows());     $totalRows = $response->getRowCount();      // Run the same report with an increased offset value to retrieve each additional     // page until all rows are received.     while ($rowsReceived < $totalRows) {         $request = $request->setOffset($rowsReceived);         $requestCount++;         printf('Sending request #%d' . PHP_EOL, $requestCount);          $response = $client->runReport($request);         $rowsReceived += count($response->getRows());         printRunReportResponseWithPagination($response, $requestCount);     }

Python

    request = RunReportRequest(         property=f"properties/{property_id}",         date_ranges=[DateRange(start_date="365daysAgo", end_date="yesterday")],         dimensions=[             Dimension(name="firstUserSource"),             Dimension(name="firstUserMedium"),             Dimension(name="firstUserCampaignName"),         ],         metrics=[             Metric(name="sessions"),             Metric(name="keyEvents"),             Metric(name="totalRevenue"),         ],         limit=100000,         offset=100000,     )     response = client.run_report(request)

Node.js

    const [secondResponse] = await analyticsDataClient.runReport({       property: `properties/${propertyId}`,       dateRanges: [         {           startDate: '350daysAgo',           endDate: 'yesterday',         },       ],       dimensions: [         {           name: 'firstUserSource',         },         {           name: 'firstUserMedium',         },         {           name: 'firstUserCampaignName',         },       ],       metrics: [         {           name: 'sessions',         },         {           name: 'keyEvents',         },         {           name: 'totalRevenue',         },       ],       limit: 100000,       offset: 100000,     });

使用多个日期范围

一个报告请求可以检索多个 dateRanges 的数据。例如,此报告比较了 2022 年 8 月和 2023 年 8 月的前两周:

HTTP

POST https://analyticsdata.googleapis.com/v1beta/properties/GA_PROPERTY_ID:runReport   {     "dateRanges": [       {         "startDate": "2022-08-01",         "endDate": "2022-08-14"       },       {         "startDate": "2023-08-01",         "endDate": "2023-08-14"       }     ],     "dimensions": [{ "name": "platform" }],     "metrics": [{ "name": "activeUsers" }]   } 

Java

import com.google.analytics.data.v1beta.BetaAnalyticsDataClient; import com.google.analytics.data.v1beta.DateRange; import com.google.analytics.data.v1beta.Dimension; import com.google.analytics.data.v1beta.Metric; import com.google.analytics.data.v1beta.RunReportRequest; import com.google.analytics.data.v1beta.RunReportResponse;  /**  * Google Analytics Data API sample application demonstrating the usage of date ranges in a report.  *  * <p>See  * https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport#body.request_body.FIELDS.date_ranges  * for more information.  *  * <p>Before you start the application, please review the comments starting with "TODO(developer)"  * and update the code to use correct values.  *  * <p>To run this sample using Maven:  *  * <pre>{@code  * cd google-analytics-data  * mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunReportWithDateRangesSample"  * }</pre>  */ public class RunReportWithDateRangesSample {    public static void main(String... args) throws Exception {     // TODO(developer): Replace with your Google Analytics 4 property ID before running the sample.     String propertyId = "YOUR-GA4-PROPERTY-ID";     sampleRunReportWithDateRanges(propertyId);   }    // Runs a report using two date ranges.   static void sampleRunReportWithDateRanges(String propertyId) throws Exception {     // Initialize client that will be used to send requests. This client only needs to be created     // once, and can be reused for multiple requests. After completing all of your requests, call     // the "close" method on the client to safely clean up any remaining background resources.     try (BetaAnalyticsDataClient analyticsData = BetaAnalyticsDataClient.create()) {       RunReportRequest request =           RunReportRequest.newBuilder()               .setProperty("properties/" + propertyId)               .addDateRanges(                   DateRange.newBuilder().setStartDate("2019-08-01").setEndDate("2019-08-14"))               .addDateRanges(                   DateRange.newBuilder().setStartDate("2020-08-01").setEndDate("2020-08-14"))               .addDimensions(Dimension.newBuilder().setName("platform"))               .addMetrics(Metric.newBuilder().setName("activeUsers"))               .build();        // Make the request.       RunReportResponse response = analyticsData.runReport(request);       // Prints the response using a method in RunReportSample.java       RunReportSample.printRunResponseResponse(response);     }   } }

PHP

use Google\Analytics\Data\V1beta\Client\BetaAnalyticsDataClient; use Google\Analytics\Data\V1beta\DateRange; use Google\Analytics\Data\V1beta\Dimension; use Google\Analytics\Data\V1beta\Metric; use Google\Analytics\Data\V1beta\MetricType; use Google\Analytics\Data\V1beta\RunReportRequest; use Google\Analytics\Data\V1beta\RunReportResponse;  /**  * @param string $propertyID Your GA-4 Property ID  * Runs a report using two date ranges.  */ function run_report_with_date_ranges(string $propertyId) {     // Create an instance of the Google Analytics Data API client library.     $client = new BetaAnalyticsDataClient();      // Make an API call.     $request = (new RunReportRequest())         ->setProperty('properties/' . $propertyId)         ->setDateRanges([             new DateRange([                 'start_date' => '2019-08-01',                 'end_date' => '2019-08-14',             ]),             new DateRange([                 'start_date' => '2020-08-01',                 'end_date' => '2020-08-14',             ]),         ])         ->setDimensions([new Dimension(['name' => 'platform'])])         ->setMetrics([new Metric(['name' => 'activeUsers'])]);     $response = $client->runReport($request);      printRunReportResponseWithDateRanges($response); }  /**  * Print results of a runReport call.  * @param RunReportResponse $response  */ function printRunReportResponseWithDateRanges(RunReportResponse $response) {     printf('%s rows received%s', $response->getRowCount(), PHP_EOL);     foreach ($response->getDimensionHeaders() as $dimensionHeader) {         printf('Dimension header name: %s%s', $dimensionHeader->getName(), PHP_EOL);     }     foreach ($response->getMetricHeaders() as $metricHeader) {         printf(             'Metric header name: %s (%s)' . PHP_EOL,             $metricHeader->getName(),             MetricType::name($metricHeader->getType())         );     }      print 'Report result: ' . PHP_EOL;      foreach ($response->getRows() as $row) {         printf(             '%s %s' . PHP_EOL,             $row->getDimensionValues()[0]->getValue(),             $row->getMetricValues()[0]->getValue()         );     } }

Python

from google.analytics.data_v1beta import BetaAnalyticsDataClient from google.analytics.data_v1beta.types import (     DateRange,     Dimension,     Metric,     RunReportRequest, )  from run_report import print_run_report_response   def run_sample():     """Runs the sample."""     # TODO(developer): Replace this variable with your Google Analytics 4     #  property ID before running the sample.     property_id = "YOUR-GA4-PROPERTY-ID"     run_report_with_date_ranges(property_id)   def run_report_with_date_ranges(property_id="YOUR-GA4-PROPERTY-ID"):     """Runs a report using two date ranges."""     client = BetaAnalyticsDataClient()      request = RunReportRequest(         property=f"properties/{property_id}",         date_ranges=[             DateRange(start_date="2019-08-01", end_date="2019-08-14"),             DateRange(start_date="2020-08-01", end_date="2020-08-14"),         ],         dimensions=[Dimension(name="platform")],         metrics=[Metric(name="activeUsers")],     )     response = client.run_report(request)     print_run_report_response(response)  

Node.js

  // TODO(developer): Uncomment this variable and replace with your   // Google Analytics 4 property ID before running the sample.   // propertyId = 'YOUR-GA4-PROPERTY-ID';    // Imports the Google Analytics Data API client library.   const {BetaAnalyticsDataClient} = require('@google-analytics/data');    // Initialize client that will be used to send requests. This client only   // needs to be created once, and can be reused for multiple requests.   const analyticsDataClient = new BetaAnalyticsDataClient();    // Runs a report using two date ranges.   async function runReportWithDateRanges() {     const [response] = await analyticsDataClient.runReport({       property: `properties/${propertyId}`,       dateRanges: [         {           startDate: '2019-08-01',           endDate: '2019-08-14',         },         {           startDate: '2020-08-01',           endDate: '2020-08-14',         },       ],       dimensions: [         {           name: 'platform',         },       ],       metrics: [         {           name: 'activeUsers',         },       ],     });     printRunReportResponse(response);   }    runReportWithDateRanges();    // Prints results of a runReport call.   function printRunReportResponse(response) {     console.log(`${response.rowCount} rows received`);     response.dimensionHeaders.forEach(dimensionHeader => {       console.log(`Dimension header name: ${dimensionHeader.name}`);     });     response.metricHeaders.forEach(metricHeader => {       console.log(         `Metric header name: ${metricHeader.name} (${metricHeader.type})`       );     });      console.log('Report result:');     response.rows.forEach(row => {       console.log(         `${row.dimensionValues[0].value}, ${row.metricValues[0].value}`       );     });   }

当您在请求中添加多个 dateRanges 时,系统会自动在响应中添加 dateRange 列。当 dateRange 列为 date_range_0 时,该行的日期数据对应于第一个日期范围。当 dateRange 列为 date_range_1 时,该行的日期范围为第二个日期范围。

以下是两个日期范围的示例响应:

{   "dimensionHeaders": [     {       "name": "platform"     },     {       "name": "dateRange"     }   ],   "metricHeaders": [     {       "name": "activeUsers",       "type": "TYPE_INTEGER"     }   ],   "rows": [     {       "dimensionValues": [         {           "value": "iOS"         },         {           "value": "date_range_0"         }       ],       "metricValues": [         {           "value": "774"         }       ]     },     {       "dimensionValues": [         {           "value": "Android"         },         {           "value": "date_range_1"         }       ],       "metricValues": [         {           "value": "335"         }       ]     },     ...   ], } 

后续步骤

如需简要了解 Data API v1 的更多高级报告功能,请参阅高级功能实时报告