Search code examples
c#.netgoogle-apigoogle-analytics-apigoogle-api-dotnet-client

Programatically specify Google Analytics Reporting API v4 query results


How does one query specific pages? I only need to grab the data from specific pages.

Example: domain.com/thisPage, domain.com/anotherPage, etc..

ReportRequest reportRequestLandingPath = new ReportRequest
{
    ViewId = GoogleAnalyticsIds,
    DateRanges = new List<DateRange>() { dateRange },
    Dimensions = new List<Dimension>() { landingPagePath },
    Metrics = new List<Metric>() { avgSessionDuration, sessions, pageviewsPerSession }
};

I'm trying to get results that look something like this so I can add them to a google chart I'm building.

My problem is that I get back all 78 results for each page I have on my domain. I only need to get avgSessionDuration, sessions, pageviewsPerSession from 5-6 specific pages.


Solution

  • You should add a filter to your request just add which ever pages that you want to see data for and only the data for those pages will be returned.

    var metrics = new List<Metric>();
    metrics.Add(new Metric { Expression = "ga:avgSessionDuration", Alias = "Avg. Session Duration" });
    metrics.Add(new Metric { Expression = "ga:sessions", Alias = "Sessions" });
    metrics.Add(new Metric { Expression = "ga:pageviewsPerSession", Alias = "Pageviews Per Session" });
    
    var dimensions = new List<Dimension>();
    dimensions.Add(new Dimension { Name = "ga:landingPagePath" });
    
    var filterClause = new DimensionFilterClause();
    
    var filter = new DimensionFilter
             {
             DimensionName = "ga:landingPagePath",
             Operator__ = "PARTIAL",
             Expressions = new List<string> { "accessing-google-calendar-with-php-oauth2" }
            };
    filterClause.Filters = new List<DimensionFilter> { filter };
    ReportRequest reportRequest = new ReportRequest
                {
                    ViewId = "78110423",
                    DateRanges = new List<DateRange>() { new DateRange() { StartDate = "3daysago", EndDate = "today" } },
                    Dimensions = dimensions,
                    Metrics = metrics,
                    DimensionFilterClauses = new List<DimensionFilterClause> { filterClause }
                };
    
    List<ReportRequest> requests = new List<ReportRequest>();
    requests.Add(reportRequest);
    
    // Create the GetReportsRequest object.
    GetReportsRequest getReport = new GetReportsRequest() { ReportRequests = requests };
    

    I recommend using Query explorer for testing your filters it can be tricky to get them to work.