🐡
GA4で収集したデータをフィルタリングしながらAnalytics Data API で取得する
こちらの記事の続き
はじめに
APIに出力してほしくないデータを吐き出してしまうので、フィルタリングする方法を調べた。
基本的にはgoogleのリファレンスに載っている通りだが、英語な上に理解するのに時間がかかった。
Analytics Data Apiについて
dimensionFilter/metricFilter
フィルタリングはrunReportメソッドの引数にdimensionFilterあるいはmetricFilterをキーに指定する。
実装
今回、行いたいフィルタリングは下記
- ディメンションの値が"空文字"あるいは"(not set)"を除く
実装したのが下記コード
※GA4には予め、カスタムディメンションproductcodeを設定しています。
$response = $client->runReport([
'property' => {APIアクセスするための秘密鍵},
'dateRanges' => [
new DateRange([
'start_date' => '7daysAgo',
'end_date' => 'yesterday',
]),
],
'dimensions' => [
new Dimension([
'name' => 'customEvent:productcode',
]),
],
'metrics' => [
new Metric([
'name' => 'screenPageViews',
]),
new Metric([
'name' => 'totalUsers',
]),
],
'dimensionFilter' =>
new FilterExpression([
'and_group' => new FilterExpressionList([
'expressions' => [
new FilterExpression([
'not_expression' => new FilterExpression([
'filter' => new Filter([
'field_name' => 'customEvent:productcode',
'string_filter' => new StringFilter([
'match_type' => 1,
'value' => '',
]),
]),
])
]),
new FilterExpression([
'not_expression' => new FilterExpression([
'filter' => new Filter([
'field_name' => 'customEvent:productcode',
'string_filter' => new StringFilter([
'match_type' => 1,
'value' => '(not set)',
]),
]),
])
]),
],
]),
]),
dimensionFilterをキーに、FilterExpressionオブジェクトから細かいフィルタリング設定を行っている。
オブジェクトの引数で、さらにand、or、not等設定ができる。
結果
フィルタリング前
# php data/analyticsDataApi.php
Report result:
array(6) {
[0]=>
array(3) {
["productcode"]=>
string(9) "(not set)"
["screenPageViews"]=>
string(3) "182"
["totalUsers"]=>
string(1) "7"
}
[1]=>
array(3) {
["productcode"]=>
string(7) "00021"
["screenPageViews"]=>
string(2) "20"
["totalUsers"]=>
string(1) "7"
}
[2]=>
array(3) {
["productcode"]=>
string(7) "00007"
["screenPageViews"]=>
string(1) "2"
["totalUsers"]=>
string(1) "6"
}
[3]=>
array(3) {
["productcode"]=>
string(0) ""
["screenPageViews"]=>
string(1) "1"
["totalUsers"]=>
string(1) "2"
}
[4]=>
array(3) {
["productcode"]=>
string(2) "21"
["screenPageViews"]=>
string(1) "0"
["totalUsers"]=>
string(1) "1"
}
[5]=>
array(3) {
["productcode"]=>
string(7) "00004"
["screenPageViews"]=>
string(1) "0"
["totalUsers"]=>
string(1) "5"
}
}
フィルタリング後
# php data/analyticsDataApi.php
Report result:
array(4) {
[0]=>
array(3) {
["productcode"]=>
string(7) "00021"
["screenPageViews"]=>
string(2) "20"
["totalUsers"]=>
string(1) "7"
}
[1]=>
array(3) {
["productcode"]=>
string(7) "00007"
["screenPageViews"]=>
string(1) "2"
["totalUsers"]=>
string(1) "6"
}
[2]=>
array(3) {
["productcode"]=>
string(2) "21"
["screenPageViews"]=>
string(1) "0"
["totalUsers"]=>
string(1) "1"
}
[3]=>
array(3) {
["productcode"]=>
string(7) "00004"
["screenPageViews"]=>
string(1) "0"
["totalUsers"]=>
string(1) "5"
}
}
フィルタリングがかかったことで、空文字と(not set)が消えた。
参考
Discussion