GA4 の Analytics Data API を使ってみた3
GA4 の完全移行が始まってしまいました。いかがお過ごしでしょうか?
それに備えた記事を書いていたのですが、やっぱりフィルター機能が必要だなと感じております。
特に目標達成を複数設定していると、フィルターがないと個別の目標達成が見れない!!と今さら気づいてしまいました。そちらを設定するためのフィルター機能を見ていきたいと思います。
単純な フィルター 例
サクッと medium が referral のもののみを対象とするようなフィルタを作成する場合を考えます。
// filter の entity を作成しておきます。
const dimensionFilter = AnalyticsData.newFilterExpression();
// 条件内容を記載するための filter entity を作成
const testFilter = AnalyticsData.newFilter();
// 対象フィールドを指定
testFilter.fieldName = 'medium';
// 文字列のフィルター条件を記載するための entity を作成
const testStringFilter = AnalyticsData.newStringFilter();
// match するタイプを記載
testStringFilter.matchType = 1; // matchType の指定はもっといい方法があるはず
// match する文字列を記載
testStringFilter.value = 'referral';
// 条件を上位の entity の field に格納していきます。
testFilter.stringFilter = testStringFilter;
dimensionFilter.filter = testFilter;
たった一つの条件を書くのにも内容が複雑になります。
前回のソートの条件を書いた時点で Data API はもう分かったと思っていたのですが、実際はフィルターの条件を書く方が複雑で考えることが多かったです。
しかも勘の良い方なら気が付くと思いますが、2つ以上の条件のときはどうするのか?and や or の書き分けは?という疑問が湧いてくると思います。
FilterExpression に各種条件の指定方法が記載されていました。
上の単純な例は dimension.filter に直接1つの条件を書いていたのですが、`andGroup` や `orGroup` を再帰的に呼び出すことで、フィルターに必要な条件をかけることができます。試しに andGroup を使ってみます。
And 条件を指定する方法
medium が referral かつ source に insta を含む場合を考えます。
const dimensionFilter = AnalyticsData.newFilterExpression();
// andGroup を作成します。この expressions field に条件を追加していきます。
const andDimensionFilter = AnalyticsData.newFilterExpressionList();
andDimensionFilter.expressions = [];
// 1つ目の条件。medium が referral
const testFilterExpression = AnalyticsData.newFilterExpression();
const testFilter = AnalyticsData.newFilter();
testFilter.fieldName = 'medium';
const testStringFilter = AnalyticsData.newStringFilter();
testStringFilter.matchType = 1; // matchType の指定はもっといい方法があるはず
testStringFilter.value = 'referral';
testFilter.stringFilter = testStringFilter;
testFilterExpression.filter = testFilter;
// 2つ目の条件。source に insta を含む
const testFilterExpression2 = AnalyticsData.newFilterExpression();
const testFilter2 = AnalyticsData.newFilter();
testFilter2.fieldName = 'source';
const testStringFilter2 = AnalyticsData.newStringFilter();
testStringFilter2.matchType = 4; // matchType の指定はもっといい方法があるはず
testStringFilter2.value = 'insta';
testFilter2.stringFilter = testStringFilter2;
testFilterExpression2.filter = testFilter2;
andDimensionFilter.expressions.push(testFilterExpression);
andDimensionFilter.expressions.push(testFilterExpression2);
dimensionFilter.andGroup = andDimensionFilter;
1つ目との大きな違いは、
dimensionFilter.filter = testFilter
と filter フィールドに直接 testFilter (medium が referral)という条件を指定していました。複数の条件が必要な場合
dimensionFilter.andGroup = andDimensionFilter;
andGroup フィールドに複数条件を持った entity を渡します。
とりあえず、最低限の指定の方法は可能になりました。Spreadsheet の記載を and 条件に詰め込む方法を考えたいと思います。
参考
途中の
testStringFilter.matchType
に入れる引数は以下を参考にしています。この変数を取得する方法がわかる方がいたら教えてもらえると助かります!!
全体的な説明はこちら。