Как создать отчет

В этом руководстве объясняется, как создать базовый отчет для ваших данных Analytics с помощью API данных Google Analytics v1. Отчеты Data API v1 аналогичны отчетам, которые вы можете создавать в разделе «Отчеты» пользовательского интерфейса Google Analytics .

В этом руководстве рассматриваются основные отчеты — общая функция отчетов Data API. Data API v1 также имеет специализированные отчеты в реальном времени и отчеты по последовательностям .

runReport — рекомендуемый метод для запросов, который используется во всех примерах в этом руководстве. Ознакомьтесь с расширенными функциями , чтобы получить обзор других основных методов отчетности. Попробуйте Query Explorer , чтобы проверить свои запросы.

Обзор отчетов

Отчеты – это таблицы данных о событиях для ресурса Google Analytics . Каждая таблица отчета содержит параметры и показатели, запрошенные в вашем запросе, с данными в отдельных строках.

Используйте фильтры, чтобы возвращать только строки, соответствующие определенному условию, и нумерацию страниц для навигации по результатам.

Вот пример таблицы отчета, в которой показано одно измерение ( Country ) и одна метрика ( activeUsers ):

Страна Активные пользователи
Япония 2541
Франция 12

Укажите источник данных

Для каждого запроса runReport необходимо указать идентификатор ресурса Google Analytics . Указанное вами свойство Analytics используется в качестве набора данных для этого запроса. Вот пример:

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

Ответ на этот запрос включает только данные из ресурса Analytics, который вы указали как GA_PROPERTY_ID .

Если вы используете клиентские библиотеки Data API , укажите источник данных в параметре property в виде properties/ GA_PROPERTY_ID . См. краткое руководство для примеров использования клиентских библиотек.

См. раздел «Отправка событий протокола измерений в Google Analytics», если вы хотите включать события протокола измерений в свои отчеты.

Создать отчет

Чтобы создать отчет, создайте объект RunReportRequest . Рекомендуем начать со следующих параметров:

  • Допустимая запись в поле dateRanges .
  • По крайней мере одна действительная запись в поле dimensions .
  • По крайней мере одна действительная запись в поле metrics .

Вот пример запроса с рекомендуемыми полями:

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" }]
 
}
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());
   
}
 
}
}
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;
   
}
}
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}")



 
// 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 измерения:

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"
     
}
   
],
 
}

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);
   
}
 
}
}
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()
       
);
   
}
}
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)



 
// 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}`
     
);
   
});
 
}

Ниже приведен пример ответа, который показывает 1135 активных пользователей, 512 новых пользователей и общий доход 73,0841 в валюте вашего ресурса Google Analytics на дату 20231025 (25 октября 2023 г.).

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

Прочитайте ответ

Ответ отчета содержит заголовок и строки данных. Заголовок состоит из DimensionHeaders и MetricHeaders , в которых перечислены столбцы отчета. Каждая строка состоит из DimensionValues ​​и MetricValues . Порядок столбцов в запросе, заголовке и строках одинаков.

Вот пример ответа на предыдущий образец запроса:

{
 
"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 указывает город, например Paris или New York , где произошло каждое событие. Измерения не являются обязательными для запросов runReport , и вы можете использовать до девяти измерений для каждого запроса.

Полный список измерений, которые можно использовать для группировки и фильтрации данных, см. в разделе «Измерения API».

Группа

Вот пример запроса, который группирует активных пользователей по трем измерениям:

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" }]
 
}
 
```

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);
   
}
 
}
}
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()
       
);
   
}
}
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)



 
// 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"
   
}
 
]
},
...
],

Фильтр

Вы создаете отчеты с данными только для определенных значений измерения. Чтобы отфильтровать измерения, укажите FilterExpression в поле dimensionFilter .

Вот пример, который возвращает отчет о временных рядах eventCount , когда eventName имеет значение first_open для каждой date :

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"
       
}
     
}
   
},
 
}

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);
   
}
 
}
}
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()
       
);
   
}
}
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)



 
// 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 выбирает, когда оба browserChrome , а countryIdUS :

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

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);
   
}
 
}
}
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()
       
);
   
}
}
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)



 
// 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 . В отчете показаны данные о событиях для каждого pageTitle , кроме My Homepage :

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

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);
   
}
 
}
}
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()
       
);
   
}
}
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)



 
// 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 — это purchase , in_app_purchase и app_store_subscription_renew :

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

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);
   
}
 
}
}
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()
       
);
   
}
}
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)



 
// 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 строк данных о событиях. Чтобы просмотреть в отчете до 100 000 строк, вы можете включить "limit": 100000 в RunReportRequest .

Для отчетов, содержащих более 100 000 строк, необходимо отправить серию запросов и просмотреть результаты. Например, вот запрос первых 100 000 строк:

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

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);
   
}
 
}
}
    // 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);
    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)
    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 в ответе указывает общее количество строк независимо от значений limit и offset в запросе. Например, если в ответе указано "rowCount": 272345 , вам потребуется три запроса по 100 000 строк каждый, чтобы получить все данные.

Вот пример запроса для следующих 100 000 строк. Все остальные параметры, такие как dateRange , dimensions и metrics должны быть такими же, как в первом запросе.

POST https://analyticsdata.googleapis.com/v1beta/properties/GA_PROPERTY_ID:runReport
 
{
   
...
   
"limit": 100000,
   
"offset": 100000
 
}
      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);
    $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);
   
}
    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)
    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,
   
});

Вы можете использовать значения offset , например 200000 или 300000 , для получения последующих результатов. Все остальные параметры, такие как dateRange , dimensions и metrics должны быть такими же, как в первом запросе.

Используйте несколько диапазонов дат

Один запрос отчета может получить данные для нескольких dateRanges . Например, в этом отчете сравниваются первые две недели августа 2022 и 2023 годов:

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" }]
 
}

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);
   
}
 
}
}
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()
       
);
   
}
}
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)



 
// 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.