BigQueryとGoogleAnalyticsSQLクエリ
Nov 14 2020
GoogleAnalyticsデータからBigQueryにインポートされたテーブルからマトリックスを構築しようとしています。この表は、URL、タイムスタンプなどのいくつかのプロパティとともにsession_IDを含むWebサイトでのヒットを表しています。また、イベントと呼ばれるユーザー定義のアクションに基づくメタデータもあります。以下は表の例です。
session_id hit_timestamp url event_category
1 11:12:23 url134 event1
1 11:14:23 url2234 event2
1 11:16:23 url_target null
2 03:12:11 url2344 event1
2 03:14:11 url43245 event2
3 09:10:11 url5533 event2
3 09:09:11 url_target null
4 08:08:08 url64356 event2
4 08:09:08 url56456 event2
4 08:10:08 url_target null
意図した結果は、次の表のようになります。
session_id event1 event2 target
1 1 1 1
2 0 0 0
3 0 0 0
4 0 2 1
url_targetにつながらないイベントは、ターゲットを含めてゼロとして示す必要があることに注意してください。つまり、クエリはタイムスタンプを調べて、タイムスタンプを調べて、イベントの後にurl_targetが続くことを確認する必要があります。たとえば、event2の後に「url_target」が続かなかったため、ゼロとして示しています。session_id 3の場合と同じように、event2の後にurl_targetが続かなかったため、event2の後ではなく前のurl_targetのタイムスタンプに注意してください。したがって、ゼロとして示されます。
そのマトリックスを生成するためのSQLクエリの作成にご協力いただければ幸いです。session_idでグループ化してから、「count」を使用してイベントのカウントを実行することしかできませんでしたが、タイムスタンプと照合して他のフィールドを確認するSQL書き込みクエリを見つけることができませんでした。
回答
1 GordonLinoff Nov 14 2020 at 13:01
サブクエリを使用して、最初(または最後)のターゲット時間を計算します。次に、使用countif()と集約:
select session_id,
countif(target_hit_timestamp > hit_timestamp and category = 'event1') as event1,
countif(target_hit_timestamp > hit_timestamp and category = 'event2') as event2,
countif(url like '%target') as target
from (select t.*,
min(case when url like '%target' then hit_timestamp end) over (partition by session_id) as target_hit_timestamp
from t
) t
group by session_id
GMB Nov 14 2020 at 13:00
考えてみましょう:
select session_id,
countif(cnt_url_target > 0 and event_category = 'event1') event1,
countif(cnt_url_target > 0 and event_category = 'event2') event2,
countif(url = 'url_target') target
from (
select t.*,
countif(url = 'url_target') over(partition by session_id order by hit_timestamp desc) cnt_url_target
from mytable t
) t
group by session_id