I'm trying to fetch 5 days histogram from google analytics via APIv4, where each bucket is 1 day
This is the query that i'm trying to implement and it works fine when running via Query builder
{
"reportRequests": [
{
"viewId": "810020000",
"filtersExpression": "ga:pagePath=@mypage",
"dateRanges": [
{
"startDate": "5daysAgo",
"endDate": "today"
}
],
"metrics": [
{
"expression": "ga:entranceRate"
}
],
"dimensions": [
{
"name": "ga:nthDay",
"histogramBuckets": [
"0",
"1",
"2",
"3",
"4"
]
}
],
"orderBys": [
{
"fieldName": "ga:nthDay",
"orderType": "HISTOGRAM_BUCKET",
"sortOrder": "ASCENDING"
}
]
}
]
}
however when i try to run the same query through JAVA (APIv4) i only get a single result (if im not adding sortBy) and an error below if I add sort
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Sort key ga:nthDay is not a dimension or metric in this query.",
"reason" : "badRequest"
} ],
"message" : "Sort key ga:nthDay is not a dimension or metric in this query.",
"status" : "INVALID_ARGUMENT"
}
This is the java code
Integer uniquePageviews = analyticsApi.getUniquePageViewsHistogramDaily("5daysAgo", "today", "ga:uniquePageviews");
public Integer getUniquePageViewsHistogramDaily(String startDayPhrase, String endDayPhrase, String gaMetricsPhrase) throws IOException {
DateRange dateRange = new DateRange();
dateRange.setStartDate(startDayPhrase);
dateRange.setEndDate(endDayPhrase);
List<DateRange> dateRanges = new ArrayList<>();
dateRanges.add(dateRange);
Metric metric = new Metric();
metric.setExpression(gaMetricsPhrase);
List<Metric> metrics = new ArrayList<>();
metrics.add(metric);
//TODO caclulate dynamically
List<Long> histogramBuckets = new ArrayList<>();
histogramBuckets.add(0L);
histogramBuckets.add(1L);
histogramBuckets.add(2L);
histogramBuckets.add(3L);
histogramBuckets.add(4L);
List<Dimension> dimensions = new ArrayList<>();
Dimension histogram = new Dimension();
histogram.setName("ga:nthDay");
histogram.setHistogramBuckets(histogramBuckets);
List<OrderBy> orderBys = new ArrayList<>();
OrderBy orderByDay = new OrderBy();
orderByDay.setFieldName("ga:nthDay");
orderByDay.setOrderType("HISTOGRAM_BUCKET");
orderByDay.setSortOrder("ASCENDING");
orderBys.add(orderByDay);
return getUniquePageViewsHistogramDaily(dateRanges, metrics, dimensions, "ga:pagePath=@myaccount",orderBys);
}
private Integer getUniquePageViewsHistogramDaily(List<DateRange> dateRangeList,
List<Metric> metrics,
List<Dimension> dimensions,
String filterExpression,
List<OrderBy> orderBys) throws IOException {
ReportRequest request = new ReportRequest()
.setViewId(getViewId())
.setDateRanges(dateRangeList)
.setDimensions(dimensions)
.setMetrics(metrics)
.setFiltersExpression(filterExpression)
.setOrderBys(orderBys);
ArrayList<ReportRequest> requests = new ArrayList<>();
requests.add(request);
// Create the GetReportsRequest object.
GetReportsRequest getReport = new GetReportsRequest().setReportRequests(requests);
// Call the batchGet method.
GetReportsResponse response = analyticsBuilder.reports().batchGet(getReport).execute();
return Integer.valueOf(response.getReports().get(0).getData().getTotals().get(0).getValues().get(0));
}
How can i get a normal 5 days histogram via Java?
OK Thanks to Intellij I've found the issue Appears that ive forgot to add the histogram dimension to dimensions list
dimensions.add(histogram);
Now all is working as expected Thank you!