如何使用 Google Analytics Data API (GA4) Java 客户端库按维度进行过滤?

Ósc*_*car 3 google-analytics-api google-analytics-4 google-analytics-data-api

我正在尝试使用 Java 客户端库并应用维度过滤器来调用 Google Analytics Data API (GA4)。如果我不使用 setDimensionFilter 调用,这是有效的调用:

RunReportRequest request =
    RunReportRequest.newBuilder()
        .setProperty(propertyId)
        .addDimensions(com.google.analytics.data.v1beta.Dimension.newBuilder().setName("pageLocation"))
        .addMetrics(com.google.analytics.data.v1beta.Metric.newBuilder().setName("screenPageViews"))
        .addMetrics(com.google.analytics.data.v1beta.Metric.newBuilder().setName("activeUsers"))
//        .setDimensionFilter(FilterExpression.newBuilder().setFilter(Filter.newBuilder().setStringFilter(
//             Filter.StringFilter.newBuilder()
//               .setMatchType(Filter.StringFilter.MatchType.FULL_REGEXP)
//               .setField(Descriptors.FieldDescriptor, "pageLocation")
//               .setValue("MY_REGEXP")
//               .build())))
        .addDateRanges(com.google.analytics.data.v1beta.DateRange.newBuilder()
        .setStartDate(startDate.toStringYYYYMMDDWithDashes())
        .setEndDate(endDate.toStringYYYYMMDDWithDashes()))
        .setKeepEmptyRows(true)
        .build();
Run Code Online (Sandbox Code Playgroud)

我不知道如何使用setDimensionFilter。如果前面代码中注释的用法是正确的,那么唯一缺少的是对setField. 我不知道如何生成Descriptors.FieldDescriptor实例(甚至不知道它的含义)。

我已经查看了客户端库 javadoc以及代码示例(它们非常简单,不幸的是没有显示 的​​任何用法setDimensionFilter)。

小智 5

Descriptors.FieldDescriptor不是 GA4 Data API 的一部分,而是 protobuf 框架的内部功能

如果您尝试在名称为“pageLocation”的字段上调用此过滤器而不是使用 setField,我认为您可以执行以下操作

RunReportRequest request =
    RunReportRequest.newBuilder()
        .setProperty("properties/" + propertyId)
        .addDimensions(com.google.analytics.data.v1beta.Dimension.newBuilder().setName("pageLocation"))
        .addMetrics(com.google.analytics.data.v1beta.Metric.newBuilder().setName("screenPageViews"))
        .addMetrics(com.google.analytics.data.v1beta.Metric.newBuilder().setName("activeUsers"))
        .setDimensionFilter(FilterExpression.newBuilder()
            .setFilter(Filter.newBuilder()
                .setFieldName("pageLocation")
                .setStringFilter(Filter.StringFilter.newBuilder()
                    .setMatchType(Filter.StringFilter.MatchType.FULL_REGEXP)
                    .setValue("MY_REGEXP"))))
        .addDateRanges(com.google.analytics.data.v1beta.DateRange.newBuilder()
            .setStartDate("2020-03-31")
            .setEndDate("2021-03-31"))
        .build();
Run Code Online (Sandbox Code Playgroud)

另外,如果您想要有关如何使用的其他示例setDimensionFilter,这里是另一个可能有帮助的代码示例

RunReportRequest request =
          RunReportRequest.newBuilder()
              .setProperty("properties/" + propertyId)
              .addDimensions(Dimension.newBuilder().setName("city"))
              .addMetrics(Metric.newBuilder().setName("activeUsers"))
              .addDateRanges(DateRange.newBuilder().setStartDate("2020-03-31").setEndDate("today"))
              .setDimensionFilter(FilterExpression.newBuilder()
                  .setAndGroup(FilterExpressionList.newBuilder()
                      .addExpressions(FilterExpression.newBuilder()
                          .setFilter(Filter.newBuilder()
                              .setFieldName("platform")
                              .setStringFilter(Filter.StringFilter.newBuilder()
                                  .setMatchType(Filter.StringFilter.MatchType.EXACT)
                                  .setValue("Android"))))
                      .addExpressions(FilterExpression.newBuilder()
                          .setFilter(Filter.newBuilder()
                              .setFieldName("eventName")
                              .setStringFilter(Filter.StringFilter.newBuilder()
                                  .setMatchType(Filter.StringFilter.MatchType.EXACT)
                                  .setValue("in_app_purchase"))))))
              .setMetricFilter(FilterExpression.newBuilder()
                  .setFilter(Filter.newBuilder()
                      .setFieldName("sessions")
                      .setNumericFilter(Filter.NumericFilter.newBuilder()
                          .setOperation(Filter.NumericFilter.Operation.GREATER_THAN)
                          .setValue(NumericValue.newBuilder()
                              .setInt64Value(1000)))))
              .build(); 
Run Code Online (Sandbox Code Playgroud)