BigQueryのパラメタイズドクエリとTableauでGA4の任意のユーザーセグメントを対比して可視化する(前編)

BigQueryのパラメタイズドクエリとTableauでGA4の任意のユーザーセグメントを対比して可視化する(前編)

本コンテンツは、今見ていただいている「前編」と、続きである「後編」の2つの記事で構成されています。

以前(2022年8月)、「TableauからGA4に接続するにはBigQuery一択」という記事を書きました。そのときの理由は、TableauからGA4のレポーティングAPIを叩けないから。というものでした。その状況はこの記事を書いている2023年1月時点でも変化なく、Tableau Desktopの最新版、2022.4にも、GA4へのネイティブコネクタ接続(レポーティングAPI経由での接続)は実装されていません。

一方、少々別の話になりますが、2022年11月10日、Googleは、レポーティングAPIの利用に割り当て性を導入しました。これにより、たとえば、Looker StudioでGA4のコネクタを利用している場合、かなりな頻度で「割り当てを消費してしまったので、ウィジェットを表示できないエラー」が出るようになってしまいました。ということは、近い将来、もし、Tableau DesktopにGA4へのネイティブコネクタが実装されたとしても、実用上使い物にならない懸念があるということを意味しています。

という訳で、TableauからGA4に接続するにはさらにGA4一択となったのではないかと思います。

で、今日は、TableauからBigQuery上のGA4データに接続するときに、「非常にTableauらしい可視化」テクニックを使い、ユーザーセグメントを可視化する方法を紹介します。使っているのは、以下の2つのテクニックです。

  • Tableauの「パラメータ」
  • パラメータをSQL文に組み込んだパラメタイズドクエリ

ユーザーセグメントを作成する条件は、(ま、なんでも良いのですが)わかりやすく、「任意のイベントを、任意のページで発生させたユーザー」ということにします。で、「任意のページ」を、page_location(=URLのことです)でも、page_title(=ページタイトルのことです。)でも指定できるようにします。

まずはBigQueryに直接SQL文を書く

Tableauのデータ接続で、BigQueryに対しカスタムSQLをいきなり書くことも、やってできないことはないと思いますが、現実的には、まずしっかりと通るSQL文をBigQueryに書くのが最初にやることだと思います。ここでは、以下のSQL文を書いています。とkろどころ下線を引いていますが、あとから解説します。

SQL文の解説

他人の書いたSQL文の解読には以下の2つのお作法があります。

  • with句があれば、with句から先に読む
  • 入れ子になっているサブクエリは内側を先に読む

それに従って解説しますと、、、

with句の内側(4行目から8行目)

user_pseudo_id、event_name、page_locationのリストを取得しています。取得する期間については、8行目の _table_suffix関数を使って、2022年12月1日から2022年12月31日としています。

赤線のpage_locationを、page_titleに変えれば、容易にページタイトルとなりますね。また、緑と水色の下線の中身を変えれば、容易に別の期間にできます。

with句の外側(2行目と9行目)

with句の内側で作成したリストについて、9行目のwhere句でevent_nameと、page_locationでフィルタを掛けています。今は「page_locationに、”ga4/”を含むページでscrollイベントを発生させた」という条件になっています。regexp_containsという関数は、第一引数(page_attribute)、が 第二引数の正規表現の記述にマッチをすればtrueを返すという機能を果たしています。

その条件で取得しているのが、2行目の user_pseudo_idです。つまり、with句全体で、特定の条件に合致したユーザーのリストを取得しているということが分かります。

本体クエリの内側(14行目から19行目)

非常に重要なのが14行目です。もし、取得したuser_pseudo_idが、with句で取得したuser_pseudo_idと一致する場合には、true、一致しなければfalseを返しています。列名は、segment_flagです。with句でリストとして取得したのuser_pseudo_idに一致するということは、セグメントに入っている、一致しなければセグメントに入っていない。ということだと理解できると思います。

他には、15行目では、user_pseodo_idを、16行目では、session_idを、17行目では、purchaseイベントを対象として、該当すれば1、しなけrば0を返す、cv_flagという列を取得しています。18行目、19行目から分かる通り、2022年12月1日から2022年12月31日のテーブルを対象としています。

本体クエリの外側(12行目と20行目)

segment_flag、user_pseudo_id、session_idでグループ化した上で、cv_flagを取得しています。グループ化の最小粒度を規定しているのがsession_idなので、max(cv_flag)は、セッションごとに、cvしたか(=値は1)、cvしていないか(値は0)を返しています。

全体で、わずか20行のSQL文ということもあり、こうして少しづつ、部分に分けて読み解けば、必ず読み解けますね。最初ちょっと面倒な気持ちになるのも理解できますが、やってみれば意外と分かった。ということになる場合も多いです。ぜひ、お作法に従って解読してみてください。

SQL文の実行結果

上記のSQL文を実行した結果が、以下となります。この形のテーブルにデータが整形済であれば、Tableauの使い手にとっては、あとは簡単に、セグメント別ユーザー数、セグメント別セッション数、セグメント別CV数、セグメント別コンバージョン率(ユーザースコープも、セッションスコープも)、セッション/ユーザーなどを可視化できるはずです。

Tableauでの可視化結果

Tableauで可視化した結果は、以下の通りです。いい感じですね。(^^)

ただ、いい感じではありますが、これだけだったら、GA4の探索配下のレポートでもできます。

検証を兼ねて、以下に画面コピーを掲載します。

続く

長くなったので、Tableauの「パラメータ」と、BigQuery側の「パラメタイズドクエリ」を使って、柔軟にユーザーセグメントを切り替える方法について後編で紹介します。