1
votes

I'm trying to use a Segment Dimension Filter for a custom Dimension in the Google Analytics Api v4 in Java. As Template I am using the following Sample:

https://developers.google.com/analytics/devguides/reporting/core/v4/samples

This works fine with all Dimensions, but as soon as I try to filter one of our Custom Dimensions the Filter seems to stop working. It doesn't matter if the Dimension fulfills the filter-condition, the response includes all Values.

But the strange part is when I set a Value in the filter-condition that doesn't exists in the custom Dimension, I don't get any response. So in that moment the Filters seems to work.

Thank you all for your help.

// Create the DateRange object.
    DateRange dateRange = new DateRange();
    dateRange.setStartDate("yesterday");
    dateRange.setEndDate("yesterday");

    Metric User = new Metric().setExpression("ga:users").setAlias("User");


    Dimension prev_page_path = new Dimension().setName("ga:previousPagePath");
    Dimension err = new Dimension().setName("ga:dimension14");
    Dimension ShopName = new Dimension().setName("ga:dimension1");

    // Create the segment dimension.
    Dimension segmentDimensions = new Dimension().setName("ga:segment");


    // Create Dimension Filter.
    SegmentDimensionFilter dimensionFilter = new SegmentDimensionFilter()
        .setDimensionName("ga:dimension14")
        .setOperator("EXACT")
        .setExpressions(Arrays.asList("404"));


    // Create Segment Filter Clause.
    SegmentFilterClause segmentFilterClause = new SegmentFilterClause()
        .setDimensionFilter(dimensionFilter);

    // Create the Or Filters for Segment.
    OrFiltersForSegment orFiltersForSegment = new OrFiltersForSegment()
        .setSegmentFilterClauses(Arrays.asList(segmentFilterClause));

    // Create the Simple Segment.
    SimpleSegment simpleSegment = new SimpleSegment()
        .setOrFiltersForSegment(Arrays.asList(orFiltersForSegment));

    // Create the Segment Filters.
    SegmentFilter segmentFilter = new SegmentFilter()
        .setSimpleSegment(simpleSegment);

    // Create the Segment Definition.
    SegmentDefinition segmentDefinition = new SegmentDefinition()
        .setSegmentFilters(Arrays.asList(segmentFilter));

    // Create the Dynamic Segment.
    DynamicSegment dynamicSegment = new DynamicSegment()
        .setSessionSegment(segmentDefinition)
        .setName("404");

    // Create the Segments object.
    Segment segment = new Segment()
        .setDynamicSegment(dynamicSegment);


    // Create the ReportRequest object.
    ReportRequest request = new ReportRequest()
        .setViewId(VIEW_ID)
        .setDateRanges(Arrays.asList(dateRange))
        .setDimensions(Arrays.asList( prev_page_path, ShopName, err, segmentDimensions))
        .setSegments(Arrays.asList(segment))
        .setMetrics(Arrays.asList(User));

    // Create the GetReportsRequest object.
    GetReportsRequest getReport = new GetReportsRequest()
        .setReportRequests(Arrays.asList(request));

    // Call the batchGet method.
    GetReportsResponse response = service.reports().batchGet(getReport).execute();

The Anwser would look like:

ga:previousPagePath: #########
ga:dimension1: #########
ga:dimension14: 404
ga:segment: 404
Date Range (0): User: 1

ga:previousPagePath: #########
ga:dimension1: #########
ga:dimension14: productlist
ga:segment: 404
Date Range (0): User: 1

...

1

1 Answers

1
votes

The Problem still exists, but I found a Workaround, for everyone who is in the same Situation:

  DimensionFilterClause DFC = new DimensionFilterClause().setFilters(Arrays.asList(
            new DimensionFilter()
            .setDimensionName("ga:dimension14")
            .setOperator("EXACT")
            .setExpressions(Arrays.asList("404"))));

    // Create the ReportRequest object.
    ReportRequest request = new ReportRequest()
        .setViewId(VIEW_ID)
        .setDateRanges(Arrays.asList(dateRange))
        .setDimensionFilterClauses(Arrays.asList(DFC))
        .setDimensions(Arrays.asList( prev_page_path, ShopName, Seitentyp))
        .setMetrics(Arrays.asList(User));