*/
public class RunInventoryReport {
public static void runExample(DfpServices dfpServices, DfpSession session) throws Exception {
// Get the ReportService.
ReportServiceInterface reportService = dfpServices.get(session, ReportServiceInterface.class);
// Get the NetworkService.
NetworkServiceInterface networkService =
dfpServices.get(session, NetworkServiceInterface.class);
// Get the root ad unit ID to filter on.
String rootAdUnitId = networkService.getCurrentNetwork().getEffectiveRootAdUnitId();
// Create statement to filter on an ancestor ad unit with the root ad unit ID to include all
// ad units in the network.
StatementBuilder statementBuilder = new StatementBuilder()
.where("AD_UNIT_ANCESTOR_AD_UNIT_ID = :ancestorAdUnitId")
.withBindVariableValue("ancestorAdUnitId", Long.parseLong(rootAdUnitId));
// Create report query.
ReportQuery reportQuery = new ReportQuery();
reportQuery.setDimensions(
new Dimension[] {Dimension.AD_UNIT_ID, Dimension.AD_UNIT_NAME});
reportQuery.setColumns(new Column[] {Column.AD_SERVER_IMPRESSIONS,
Column.AD_SERVER_CLICKS, Column.DYNAMIC_ALLOCATION_INVENTORY_LEVEL_IMPRESSIONS,
Column.DYNAMIC_ALLOCATION_INVENTORY_LEVEL_CLICKS,
Column.TOTAL_INVENTORY_LEVEL_IMPRESSIONS,
Column.TOTAL_INVENTORY_LEVEL_CPM_AND_CPC_REVENUE});
// Set the filter statement.
reportQuery.setStatement(statementBuilder.toStatement());
// Set the ad unit view to hierarchical.
reportQuery.setAdUnitView(ReportQueryAdUnitView.HIERARCHICAL);
// Set the dynamic date range type or a custom start and end date.
reportQuery.setDateRangeType(DateRangeType.YESTERDAY);
// Create report job.
ReportJob reportJob = new ReportJob();
reportJob.setReportQuery(reportQuery);
// Run report job.
reportJob = reportService.runReportJob(reportJob);
// Create report downloader.
ReportDownloader reportDownloader = new ReportDownloader(reportService, reportJob.getId());
// Wait for the report to be ready.