はじめに
このガイドでは、レポートのクエリ作成についてをカバーします。レポート処理を動かし、完成したレポートをダウンロードします。
事前の準備
- 製品版のDFPネットワークにアクセスする
- DFPのクライアントライブラリ
入門
IDFPのレポートについて詳しくないのであれば、 この記事でどのようにDFPのレポートをUIで表示するのかを学んでください。UIは、ツールチップによりどのカラムとレポートのプレビューを持ちます。複雑なレポートを作成するときには、APIで作成する前にUIでテストすると簡単です。
レポートクエリの作成
ReportQueryオブジェクトは、レポートの詳細すべてを持ちます。 ここに、レポートのdimensions(範囲), dimension attributes(範囲アトリビュート), カラム, フィルター と取得期間をセットします。 以下のコードは単一のオーダーで返される基本的なレポートを表示します。
// クエリの作成 ReportQuery reportQuery = new ReportQuery(); reportQuery.setDimensions(new Dimension[] {Dimension.DATE, Dimension.ORDER_ID}); reportQuery.setColumns(new Column[] {Column.AD_SERVER_IMPRESSIONS, Column.AD_SERVER_CLICKS, Column.AD_SERVER_CTR, Column.AD_SERVER_CPM_AND_CPC_REVENUE}); reportQuery.setDimensionAttributes(new DimensionAttribute[] { DimensionAttribute.ORDER_TRAFFICKER, DimensionAttribute.ORDER_START_DATE_TIME, DimensionAttribute.ORDER_END_DATE_TIME}); // 要求データを絞り込むための宣言の作成 StatementBuilder statementBuilder = new StatementBuilder() .where("ORDER_ID = :orderId") .withBindVariableValue("orderId", orderId); // 宣言をセット reportQuery.setStatement(statementBuilder.toStatement()); // 開始と終了日時のセット、または、ダイナミックな期間の設定 reportQuery.setDateRangeType(DateRangeType.CUSTOM_DATE); reportQuery.setStartDate( DateTimes.toDateTime("2013-05-01T00:00:00", "America/New_York").getDate()); reportQuery.setEndDate( DateTimes.toDateTime("2013-05-31T00:00:00", "America/New_York").getDate());
レポート処理の作成
レポートクエリを取得したら、いよいよレポートを処理しましょう。 ReportJobオブジェクトはレポートの状態を持ち、ダウンロード可能になったことを教えてくれます。 そのときには、ReportService.runReportJob メソッドによりレポート処理を走らせます。
// レポート処理の作成 ReportJob reportJob = new ReportJob(); reportJob.setReportQuery(reportQuery); // 処理を走らせる reportJob = reportService.runReportJob(reportJob);
レポートをダウンロード
開始されたレポート処理は、サーバによりIDを付与されます。このIDを、ReportService.getReportJobで使用し、レポートの状態を取得しましょう。
レポートは様々なフォーマットでダウンロードすることができます。取得したレポートをさらに加工したい場合には、CSV_DUMPフォーマットを選択してください。
// ダウンローダ作成 ReportDownloader reportDownloader = new ReportDownloader(reportService, reportJob.getId()); // レポート準備完了を待つ
reportDownloader.waitForReportReady(); // ファイルの場所を変更 File file = File.createTempFile("delivery-report-", ".csv.gz"); System.out.printf("Downloading report to %s ...", file.toString()); //レポートをダウンロード ReportDownloadOptions options = new ReportDownloadOptions(); options.setExportFormat(ExportFormat.CSV_DUMP); options.setUseGzipCompression(true); URL url = reportDownloader.getDownloadUrl(options); Resources.asByteSource(url).copyTo(Files.asByteSink(file)); System.out.println("done.");
データを読み込み
クライアントライブラリの多くでは、レポートデータを読み込むためのユーティリティーが提供されています。これはレポートデータを、異なる期間のデータを合体したり、さらに加工するときに便利です。
Listrows = CsvFiles.getCsvDataArray(filePath, true); for (String[] row : rows) { // Additional row processing processReportRow(row); }
他のサンプルは client libraries
よくある質問
テスト時、レポートが空なのはなぜだろう
テストネットワークは広告を配信しません。配信レポート自体が存在しません。
error
ReportError.COLUMNS_NOT_SUPPORTED_FOR_REQUESTED_DIMENSIONS
エラーが返されます。
DFPでは、カラムと行のすべての組み合わせがサポートされているわけではありません。複雑なレポート作成のためには、まずはUIで作成しAPIにもってくる方法で行ってください。
UIでは全期間のクリックとインプレッションの数が合いません。
作成中に数値が変化していることが考えられます。
作成中に数値が変化していることが考えられます。
レポート作成に時間がかかり、時々時間切れになります。どうしたらよいでしょうか?
データの期間と、行数を減らすことで、パフォーマンスを向上させることができます。より少ない期間で複数のレポートを処理するようにしましょう。そして、それが個別の期間のデータを合体させることで希望する全期間のデータを作成するようにしましょう。
INVENTORY_LEVEL
とLINE_ITEM_LEVEL
カラムの違いは?
Columns with
LINE_ITEM_LEVEL
can only be used if you have line item level dynamic allocation enabled on your network. These columns include data from the line item level dynamic allocation to AdSense or Ad Exchange. Similarly, The INVENTORY_LEVEL
columns include data from inventory level dynamic allocation. For more information about dynamic allocation, see this help center article.