🐡

GA4で収集したデータをフィルタリングしながらAnalytics Data API で取得する

2022/08/08に公開

こちらの記事の続き
https://zenn.dev/ryomaryoma1010/articles/1474df8fd78c1e

はじめに

APIに出力してほしくないデータを吐き出してしまうので、フィルタリングする方法を調べた。
基本的にはgoogleのリファレンスに載っている通りだが、英語な上に理解するのに時間がかかった。

Analytics Data Apiについて

https://developers.google.com/analytics/devguides/reporting/data/v1

dimensionFilter/metricFilter

フィルタリングはrunReportメソッドの引数にdimensionFilterあるいはmetricFilterをキーに指定する。

https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport

実装

今回、行いたいフィルタリングは下記

  • ディメンションの値が"空文字"あるいは"(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等設定ができる。
https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/FilterExpression

結果

フィルタリング前

# 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)が消えた。

参考

https://developers.google.com/analytics/devguides/reporting/data/v1

https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport

https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/FilterExpression

Discussion