
GA4は次世代のGAアクセス解析ツールです。
今までUAではGoogle Analyics Reporting APIというものがありましたが、GA4ではGoogle Analytics Data APIというものがあります。
今回はそのAPIを用いつつ、BigQuery内に集計をし、最終的にはLooker Studio内で簡単に可視化するといった処理の構築をしてみようと思います。
イベント数が多くなるとGA4ではローデータが吐き出せなくなってしまったりします。
イベント数はデイリーで100万イベントまで可能で、それ以上は吐き出せなくなってしまいます。
吐き出せるは吐き出せますが、100万超えた分については吐き出せないです。
参照:googleヘルプ
なので、代替となる手法を考える必要があります。
・スプレッドシートで吐き出す(探索レポート)
・Google Analytics Data APIで吐き出す
いろんな手法がありますが、今回はGoogle Analytics Data APIを用いて実行してみます。
/**
* Google Analytics Data APIによるデータ取得
*/
function main_ga4() {
//現在時刻を取得
var date = new Date();
date.setDate(date.getDate() - 1);
//昨日の日付を出力
var yesterday = Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy-MM-dd');
try {
// 指標を指定。複数指定する場合はList化する。
metric_list = ["screenPageViews","totalUsers","sessions","eventCount","bounceRate"];
metrics = [];
for(var x = 0; x < metric_list.length; x++){
let metricx = AnalyticsData.newMetric();
metricx.name = metric_list[x];
metrics.push(metricx);
}
// ディメンションを指定。複数指定する場合はList化する
dimension_list = ["pagePath","sessionSource","sessionMedium"/*,"sourceMedium"*/,"sessionCampaignName","date","isoWeek","customEvent:sample_event_param"];
dimensions = [];
for(var x = 0; x < dimension_list.length; x++){
let metricx = AnalyticsData.newDimension();
metricx.name = dimension_list[x];
dimensions.push(metricx);
}
// データの日付範囲
const dateRange = AnalyticsData.newDateRange();
dateRange.startDate = yesterday;
dateRange.endDate = yesterday;
//dateRange.startDate = "2023-05-01";
//dateRange.endDate = "2023-05-31";
// フィルター、複数指定可能
//const filter = AnalyticsData.newFilterExpression();
// (設定複雑なので省略)
// ソート
//const order = AnalyticsData.newOrderBy();
// (省略)
// 上で作った設定値をリクエストパラメータに設定
const request = AnalyticsData.newRunReportRequest();
request.dimensions = dimensions;
request.metrics = metrics;
request.dateRanges = dateRange;
//request.dimensionFilter = filter;
//request.orderBys = order;
// API 実行
const report = AnalyticsData.Properties.runReport(request,
'properties/' + GA4_PROPERTY_ID);
if (!report.rows) {
Logger.log('No rows returned.');
return;
}
sendMail("完了")
} catch (e) {
// エラーになった場合の処理
Logger.log(`Failed with error: ${e}`);
sendMail(e)
}
}
/**
* alertメールの送信
*/
function sendMail(status) {
Logger.log(status)
const alert_to_mail = "****" //送信先のメールアドレス
const subject = '【GA4】スプレッドシートへのデータ取り込み処理'+status; //件名
if(status == "完了"){
const body = "データ取得完了";
} else {
const body = "処理にエラーが発生しました。内容は以下となります。\n"+error; //本文
}
const options = { name: 'tanaka' }; //送信者の名前
GmailApp.sendEmail(alert_to_mail, subject, body, options);
}
以下のようなエラーが出ました。
「エラーで失敗しました: GoogleJsonResponseException: analyticsdata.properties.runReport への API 呼び出しに失敗しました: リクエストはネストされたリクエスト内で 9 ディメンジョンに制限されています。
このリクエストは 11 ディメンジョンです。」
Failed with error: GoogleJsonResponseException: API call to analyticsdata.properties.runReport failed with error: Requests are limited to 9 dimensions within a nested request.
This request is for 11 dimensions.
Google Analytics Data APIはディメンションの個数などの制限はないようですが、(そもそもLooker StudioもAPIで接続してるわけだから制限はないはず...)
ディメンションの組み合わせ方次第で制限があるみたいですね。
https://stackoverflow.com/questions/66853674/number-of-dimensions-allowed-in-ga4-data-api
Googleの公式ドキュメントには記載がないようです。
Google Analytics Data APIの制限やトークン数について
https://developers.google.com/analytics/devguides/reporting/data/v1/quotas?hl=ja